51
GPGPU Architektúra esettanulmány

GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

GPGPUArchitektúra esettanulmány

Page 2: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

GeForce 7800 (2006)

Page 3: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

GeForce 7800● Rengeteg erőforrást fordítottak arra, hogy a throughput-ot maximalizálják

○ Azaz a különböző típusú feldolgozóegységek (vertex és fragment árnyalók) mindig dolgozzanak

● Ez pedig sok bottleneck-et hozott magával● Ezért az NVIDIA (is) egységesítette az architektúrát

Page 4: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

GeForce 8800 (2008 - Tesla)

Page 5: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

GeForce 8800

processingelement

Page 6: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

GeForce 8800

shader core

Page 7: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

GeForce 8800● Processing element

○ egyetlen feldolgozó egység○ 128 van belőle

● Shader core○ 16 processing element egysége○ egy shader core kap meg egy feladatot (“<X> fragment shader futtatása”)

● Egyúttal megjelent a CUDA is

Page 8: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Fermi

Page 9: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

NVIDIA GF100 - Fermi (2009) ● Az NVIDIA 2009-ben debütáló architektúrája● Az előző generáció (GeForce 8) vezette be az egységesített architektúrát

○ azaz innentől kezdve az NVIDIA GPU-knál is egységesített stream processzorok voltak

○ előtte dedikált processzorok a különböző feladatokra (vertex és fragment programok futtatására)

● A Fermi már DirectX11 kompatibilis volt○ új kihívás például a tessellation shaderek támogatása (ez több, mint szteroid-kezelt geometry

shader: utóbbinak sosem volt célja a nagymértékű geometriai generálása)

● A Fermi-nél a hangsúly a grafikus alkalmazások gyorsításán volt

Page 10: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Fermi architektúra● Főbb építőelemei:

○ GPC (Graphics Processing Cluster): grafikus feldolgozóegységek skálázható méretű tömbje

○ SM (Streaming Multiprocessor): valahány streamprocesszor (“GPU mag”, most: CUDA mag) csoportja.

○ CUDA mag: konkrét végrehajtó egység. Minden SM-ben 32 van. Egységesített

feldolgozóegység - ugyanúgy képes vertex, geometry, fragment és compute kernelek (‘shaderek’) futtatására

● Konkrétan a GF100-nál (a GeForce 480-ban)○ 4 darab GPC○ mindegyikben 4 SM (azaz összesen 16 SM)○ 6 memóriavezérlő

● A CPU-hoz PCIe-n keresztül csatlakozott

Page 11: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

CUDA mag● FP: IEEE 754-2008, FMA● INT: bool, shift, move, ...

Page 12: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

FMA

Page 13: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

SM

Page 14: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

SM● 32 CUDA mag egysége● 4 special function unit:

○ transzcendens függvények kiértékelésére, ○ grafikus szerelőszalag interpolációs lépéseit is ők végzik,○ egy órajel alatt egy szál egy utasítását hajtják végre => egy warp feldolgozása 8 órajel

● Két warpot tud egyszerre párhuzamosan feldolgozni (2x32 szál)● A dual warp scheduler kiválaszt kettő warp-ot és mindkettőből 1 utasítást

elküld (ha lehet - Fermin-n double-t pl. nem lehetett)○ 16 magnak, vagy○ 16 L/S egységnek, vagy○ 4 SFU-nak

Page 15: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

SM● Két végrehajtási blokkra (execution block) van osztva, 16-16 maggal● Minden órajelben

○ 32 utasítást adunk ki a végrehajtási blokkoknak (1 vagy 2 warpból)

● 2 órajel kell egy warp 32 utasításának lefuttatásához (L/S-nél is)● 8 órajel alatt értékelődik ki 32 SFU utasítás

Page 16: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

SM ütemezés

Page 17: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

SM● Minden SM-ben 4 textúrázó egység (TU) van

○ egy TU órajelenként 4 textúra mintát tud fetch-cselni○ ezeket szűrve is át tudja adni

● Cache a textúrázónak● Minden SM-hez L1 cache● Igazából: minden SM-hez tartozik 64KB mem● Ez kétféleképpen is beállítható:

○ 16KB L1 + 48KB shared○ 48KB L1 + 16KB shared

● Renderingnél 16KB L1-es konfig megy

Page 18: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

L2 cache● 768KB, ami közös az összes SM-mel● Írható, olvasható, koherens memória

Page 19: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített
Page 20: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Fermi működés● Host interface: a CPU parancsokat olvassa● GigaThread:

○ a kért adatokat betölti a rendszermemóriából a framebufferhez○ a futtatandó szállakat blokkokra osztja és hozzárendeli SM-ekhez○ ezeket a szálakat aztán az SM-ek belső ütemezői osztják el

● SM:○ a hozzá rendelt szállakat 32-es csoportokban (warp-okban) futtatja a CUDA magjain

Page 21: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

PolyMorph Engine● Lényegében a grafikus szerelőszalag primitív feldolgozásának lépéseit vezérli● 5 lépéses pipeline● Az eredményül előálló primitíveket a raszterizáló engine-nek adja át

Page 22: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Raster Engine● 4 Raster Engine működik párhuzamosan (GPC-nként 1 darab)● 3 lépéses pipeline● Az Edge Setup a háromszögek oldalainak egyenleteit határozza meg (és

ezek végzik a backface culling-ot is)● Órajelenként 8 pixelt ad ki minden Raster Engine● A Z-cull nem pixel szinten, hanem tile alapon működik. Ha a tile minden pixele

elbukja a Z-tesztet, akkor eldobja az egész tile-t.

Page 23: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Kepler

Page 24: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Kepler (2012)● A Fermi utódja (GeForce 680)● Teljesítménynövelés (főleg dupla pontosságnál)● A fogyasztás is szempont már (új varázsszó: “performance per watt”)

Page 25: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Kepler felépítés● 4 GPC● 8 új SMX (újgenerációs SM)● 4 memóriavezérlő

Page 26: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

SMX● 192 egyszeres pontosságú CUDA mag, FMA-val● 32 SFU● A magok GPU órajelen futnak● Az SMX most már egyidőben 4 warp-ot tud ütemezni és végrehajtani● Maga az ütemező is változott● Egy szál most már akár 255 regisztert is elér

Page 27: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Memória● A Fermihez hasonlóan konfigurálható 64KB-s memória per SMX● +48KB-s read-only cache● 1536KB L2 cache (amit minden SMX lát)

Page 28: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített
Page 29: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített
Page 30: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített
Page 31: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Maxwell

Page 32: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Maxwell (2014)● Még jobb teljesítmény/fogyasztás arány volt a cél (performance per watt)● Két generáció (GeForce 750, 8xx, illetve GeForce 9xx)● Felépítés:

○ 4 darab GPC○ 16 darab Maxwell SM (SMM) - 4 darab GPC-nként○ 4 memóriavezérlő

● Érdekes változtatások:○ memória sín: 192 bitről 128-ra○ SMM-ben CUDA magok száma: 192-ről 128-ra○ további egyszerűsítések

Page 33: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

SMM● 128 CUDA mag

○ 32-es egységekben○ Minden 32-es egység dedikált ütemező erőforrással és utasításpufferrel rendelkezik

● 1 PolyMorph Engine● 8 textúrázó egység● Felépítés:

○ egyszerűsítések, hogy kevesebb vezérlés kelljen

● Memória kiosztás revamp:○ L1 cache megosztva a textúra cache-sel○ 96KB dedikált osztott memória○ Az L2 cache 2048 KB

Page 34: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

SMM● 4 darab warp scheduler:● Minden warp scheduler

○ két utasítást tud egyszerre futtatni órajelenként

○ adott 32 CUDA maggal dolgozik (korábban: közös kezelésben voltak a magok, kellett plusz hozzárendelés a warp schedulerek és a magok között)

○ 8 L/S egység○ 8 SFU egység

Page 35: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített
Page 36: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Pascal

Page 37: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Pascal (2016)● Számítási teljesítmény növelése (deep learning)

○ 5.3 TFLOPS FP64-re (~double), 10.6 TFLOPS FP32-re (~float), 21.2 TFLOPS FP16-ra (~half)

● NVLink nagysebességű és sávszélességű összeköttetésekhez● Módosított memória-architektúra

Page 38: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Pascal● Az NVLink-et GPU-GPU adatátivelhez használják: 160 GByte/sec-es

kétirányú sávszélességet ad

Page 39: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

High Bandwidth Memory (HBM)● A munkaállomásokba szánt Tesla P100-ban● A HBM stack-elt memóriaelrendezés● Lényegében több rétegnyi memórialapkát helyeznek egymásra, esetleg a

legalsó szinten egy memóriavezérlővel irányítva egy-egy ilyen tornyot● A HBM2-ben akár 8 réteg is lehet● Akár ECC memória (!)● Még az AMD kezdte el fejleszteni a HBM1-et 2008-ban

Page 40: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

GDDR5X Memory● A GeForce GTX 1080-ban●

Page 41: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Memóriatömörítés● A GPU-n az adatokat veszteségmentes tömörített formában tárolja a hw● A textúráknál egy fontos séma a delta color compression (DCC):

○ A DCC-ben a pixeleket blokkokban kezelik○ Minden blokkhoz tartozik egy referenciaszín○ A blokkbéli pixelek színét pedig az ettől a referenciaszíntől vett eltéréssel kódolják

● Pascal-ban új módok is vannak ehhez

Page 42: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Load balancing● Bizonyos feladatok nem tudják lefoglalni a teljes GPU-t● Ekkor akár kettő vagy több ilyen munka is futhatna a GPU-n (például a fizikai

számítások a rendering-gel)● A Maxwell előre felosztotta a fizikai hardvert egy részhalmazra ami grafikát,

egy másikat pedig amit általános számításokat futtatott● A Pascal-ban behozták ennek a dinamikus változatát

Page 43: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Simultaneous Multi-Projection Engine

Page 44: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Simultaneous Multi-Projection Engine

Page 45: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Pascal● Egyetlen, közös virtuális memóriatér a CPU-nak és a GPU-nak (legalábbis

512 TB-ig)● Compute preemption most már gépi műveletek szintjén működnek, nem

Kepler/Maxwell szintű threadblock-okban

Page 46: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Pascal● Egy teljes Pascal-ban

○ 6 GPC○ 60 Pascal SM○ 30 TPC (mindegyik Texture Processing clusterben kettő SM)○ 8 darab 512 bites memóriavezérlő

● 1 GPC-ben:○ 10 SM

● 1 SM-ben:○ 64 CUDA mag○ 4 textúrázó egység

● Azaz összesen 3840 egyszeres pontosságú CUDA mag és 240 textúrázóegység

Page 47: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített
Page 48: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített
Page 49: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített
Page 50: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített
Page 51: GPGPUcg.elte.hu/~gpgpu/opengl/GPGPU - NVIDIA.pdf · NVIDIA GF100 - Fermi (2009) Az NVIDIA 2009-ben debütáló architektúrája Az előző generáció (GeForce 8) vezette be az egységesített

Források● Fermi whitepaper:

○ http://www.nvidia.com/content/pdf/fermi_white_papers/p.glaskowsky_nvidia's_fermi-the_first_complete_gpu_architecture.pdf

○ http://www.nvidia.com/content/pdf/fermi_white_papers/nvidia_fermi_compute_architecture_whitepaper.pdf ● Kepler whitepaper: https://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.pdf ● Maxwell whitepaper:

○ http://international.download.nvidia.com/geforce-com/international/pdfs/GeForce-GTX-750-Ti-Whitepaper.pdf ○ http://international.download.nvidia.com/geforce-com/international/pdfs/GeForce_GTX_980_Whitepaper_FIN

AL.PDF ● Pascal whitepaper:

○ http://international.download.nvidia.com/geforce-com/international/pdfs/GeForce_GTX_1080_Whitepaper_FINAL.pdf

○ https://images.nvidia.com/content/pdf/tesla/whitepaper/pascal-architecture-whitepaper.pdf