Results
Device classes
A run only ranks against identical hardware, so the class has to be right.
Sources
| Source | Gives | Limits |
|---|---|---|
| WebGPU adapter info | Vendor and architecture, e.g. nvidia, lovelace | Model is usually blank |
| WebGL renderer string | The model in Chromium, e.g. NVIDIA GeForce RTX 4090 | Firefox returns a representative model (“or similar”); Safari returns “Apple GPU” |
Rules
- The model is trusted only when WebGL and WebGPU name the same vendor. Dual-GPU laptops can route them to different chips.
- Sanitized strings keep vendor and architecture only. The run is unranked with
model-unresolved. - A parsed model that is not in the spec table is unranked with
model-unlisted, so invented names never rank. - Adapter strings are accepted only as short lowercase tokens before they become part of a class id.
- Workstation parts are matched first: RTX 6000 Ada never collapses into the older RTX 6000.
Form factor
Laptop parts are detected from their names (Laptop GPU, Max-Q, an M or S suffix). The “This computer is a laptop” checkbox fills the gap for integrated GPUs and Apple silicon. It cannot relabel a name that proves a desktop part (RTX desktop cards, RX 5000 and later, Arc desktop cards), which keeps desktops out of Laptop Week.
Published specs
Peak bandwidth is the vendor-published figure for the reference configuration. Board partners and laptop makers may ship other memory clocks; those classes are marked variable, are judged against their highest published configuration, and stay off the efficiency board. HBM never names who manufactured the memory.
| Class | Vendor | Memory | Bus | Peak GB/s | Min GB | Config |
|---|---|---|---|---|---|---|
| RTX 5090 | NVIDIA | GDDR7 | 512-bit | 1,792 | 32 | fixed |
| RTX 5080 | NVIDIA | GDDR7 | 256-bit | 960 | 16 | fixed |
| RTX 5070 Ti | NVIDIA | GDDR7 | 256-bit | 896 | 16 | fixed |
| RTX 5070 | NVIDIA | GDDR7 | 192-bit | 672 | 12 | fixed |
| RTX 5060 Ti | NVIDIA | GDDR7 | 128-bit | 448 | 8 | fixed |
| RTX 5060 | NVIDIA | GDDR7 | 128-bit | 448 | 8 | fixed |
| RTX 5050 | NVIDIA | GDDR6 | 128-bit | 320 | 8 | fixed |
| RTX 4090 | NVIDIA | GDDR6X | 384-bit | 1,008 | 24 | fixed |
| RTX 4080 SUPER | NVIDIA | GDDR6X | 256-bit | 736 | 16 | fixed |
| RTX 4080 | NVIDIA | GDDR6X | 256-bit | 716.8 | 16 | fixed |
| RTX 4070 Ti SUPER | NVIDIA | GDDR6X | 256-bit | 672 | 16 | fixed |
| RTX 4070 Ti | NVIDIA | GDDR6X | 192-bit | 504 | 12 | fixed |
| RTX 4070 SUPER | NVIDIA | GDDR6X | 192-bit | 504 | 12 | fixed |
| RTX 4070 | NVIDIA | GDDR6X | 192-bit | 504 | 12 | variable |
| RTX 4060 Ti | NVIDIA | GDDR6 | 128-bit | 288 | 8 | fixed |
| RTX 4060 | NVIDIA | GDDR6 | 128-bit | 272 | 8 | fixed |
| RTX 3090 Ti | NVIDIA | GDDR6X | 384-bit | 1,008 | 24 | fixed |
| RTX 3090 | NVIDIA | GDDR6X | 384-bit | 936 | 24 | fixed |
| RTX 3080 Ti | NVIDIA | GDDR6X | 384-bit | 912 | 12 | fixed |
| RTX 3080 | NVIDIA | GDDR6X | 320-bit | 760 to 912 | 10 | variable |
| RTX 3070 Ti | NVIDIA | GDDR6X | 256-bit | 608 | 8 | fixed |
| RTX 3070 | NVIDIA | GDDR6 | 256-bit | 448 | 8 | fixed |
| RTX 3060 Ti | NVIDIA | GDDR6 | 256-bit | 448 to 608 | 8 | variable |
| RTX 3060 | NVIDIA | GDDR6 | 192-bit | 360 | 8 | variable |
| RTX 3050 | NVIDIA | GDDR6 | 128-bit | 224 | 6 | variable |
| RTX 2080 Ti | NVIDIA | GDDR6 | 352-bit | 616 | 11 | fixed |
| RTX 2080 SUPER | NVIDIA | GDDR6 | 256-bit | 496 | 8 | fixed |
| RTX 2080 | NVIDIA | GDDR6 | 256-bit | 448 | 8 | fixed |
| RTX 2070 SUPER | NVIDIA | GDDR6 | 256-bit | 448 | 8 | fixed |
| RTX 2070 | NVIDIA | GDDR6 | 256-bit | 448 | 8 | fixed |
| RTX 2060 SUPER | NVIDIA | GDDR6 | 256-bit | 448 | 8 | fixed |
| RTX 2060 | NVIDIA | GDDR6 | 192-bit | 336 | 6 | fixed |
| TITAN RTX | NVIDIA | GDDR6 | 384-bit | 672 | 24 | fixed |
| GTX 1660 Ti | NVIDIA | GDDR6 | 192-bit | 288 | 6 | fixed |
| GTX 1660 SUPER | NVIDIA | GDDR6 | 192-bit | 336 | 6 | fixed |
| GTX 1660 | NVIDIA | GDDR5 | 192-bit | 192 | 6 | fixed |
| GTX 1650 SUPER | NVIDIA | GDDR6 | 128-bit | 192 | 4 | fixed |
| GTX 1650 | NVIDIA | GDDR5 | 128-bit | 128 to 192 | 4 | variable |
| GTX 1080 Ti | NVIDIA | GDDR5X | 352-bit | 484 | 11 | fixed |
| GTX 1080 | NVIDIA | GDDR5X | 256-bit | 320 to 352 | 8 | variable |
| GTX 1070 Ti | NVIDIA | GDDR5 | 256-bit | 256 | 8 | fixed |
| GTX 1070 | NVIDIA | GDDR5 | 256-bit | 256 | 8 | fixed |
| GTX 1060 | NVIDIA | GDDR5 | 192-bit | 192 to 216 | 3 | variable |
| GTX 1050 Ti | NVIDIA | GDDR5 | 128-bit | 112 | 4 | fixed |
| TITAN Xp | NVIDIA | GDDR5X | 384-bit | 547.7 | 12 | fixed |
| TITAN V | NVIDIA | HBM2 | 3072-bit | 652.8 | 12 | fixed |
| RTX 5090 Laptop | NVIDIA | GDDR7 | 256-bit | 896 | 24 | variable |
| RTX 5080 Laptop | NVIDIA | GDDR7 | 256-bit | 896 | 16 | variable |
| RTX 5070 Ti Laptop | NVIDIA | GDDR7 | 192-bit | 672 | 12 | variable |
| RTX 5070 Laptop | NVIDIA | GDDR7 | 128-bit | 384 to 448 | 8 | variable |
| RTX 5060 Laptop | NVIDIA | GDDR7 | 128-bit | 384 to 448 | 8 | variable |
| RTX 4090 Laptop | NVIDIA | GDDR6 | 256-bit | 576 | 16 | variable |
| RTX 4080 Laptop | NVIDIA | GDDR6 | 192-bit | 432 | 12 | variable |
| RTX 4070 Laptop | NVIDIA | GDDR6 | 128-bit | 256 | 8 | variable |
| RTX 4060 Laptop | NVIDIA | GDDR6 | 128-bit | 256 | 8 | variable |
| RTX 4050 Laptop | NVIDIA | GDDR6 | 96-bit | 192 | 6 | variable |
| RTX 3080 Ti Laptop | NVIDIA | GDDR6 | 256-bit | 512 | 16 | variable |
| RTX 3080 Laptop | NVIDIA | GDDR6 | 256-bit | 448 | 8 | variable |
| RTX 3070 Ti Laptop | NVIDIA | GDDR6 | 256-bit | 448 | 8 | variable |
| RTX 3070 Laptop | NVIDIA | GDDR6 | 256-bit | 448 | 8 | variable |
| RTX 3060 Laptop | NVIDIA | GDDR6 | 192-bit | 336 | 6 | variable |
| RTX 3050 Ti Laptop | NVIDIA | GDDR6 | 128-bit | 192 | 4 | variable |
| RTX 3050 Laptop | NVIDIA | GDDR6 | 128-bit | 192 | 4 | variable |
| RX 9070 XT | AMD | GDDR6 | 256-bit | 640 | 16 | fixed |
| RX 9070 | AMD | GDDR6 | 256-bit | 640 | 16 | fixed |
| RX 9060 XT | AMD | GDDR6 | 128-bit | 320 | 8 | fixed |
| RX 7900 XTX | AMD | GDDR6 | 384-bit | 960 | 24 | fixed |
| RX 7900 XT | AMD | GDDR6 | 320-bit | 800 | 20 | fixed |
| RX 7900 GRE | AMD | GDDR6 | 256-bit | 576 | 16 | fixed |
| RX 7800 XT | AMD | GDDR6 | 256-bit | 624 | 16 | fixed |
| RX 7700 XT | AMD | GDDR6 | 192-bit | 432 | 12 | fixed |
| RX 7600 XT | AMD | GDDR6 | 128-bit | 288 | 16 | fixed |
| RX 7600 | AMD | GDDR6 | 128-bit | 288 | 8 | fixed |
| RX 6950 XT | AMD | GDDR6 | 256-bit | 576 | 16 | fixed |
| RX 6900 XT | AMD | GDDR6 | 256-bit | 512 | 16 | fixed |
| RX 6800 XT | AMD | GDDR6 | 256-bit | 512 | 16 | fixed |
| RX 6800 | AMD | GDDR6 | 256-bit | 512 | 16 | fixed |
| RX 6750 XT | AMD | GDDR6 | 192-bit | 432 | 12 | fixed |
| RX 6700 XT | AMD | GDDR6 | 192-bit | 384 | 12 | fixed |
| RX 6700 | AMD | GDDR6 | 160-bit | 320 | 10 | fixed |
| RX 6650 XT | AMD | GDDR6 | 128-bit | 280 | 8 | fixed |
| RX 6600 XT | AMD | GDDR6 | 128-bit | 256 | 8 | fixed |
| RX 6600 | AMD | GDDR6 | 128-bit | 224 | 8 | fixed |
| RX 6500 XT | AMD | GDDR6 | 64-bit | 144 | 4 | fixed |
| RX 5700 XT | AMD | GDDR6 | 256-bit | 448 | 8 | fixed |
| RX 5700 | AMD | GDDR6 | 256-bit | 448 | 8 | fixed |
| RX 5600 XT | AMD | GDDR6 | 192-bit | 336 | 6 | variable |
| RX 580 | AMD | GDDR5 | 256-bit | 256 | 4 | variable |
| RX 570 | AMD | GDDR5 | 256-bit | 224 | 4 | fixed |
| Radeon VII | AMD | HBM2 | 4096-bit | 1,024 | 16 | fixed |
| RX Vega 64 | AMD | HBM2 | 2048-bit | 483.8 | 8 | fixed |
| RX Vega 56 | AMD | HBM2 | 2048-bit | 409.6 | 8 | fixed |
| Radeon 8060S | AMD | LPDDR5X | 256-bit | 256 | 32 | fixed |
| Radeon 8050S | AMD | LPDDR5X | 256-bit | 256 | 32 | fixed |
| Radeon 890M | AMD | LPDDR5X / DDR5 | 128-bit | 120 | 16 | variable |
| Radeon 880M | AMD | LPDDR5X / DDR5 | 128-bit | 120 | 16 | variable |
| Radeon 780M | AMD | LPDDR5X / DDR5 | 128-bit | 120 | 8 | variable |
| Radeon 760M | AMD | LPDDR5X / DDR5 | 128-bit | 120 | 8 | variable |
| Radeon 680M | AMD | LPDDR5 / DDR5 | 128-bit | 102.4 | 8 | variable |
| Radeon 660M | AMD | LPDDR5 / DDR5 | 128-bit | 102.4 | 8 | variable |
| Arc B580 | Intel | GDDR6 | 192-bit | 456 | 12 | fixed |
| Arc B570 | Intel | GDDR6 | 160-bit | 380 | 10 | fixed |
| Arc A770 | Intel | GDDR6 | 256-bit | 560 | 8 | variable |
| Arc A750 | Intel | GDDR6 | 256-bit | 512 | 8 | fixed |
| Arc A580 | Intel | GDDR6 | 256-bit | 512 | 8 | fixed |
| Arc A380 | Intel | GDDR6 | 96-bit | 186 | 6 | fixed |
| Arc A310 | Intel | GDDR6 | 64-bit | 124 | 4 | fixed |
| Arc 140V | Intel | LPDDR5X | 128-bit | 136.5 | 16 | fixed |
| Arc 130V | Intel | LPDDR5X | 128-bit | 136.5 | 16 | fixed |
| Arc 140T | Intel | LPDDR5X / DDR5 | 128-bit | 120 to 136.5 | 16 | variable |
| Arc Graphics | Intel | LPDDR5X / DDR5 | 128-bit | 120 to 136.5 | 16 | variable |
| Iris Xe | Intel | LPDDR4X / LPDDR5 / DDR4 / DDR5 | 128-bit | 68.3 to 102.4 | 8 | variable |
| Iris Plus | Intel | LPDDR4X / DDR4 | 128-bit | 59.7 to 68.3 | 8 | variable |
| UHD Graphics | Intel | DDR4 / DDR5 | 128-bit | 51.2 to 102.4 | 8 | variable |
| Apple M1 | Apple | LPDDR4X | 128-bit | 68.25 | 8 | fixed |
| Apple M1 Pro | Apple | LPDDR5 | 256-bit | 200 | 16 | fixed |
| Apple M1 Max | Apple | LPDDR5 | 512-bit | 400 | 32 | fixed |
| Apple M1 Ultra | Apple | LPDDR5 | 1024-bit | 800 | 64 | fixed |
| Apple M2 | Apple | LPDDR5 | 128-bit | 100 | 8 | fixed |
| Apple M2 Pro | Apple | LPDDR5 | 256-bit | 200 | 16 | fixed |
| Apple M2 Max | Apple | LPDDR5 | 512-bit | 400 | 32 | fixed |
| Apple M2 Ultra | Apple | LPDDR5 | 1024-bit | 800 | 64 | fixed |
| Apple M3 | Apple | LPDDR5 | 128-bit | 100 | 8 | fixed |
| Apple M3 Pro | Apple | LPDDR5 | 192-bit | 150 | 18 | fixed |
| Apple M3 Max | Apple | LPDDR5 | 512-bit | 400 | 36 | variable |
| Apple M3 Ultra | Apple | LPDDR5 | 1024-bit | 819 | 96 | fixed |
| Apple M4 | Apple | LPDDR5X | 128-bit | 120 | 16 | fixed |
| Apple M4 Pro | Apple | LPDDR5X | 256-bit | 273 | 24 | fixed |
| Apple M4 Max | Apple | LPDDR5X | 512-bit | 546 | 36 | variable |
| Apple M5 | Apple | LPDDR5X | 128-bit | 153 | 16 | fixed |
| Adreno X1-85 | Qualcomm | LPDDR5X | 128-bit | 135 | 16 | fixed |
| Adreno X1-45 | Qualcomm | LPDDR5X | 128-bit | 135 | 16 | variable |
132 classes. The table is rendered from src/lib/device/specs.ts; adding a class there makes it rankable.