.. _gpu:

=========
GPU chips
=========

.. contents::


Introduction
============

Each nvidia GPU has several identifying numbers that can be used to determine
supported features, the engines it contains, and the register set. The most
important of these numbers is an 8-bit number known as the "GPU id".
If two cards have the same GPU id, their GPUs support identical features,
engines, and registers, with very minor exceptions. Such cards can however
still differ in the external devices they contain: output connectors,
encoders, capture chips, temperature sensors, fan controllers, installed
memory, supported clocks, etc. You can get the GPU id of a card by reading
from its :ref:`PMC area <pmc-id>`.

The GPU id is usually written as NVxx, where xx is the id written as
uppercase hexadecimal number. Note that, while cards before NV10 used another
format for their ID register and don't have the GPU id stored directly,
they are usually considered as NV1-NV5 anyway.

Nvidia uses "GPU code names" in their materials. They started out
identical to the GPU id, but diverged midway through the NV40 series
and started using a different numbering. However, for the most part nvidia
code names correspond 1 to 1 with the GPU ids.

The GPU id has a mostly one-to-many relationship with pci device ids. Note that
the last few bits [0-6 depending on GPU] of PCI device id are
changeable through straps [see :ref:`pstraps`]. When pci ids of a GPU are
listed in this file, the following shorthands are used:

1234
    PCI device id 0x1234
1234*
    PCI device ids 0x1234-0x1237, choosable by straps
123X
    PCI device ids 0x1230-0x123X, choosable by straps
124X+
    PCI device ids 0x1240-0x125X, choosable by straps
124X*
    PCI device ids 0x1240-0x127X, choosable by straps


The GPU families
================

The GPUs can roughly be grouped into a dozen or so families: NV1, NV3/RIVA,
NV4/TNT, Celsius, Kelvin, Rankine, Curie, Tesla, Fermi, Kepler, Maxwell, Pascal,
Volta and Turing.

This aligns with big revisions of PGRAPH, the drawing engine of the card. While
most functionality was introduced in sync with PGRAPH revisions, some other
functionality [notably video decoding hardware] gets added in GPUs late in a GPU
family and sometimes doesn't even get to the first GPU in the next GPU family.
For example, NV11 expanded upon the previous NV15 chipset by adding dual-head
support, while NV20 added new PGRAPH revision with shaders, but didn't have
dual-head - the first GPU to feature both was NV25.

Also note that a bigger GPU id doesn't always mean a newer card / card
with more features: there were quite a few places where the numbering actually
went backwards. For example, NV11 came out later than NV15 and added several
features.

Nvidia's card release cycle always has the most powerful high-end GPU
first, subsequently filling in the lower-end positions with new cut-down
GPUs. This means that newer cards in a single sub-family get progressively
smaller, but also more featureful - the first GPUs to introduce minor
changes like DX10.1 support or new video decoding are usually the low-end
ones.

Whenever a range of GPUs is mentioned in the documentation, it's written as
"NVxx:NVyy". This is left-inclusive, right-noninclusive range of GPU ids
as sorted in the following list. For example, G200:GT218 means GPUs G200,
MCP77, MCP79, GT215, GT216. NV20:NV30 effectively means all NV20 family GPUs.

The full known GPU list, sorted roughly according to introduced features,
is:

- NV1 family: NV1
- NV3 (aka RIVA) family: NV3, NV3T
- NV4 (aka TNT)  family: NV4, NV5
- Celsius family: NV10, NV15, NV1A, NV11, NV17, NV1F, NV18
- Kelvin family: NV20, NV2A, NV25, NV28
- Rankine family: NV30, NV35, NV31, NV36, NV34
- Curie family:

  - NV40 subfamily: NV40, NV45, NV41, NV42, NV43, NV44, NV44A
  - G70 subfamily: G70, G71, G73, G72
  - the IGPs: C51, MCP61, MCP67, MCP68, MCP73
  - the special snowflake: RSX

- Tesla family:

  - G80 subfamily: G80
  - G84 subfamily: G84, G86, G92, G94, G96, G98
  - G200 subfamily: G200, MCP77, MCP79
  - GT215 subfamily: GT215, GT216, GT218, MCP89

- Fermi family:

  - GF100 subfamily: GF100, GF104, GF106, GF114, GF116, GF108, GF110
  - GF119 subfamily: GF119, GF117

- Kepler family: GK104, GK107, GK106, GK110, GK110B, GK208, GK208B, GK20A, GK210
- Maxwell family: GM107, GM108, GM204, GM200, GM206, GM20B
- Pascal family: GP100, GP102, GP104, GP106, GP107, GP108
- Volta family: GV100
- Turing family: TU102, TU104, TU106, TU116, TU117


NV1 family: NV1
---------------

.. gpu-gen:: NV1


NV3 (RIVA) family: NV3, NV3T
----------------------------

.. gpu-gen:: NV3


NV4 (TNT) family: NV4, NV5
--------------------------

.. gpu-gen:: NV4


Celsius family: NV10, NV15, NV1A, NV11, NV17, NV1F, NV18
--------------------------------------------------------

.. gpu-gen:: Celsius

===== ==== ========= ======= ========== ========
pciid GPU  pixel     texture date       notes
           pipelines units
           and ROPs
===== ==== ========= ======= ========== ========
0100* NV10 4         4       11.10.1999 the first GeForce card [GeForce 256]
0150* NV15 4         8       26.04.2000 the high-end card of GeForce 2 lineup [GeForce 2 Ti, ...]
01a0* NV1A 2         4       04.06.2001 the IGP of GeForce 2 lineup [nForce]
0110* NV11 2         4       28.06.2000 the low-end card of GeForce 2 lineup [GeForce 2 MX]
017X  NV17 2         4       06.02.2002 the low-end card of GeForce 4 lineup [GeForce 4 MX]
01fX  NV1F 2         4       01.10.2002 the IGP of GeForce 4 lineup [nForce 2]
018X  NV18 2         4       25.09.2002 like NV17, but with added AGP x8 support
===== ==== ========= ======= ========== ========

NV1A and NV1F are IGPs and lack VRAM, memory controller, mediaport, and ROM
interface. They use the internal interfaces of the northbridge to access
an area of system memory set aside as fake VRAM and BIOS image.


Kelvin family: NV20, NV2A, NV25, NV28
-------------------------------------

.. gpu-gen:: Kelvin


The GPUs are:

===== ==== ======= ========= ======= ========== ========
pciid GPU  vertex  pixel     texture date       notes
           shaders pipelines units
                   and ROPs
===== ==== ======= ========= ======= ========== ========
0200* NV20 1       4         8       27.02.2001 the only GPU of GeForce 3 lineup [GeForce 3 Ti, ...]
02a0* NV2A 2       4         8       15.11.2001 the XBOX IGP [XGPU]
025X  NV25 2       4         8       06.02.2002 the high-end GPU of GeForce 4 lineup [GeForce 4 Ti]
028X  NV28 2       4         8       20.01.2003 like NV25, but with added AGP x8 support
===== ==== ======= ========= ======= ========== ========

NV2A is a GPU designed exclusively for the original xbox, and can't be
found anywhere else. Like NV1A and NV1F, it's an IGP.

.. todo:: verify all sorts of stuff on NV2A


Rankine family: NV30, NV35, NV31, NV36, NV34
--------------------------------------------

.. gpu-gen:: Rankine

The GPUs are:

===== ==== ======= ========= ========== ========
pciid GPU  vertex  pixel     date       notes
           shaders pipelines
                   and ROPs
===== ==== ======= ========= ========== ========
030X  NV30 2       8         27.01.2003 high-end GPU [GeForce FX 5800]
033X  NV35 3       8         12.05.2003 very high-end GPU [GeForce FX 59X0]
031X  NV31 1       4         06.03.2003 low-end GPU [GeForce FX 5600]
034X  NV36 3       4         23.10.2003 middle-end GPU [GeForce FX 5700]
032X  NV34 1       4         06.03.2003 low-end GPU [GeForce FX 5200]
===== ==== ======= ========= ========== ========

The pci vendor id is 0x10de.


Curie family
------------

.. gpu-gen:: Curie

The GPUs are:

========= ========= ============== ======= ======= ==== ========== =====
pciid     GPU id    GPU names      vertex  pixel   ROPs date       notes
                                   shaders shaders
========= ========= ============== ======= ======= ==== ========== =====
004X 021X 0x40/0x45 NV40/NV45/NV48 6       16      16   14.04.2004 AGP
00cX      0x41/0x42 NV41/NV42      5       12      12   08.11.2004
014X      0x43      NV43           3       8       4    12.08.2004
016X      0x44      NV44           3       4       2    15.12.2004 TURBOCACHE
022X      0x4a      NV44A          3       4       2    04.04.2005 AGP
009X      0x47      G70            8       24      16   22.06.2005
01dX      0x46      G72            3       4       2    18.01.2006 TURBOCACHE
029X      0x49      G71            8       24      16   09.03.2006
039X      0x4b      G73            8       12      8    09.03.2006
024X      0x4e      C51            1       2       1    20.10.2005 IGP, TURBOCACHE
03dX      0x4c      MCP61          1       2       1    ??.06.2006 IGP, TURBOCACHE
053X      0x67      MCP67          1       2       2    01.02.2006 IGP, TURBOCACHE
053X      0x68      MCP68          1       2       2    ??.07.2007 IGP, TURBOCACHE
07eX      0x63      MCP73          1       2       2    ??.07.2007 IGP, TURBOCACHE
\-        0x4d      RSX            ?       ?       ?    11.11.2006 FlexIO bus interface, used in PS3
========= ========= ============== ======= ======= ==== ========== =====

.. todo:: all geometry information unverified

.. todo:: any information on the RSX?

It's not clear how NV40 is different from NV45, or NV41 from NV42,
or MCP67 from MCP68 - they even share pciid ranges.

The NV4x IGPs actually have a memory controller as opposed to earlier ones.
This controller still accesses only host memory, though.

As execution units can be disabled on NV40+ cards, these configs are just the
maximum configs - a card can have just a subset of them enabled.


Tesla family
------------

.. gpu-gen:: Tesla

The GPUs in this family are:

===== ===== ==== =========== ==== ======= ===== ========== ======
core  hda   id   name        TPCs MPs/TPC PARTs date       notes
pciid pciid
===== ===== ==== =========== ==== ======= ===== ========== ======
019X  \-    0x50 G80         8    2       6     08.11.2006
040X  \-    0x84 G84         2    2       2     17.04.2007
042X  \-    0x86 G86         1    2       2     17.04.2007
060X+ \-    0x92 G92         8    2       4     29.10.2007
062X+ \-    0x94 G94         4    2       4     29.07.2008
064X+ \-    0x96 G96         2    2       2     29.07.2008
06eX+ \-    0x98 G98         1    1       1     04.12.2007
05eX+ \-    0xa0 G200        10   3       8     16.06.2008
084X+ \-    0xaa MCP77/MCP78 1    1       1     ??.06.2008 IGP
086X+ \-    0xac MCP79/MCP7A 1    2       1     ??.06.2008 IGP
0caX+ 0be4  0xa3 GT215       4    3       2     15.06.2009
0a2X+ 0be2  0xa5 GT216       2    3       2     15.06.2009
0a6X+ 0be3  0xa8 GT218       1    2       1     15.06.2009
08aX+ \-    0xaf MCP89       2    3       2     01.04.2010 IGP
===== ===== ==== =========== ==== ======= ===== ========== ======

Like NV40, these are just the maximal numbers.

.. todo:: geometry information not verified for G94, MCP77


Fermi/Kepler/Maxwell/Pascal/Volta/Turing family
-----------------------------------------------

.. gpu-gen:: Fermi

.. gpu-gen:: Kepler

.. gpu-gen:: Maxwell

.. gpu-gen:: Pascal

.. gpu-gen:: Volta

.. gpu-gen:: Turing

GPUs in Fermi/Kepler/Maxwell/Pascal/Volta/Turing families:

===== ===== ===== ===== ====== ==== ==== ===== === ====== ====== ===== ==== ==== ===== ====== === === === ==========
core  hda   usb   id    name   GPCs TPCs PARTs MCs ZCULLs PCOPYs HEADs UNK7 PPCs SUBPs SPOONs CE0 CE1 CE2 date
pciid pciid pciid                   /GPC           /GPC                     /GPC /PART
===== ===== ===== ===== ====== ==== ==== ===== === ====== ====== ===== ==== ==== ===== ====== === === === ==========
06cX+ 0be5  \-    0xc0  GF100  4    4    6     [6] [4]    [2]    [2]   \-   \-   2     3      0   0   \-  26.03.2010
0e2X+ 0beb  \-    0xc4  GF104  2    4    4     [4] [4]    [2]    [2]   \-   \-   2     3      0?  0?  \-  12.07.2010
120X+ 0e0c  \-    0xce  GF114  2    4    4     [4] [4]    [2]    [2]   \-   \-   2     3      0?  0?  \-  25.01.2011
0dcX+ 0be9  \-    0xc3  GF106  1    4    3     [3] [4]    [2]    [2]   \-   \-   2     3      3   4   \-  03.09.2010
124X+ 0bee  \-    0xcf  GF116  1    4    3     [3] [4]    [2]    [2]   \-   \-   2     3      3   4   \-  15.03.2011
0deX+ 0bea  \-    0xc1  GF108  1    2    1     2   4      [2]    [2]   \-   \-   2     1      3   4   \-  03.09.2010
108X+ 0e09  \-    0xc8  GF110  4    4    6     [6] [4]    [2]    [2]   \-   \-   2     3      0   0   \-  07.12.2010
104X* 0e08  \-    0xd9  GF119  1    1    1     1   4      1      2     \-   \-   1     1      3   \-  \-  05.01.2011
1140  \-    \-    0xd7  GF117  1    2    1     1   4      1      \-[4] \-   1    2     1      3   \-  \-  ??.04.2012
118X* 0e0a  \-    0xe4  GK104  4    2    4     4   4      3      4     \-   1    4     3      ?   3   3   22.03.2012
0fcX* 0e1b  \-    0xe7  GK107  1    2    2     2   4      3      4     \-   1    4     3      3   ?   3   24.04.2012
11cX+ 0e0b  \-    0xe6  GK106  3    2    3     3   4      3      4     \-   1    4     3      3   ?   3   22.04.2012
100X+ 0e1a  \-    0xf0  GK110  5    3    6     6   4      3      4     \-   2    4     3      ?   ?   ?   21.02.2013
100X+ 0e1a  \-    0xf1  GK110B 5    3    6     6   4      3      4     \-   2    4     3      ?   3   3   07.11.2013
\???? \???? \-    \???? GK210  ?    ?    ?     ?   ?      ?      ?     \-   ?    ?     ?      ?   ?   ?   ?
128X+ 0e0f  \-    0x108 GK208  1    2    1     1   4      3      4     \-   1    2     2      3   ?   3   19.02.2013
128X+ 0e0f  \-    0x106 GK208B 1    2    1     1   4      3      4     \-   1?   2?    2?     3   ?   3   ???
\-    \-    \-    0xea  GK20A  1    1    1     1   4      3      \-[4] \-   1    1     1      \-? \-? 3   ?
138X+ 0fbc  \-    0x117 GM107  1    5    2     2   4      3      4     1    2    4     2      3   ?   3   18.02.2014
134X+ \???? \-    0x118 GM108  1    3    1     1   4      3      4     0    ?    ?     2      3   ?   3   ?
13cX+ 0fbb  \-    0x124 GM204  ?    ?    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   ?
17cX+ 0fb0  \-    0x120 GM200  ?    ?    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   ?
140X+ 0fba  \-    0x126 GM206  ?    ?    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   ?
\-    \-    \-    0x12b GM20B  ?    ?    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   ?
158X# \???? \-    0x130 GP100  ?    ?    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   ?
1b0X# 10ef  \-    0x132 GP102  ?    ?    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   ?
1b8X# 10f0  \-    0x134 GP104  4    5    4     4   4      4      4     2    ?    ?     ?      ?   ?   ?   ?
1c0X# 10f1  \-    0x136 GP106  ?    ?    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   ?
1c8X# 0fb9  \-    0x137 GP107  ?    ?    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   10.25.2016
1d0X# 0fb8  \-    0x138 GP108  ?    ?    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   ?
10e5* \-    \-    0x13b GP10B  ?    ?    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   14.03.2017
1d8X# 10f2  \-    0x140 GV100  6    7    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   12.07.2017
\-    \-    \-    0x15b GV11B  ?    ?    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   03.06.2018
1e0X# 10f7  1ad6  0x162 TU102  6    6    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   27.09.2018
1e8X# 10f8  1ad8  0x164 TU104  6    4    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   20.09.2018
1f0X# 10f9  1ada  0x166 TU106  3    6    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   17.10.2018
218X# 1aeb  \-    0x168 TU116  3    4    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   22.02.2019
1f8X# ????  \-    0x167 TU117  2    4    ?     ?   ?      ?      ?     ?    ?    ?     ?      ?   ?   ?   23.04.2019
===== ===== ===== ===== ====== ==== ==== ===== === ====== ====== ===== ==== ==== ===== ====== === === === ==========

.. todo:: it is said that one of the GPCs [0th one] has only one TPC on GK106

.. todo:: what the fuck is GK110B? and GK208B?

.. todo:: GK210

.. todo:: GK20A

.. todo:: GM20x, GP10x

.. todo:: another design counter available on GM107, another 4 on GP10x

.. todo:: TU117 one of the GPCs has only three TPCs (so 7 in total, not 8)


Comparison table
================

.. gpu-table::
