GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés...

363
Created by XMLmind XSL-FO Converter. GPGPU-k és programozásuk Dezső, Sima Sándor, Szénási

Transcript of GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés...

Page 1: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Created by XMLmind XSL-FO Converter.

GPGPU-k és programozásuk

Dezső, Sima Sándor, Szénási

Page 2: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Created by XMLmind XSL-FO Converter.

GPGPU-k és programozásuk írta Dezső, Sima és Sándor, Szénási Szerzői jog © 2013 Typotex

Kivonat

A processzor technika alkalmazásának fejlődése terén napjaink egyik jellemző tendenciája a GPGPU-k rohamos

térnyerése a számításigényes feladatok futtatásához mind a tudományos, mind a műszaki és újabban a pénzügyi-

üzleti szférában.

A tárgy célja kettős. Egyrészt megismerteti a hallgatókat a GPGPU-k működési elveivel, felépítésével,

jellemzőivel, valamint a fontosabb NVIDIA és AMD GPGPU implementációkkal, másrészt a tárgy gyakorlati

ismereteket nyújt az adatpárhuzamos programozás és kiemelten a GPGPU-k programozása, programok

optimalizálása területén a CUDA nyelv és programozási környezetének megismertetésén keresztül.

Lektorálta: Dr. Levendovszky János, Dr. Oláh András

Page 3: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

iii Created by XMLmind XSL-FO Converter.

Tartalom

I. GPGPU-k ........................................................................................................................................ 1 Cél .......................................................................................................................................... ix 1. Bevezetés a GPGPU-kba .................................................................................................... 10

1. Objektumok ábrázolása háromszögekkel ................................................................. 10 1.1. GPU-k shadereinek főbb típusai .................................................................. 11

2. Él- és csúcs shader modellek funkcióinak egybeolvadása ........................................ 12 3. Nvidia GPU-k és Intel P4 ill. Core2 CPU-k FP32/FP64 teljesítményének összehasonlítása

[7] ................................................................................................................................. 14 4. AMD GPU-k csúcs FP32 teljesítménye [8] ............................................................... 15 5. GPU-k FP32 feldolgozási teljesítményének fejlődése [9] ........................................ 16 6. Nvidia GPU-k és Intel P4, Core2 CPU-k sávszélességének fejlődése [7] ................ 16 7. CPU-k és GPU-k főbb jellemzőinek összevetése [12] .............................................. 17

2. A GPGPU modell virtuális gép elve .................................................................................. 19 1. GPGPU-k virtuális gép modellje .............................................................................. 19

1.1. GPGPU-k virtuális gép modellje .................................................................. 19 1.2. Pseudo assembly kód hordozhatóságának előnyei ....................................... 19 1.3. Az alkalmazásfejlesztés fázisai - 1 ............................................................... 19 1.4. Az alkalmazás végrehajtásának fázisai - 2 ................................................... 20 1.5. Alkalmazások leírása eltérő absztrakciós szinteken ..................................... 20

2. GPGPU-kon alapuló masszívan adatpárhuzamos számítási modell ......................... 21 2.1. GPGPU-k specifikációja különböző absztrakciós szinteken ........................ 21 2.2. GPGPU-k virtuális gép szintű specifikációja ............................................... 22 2.3. Az GPGPU alapú masszívan párhuzamos adatfeldolgozási modell ............. 22 2.4. A GPGPU alapú masszívan párhuzamos számítási modellek térnyerése .... 22 2.5. A tárgyalt számítási modell kiválasztása ...................................................... 23 2.6. A használt terminológia kiválasztása ........................................................... 23

2.6.1. A GPGPU alapú masszívan párhuzamos adatfeldolgozási modellre SIMT

(Single instruction Multiple Threads) számítási modell néven hivatkozunk. 23 2.6.2. A GPGPU alapú masszívan adatpárhuzamos számítási modellel kapcsolatos

kifejezések megválasztása ......................................................................... 23 3. A SIMT számítási modell ......................................................................................... 24

3.1. A SIMT számítási modell főbb komponensei .............................................. 24 3.2. A számítási feladat modellje ........................................................................ 24

3.2.1. A szál modell ................................................................................... 25 3.2.2. A kernel modell ............................................................................... 29

3.3. A platform modellje ..................................................................................... 30 3.3.1. A számítási erőforrások modellje .................................................... 31 3.3.2. A memória modell ........................................................................... 35

3.4. A végrehajtási modell .................................................................................. 39 3.4.1. A SIMT végrehajtás elve ................................................................. 39 3.4.2. A feladat szétosztása a PE-k felé ..................................................... 43 3.4.3. Az adatmegosztás elve ..................................................................... 47 3.4.4. Az adatfüggő végrehajtás elve ......................................................... 48 3.4.5. A szinkronizáció elve ...................................................................... 50

4. GPGPU-k pseudo ISA szintű leírása ........................................................................ 51 4.1. Pseudo ISA-k leírása .................................................................................... 52 4.2. Mintapélda: Az Nvidia PTX virtuális gép pseudo ISA szintű leírása .......... 52 4.3. Mintapélda: Az Nvidia PTX virtuális gép pseudo ISA szintű leírása .......... 53 4.4. Nvidia számítási képesség (számítási képesség) elve [31], [1] .................... 54 4.5. a) A funkcionális jellemzők, vagyis a számítási képességek összehasonlítása

egymást követő Nvidia pseudo ISA (PTX) verziókban [32] ............................... 55 4.6. b) Az eszközjellemzők fejlődésének összehasonlítása egymást követő Nvidia

pseudo ISA (PTX) számítási képességekben [32] .............................................. 56 4.7. c) Számítási képességhez kötött architektúra specifikációk az Nvidia PTX-ben [32]

.............................................................................................................................. 56

Page 4: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

iv Created by XMLmind XSL-FO Converter.

4.8. d) Natív aritmetikai utasítások végrehajtási sebessége az Nvidia PTX számítási

képességeinek egymást követő verzióiban (utasítás / óraciklus/SM) [7] ............ 56 4.9. Egymást követő CUDA SDK-kkal megjelent PTX ISA verziók, valamint az általuk

támogatott számítási képesség verziók (sm[xx]) (A táblázatban ez Supported Targets

néven szerepel) [20] ............................................................................................ 57 4.10. Nvidia GPGPU magjai és kártyái által támogatott számítási képesség verziók [32]

.............................................................................................................................. 58 4.11. A PTX kód előre hordozhatósága [31] ....................................................... 58 4.12. Egy megadott GPGPU számítási képesség verzióra fordított objektum fájlra

(CUBIN file) vonatkozó kompatibilitási szabályok [31] .................................... 58 3. GPGPU magok és kártyák áttekintése ................................................................................ 59

1. Általános áttekintés ................................................................................................... 59 1.1. GPGPU magok ............................................................................................. 59 1.2. Az Nvidia duál-GPU grafikus kártyáinak főbb jellemzői ............................ 62 1.3. Az AMD/ATI duál-GPU grafikus kártyáinak főbb jellemzői ...................... 62 1.4. Megjegyzés az AMD alapú grafikus kártyákhoz [36], [37] ......................... 62

2. Az Nvidia grafikus magok és kártyák főbb jellemzőinek áttekintése ....................... 63 2.1. Az Nvidia grafikus magok és kártyák főbb jellemzői .................................. 63

2.1.1. Egy SM felépítése a G80 architektúrában ....................................... 64 2.1.2. Az Nvidia GPGPU kártyáinak pozicionálása a termékspektrumukon belül

[41] ............................................................................................................ 67 2.2. Példák az Nvidia grafikus kártyáira ............................................................. 68

2.2.1. Nvidia GeForce GTX 480 (GF 100 alapú) [42] ............................... 68 2.2.2. Párba állított Nvidia GeForce GTX 480 kártyák [42] (GF100 alapú) 68 2.2.3. Nvidia GeForce GTX 480 és 580 kártyák [44] ................................ 69 2.2.4. Nvidia GTX 680 kártya [80] (GK104 alapú) ................................... 70 2.2.5. Nvidia GTX Titan kártya [81] (GK110 alapú) ................................ 70

3. Az AMD grafikus magok és kártyák főbb jellemzőinek áttekintése ........................ 71 3.1. Az AMD grafikus magok és kártyák főbb jellemzői .................................... 71 3.2. Példák AMD grafikus kártyákra .................................................................. 75

3.2.1. ATI HD 5970 (gyakorlatilag RV870 alapú) [46] ............................ 76 3.2.2. ATI HD 5970 (RV870 alapú) [47] .................................................. 76 3.2.3. AMD HD 6990 (Cayman alapú) [48] .............................................. 77 3.2.4. AMD Radeon HD 7970 (Tahiti XT, Southern Islands alapú) - Első GCN

megvalósítás [49] ....................................................................................... 77 3.2.5. GPGPU árak 2012 nyarán [50] ........................................................ 78

4. Az Nvidia Fermi családhoz tartozó magok és kártyák ....................................................... 80 1. A Fermi család áttekintése ........................................................................................ 80

1.1. A Fermi főbb alcsaládjai .............................................................................. 81 2. A Fermi PTX 2.0 legfontosabb újításai .................................................................... 81

2.1. A PTX 2.0 áttekintése .................................................................................. 81 2.2. A PTX 2.0 pseudo ISA főbb újításai ............................................................ 82

2.2.1. a) A változók és a pointerek számára biztosított egységesített címtér mely

azonos load/store utasításkészlettel érhető el - 1 [11] ................................ 82 2.2.2. a) A változók és a pointerek számára biztosított egységesített címtér mely

azonos load/store utasításkészlettel érhető el - 2 [11] ................................ 83 2.2.3. b) 64-bites címzési lehetőség ........................................................... 84 2.2.4. c) Új utasítások, amelyek támogatják az OpenCL és DirectCompute API-kat

..................................................................................................................... 84 2.2.5. d) A predikáció teljeskőrű támogatása [51] ..................................... 84 2.2.6. e) A 32- és 64-bites lebegőpontos feldolgozás teljeskörű IEEE 754-3008

támogatása ................................................................................................. 85 2.2.7. A Fermi GPGPU-kra történő programfejlesztések megkönnyítése [11]

85 3. A Fermi mikroarchitektúrájának főbb újításai és továbbfejlesztései ........................ 85

3.1. Főbb újítások ................................................................................................ 85 3.2. Főbb továbbfejlesztések ............................................................................... 85 3.3. Főbb architekturális újdonságok a Fermiben ............................................... 85

3.3.1. a) Párhuzamos kernel futtatás [52], [18] .......................................... 86 3.3.2. b) Valódi kétszintű cache hierarchia [11] ........................................ 86

Page 5: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

v Created by XMLmind XSL-FO Converter.

3.3.3. c) SM-enként konfigurálható osztott memória és L1 cache [11] ..... 87 3.3.4. d) ECC támogatás [11] .................................................................... 88

3.4. A Fermi főbb architektúrális továbbfejlesztései ........................................... 89 3.4.1. a) Jelentősen megnövelt FP64 teljesítmény ..................................... 89

3.5. Aritmetikai műveletek átviteli sebessége óraciklusonként és SM-enként [13] 89 3.5.1. b) Jelentősen csökkentett kontextus váltási idők [11] ...................... 89 3.5.2. c) 10-20-szorosára felgyorsított atomi memória műveletek [11] ..... 90

4. A Fermi GF100 mikroarchitektúrája ........................................................................ 90 4.1. A Fermi GF100 felépítése [18], [11] ............................................................ 90 4.2. A Fermi GT100 magasszintű mikroarchitektúrája ....................................... 90 4.3. Az Nvidia GPGPU-k magasszintű mikroarchitektúrájának fejlődése [52] .. 91 4.4. Cuda GF100 SM felépítése [19] ................................................................... 92 4.5. Az Nvidia GPGPU-iban található magok (SM) fejlődése - 1 ...................... 92 4.6. Az Nvidia GPGPU-iban található magok (SM) fejlődése - 2 ...................... 94 4.7. A Fermi GF100 GPGPU felépítése és működése ......................................... 95

4.7.1. A Cuda GF100 SM felépítése [19] .................................................. 95 4.7.2. Egy ALU („CUDA mag”) ............................................................... 96

4.8. SIMT végrehajtás elve soros kernel végrehajtás esetén ............................... 97 4.9. A Fermi GF100 GPGPU működési elve ...................................................... 97 4.10. Feladat ütemezés alfeladatai ....................................................................... 97 4.11. Kernelek ütemezése az SM-ekre [25], [18] ................................................ 98 4.12. Azonos kernelhez tartozó szálblokkok SM-hez rendelése ......................... 98 4.13. A CUDA szál blokkok fogalma és jellemzői [53] ...................................... 99 4.14. Szál blokkok warp-okká történő szegmentálása [59] ............................... 100 4.15. Warpok ütemezése végrehajtásra az SM-ekre .......................................... 101 4.16. A Fermi GF100 mikroarchitektúra blokk diagrammja és működésének leírása

101 4.17. Feltételezett működési elv - 1 ................................................................... 103 4.18. Feltételezett működési elv - 2 ................................................................... 104 4.19. Feltételezett működési elv - 3 ................................................................... 105 4.20. Példa: Aritmetikai műveletek kibocsájtási sebessége (művelet/órajel) SM-enként

[13] .................................................................................................................... 107 4.21. A Fermi GF100 SM warp ütemezési politikája - 1 .................................. 108 4.22. A Fermi GF100 SM warp ütemezési politikája - 2 .................................. 109 4.23. A Fermi GF100 maximális teljesítményének becslése - 1 ....................... 112 4.24. A Fermi GF100 maximális teljesítményének becslése - 2 ....................... 114

5. A Fermi GF104 mikroarchitektúrája ...................................................................... 116 5.1. SM-enként rendelkezésre álló feldolgozó egységek a GF104 és a GF100 esetében

117 5.2. A GF 104/114 aritmetikai műveletvégzési sebessége (művelet/óraciklus) SM-

enként [13] ......................................................................................................... 118 5.3. Warp kibocsájtás a Fermi GF104-ben ......................................................... 118 5.4. A Fermi GF104 alapú GTX 460-as kártya maximális számítási teljesítmény adatai

119 6. A Fermi GF110 mikroarchitektúrája ...................................................................... 120

6.1. A Fermi GF110 mikroarchitektúrája [64] ................................................... 120 6.2. A Fermi GF110 felépítése [65] .................................................................. 120 6.3. A Fermi négy alcsaládjának magjait (SM egységeit) ábrázoló blokkdiagramm [66]

121 6.4. A GF 100/110 aritmetikai műveletvégzési sebessége (művelet/óraciklus) SM-

enként [13] ........................................................................................................ 122 7. A Fermi GF114 mikroarchitektúrája ...................................................................... 123

7.1. A Fermi GF114 magjának felépítése a GTX 560-as kártyában [67] .......... 123 7.2. A Fermi GF114 mikroarchitektúrája .......................................................... 124 7.3. A Fermi négy alcsaládjának magjait (SM egységeit) ábrázoló blokkdiagramm [66]

125 7.4. A GF 104/114 aritmetikai műveletvégzési sebessége (művelet/óraciklus) SM-

enként [13] ........................................................................................................ 125 5. Az Nvidia Kepler családhoz tartozó magok és kártyák .................................................... 127

1. Az Nvidia Kepler családjának áttekintése .............................................................. 127

Page 6: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

vi Created by XMLmind XSL-FO Converter.

1.1. A Kepler alcsaládjai ................................................................................... 127 1.2. A GK104 Kepler mag [76] ......................................................................... 127 1.3. A GK110 Kepler mag [70] ......................................................................... 128 1.4. Az Nvidia Kepler GK104 és GK110 magjainak főbb tulajdonságai [70] .. 128

2. A Kepler PTX 3.x főbb újításai .............................................................................. 129 3. A Kepler mikroarchitektúrájának főbb újításai ....................................................... 129

3.1. a) Dinamikus párhuzamosság [70] ............................................................. 129 3.1.1. A Kepler GPU-kban használt dinamikus párhuzamosság elve ...... 130 3.1.2. Dinamikus párhuzamosság előnyei [70] ........................................ 130

3.2. b) A Hyper-Q ütemezési mechanizmus ...................................................... 130 3.2.1. A Hyper-Q ütemező mechanizmus lehetséges gyorsító hatása ...... 135

3.3. c) Grid Management Unit .......................................................................... 136 3.4. d) A GPU Direct ........................................................................................ 136 3.5. A Kepler mikroarchitektúrájának főbb továbbfejlesztései ......................... 137

3.5.1. a) A feldolgozó egységek működési frekvenciájának (shader frequency)

lecsökkentése a mag frekvenciájára - 1 ................................................... 138 3.5.2. a) A feldolgozó egységek működési frekvenciájának (shader frequency)

lecsökkentése a mag frekvenciájára - 2 ................................................... 138 3.5.3. a) A feldolgozó egységek működési frekvenciájának (shader frequency)

lecsökkentése a mag frekvenciájára - 3 ................................................... 139 3.5.4. a) A feldolgozó egységek működési frekvenciájának (shader frequency)

lecsökkentése a mag frekvenciájára - 4 ................................................... 139 3.5.5. A Fermi és Kepler feldolgozó egységei lapkaméretének és energia

fogyasztásának összehasonlítása [76] ...................................................... 139 3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az

ütemezőnek szolgáltatott kulcsszavak (compiler hints) segítségével ...... 141 3.5.7. c) SMX-enként négyszeres warp ütemező bevezetése .................. 141 3.5.8. Rendelkezésre álló számítási erőforrások a Kepler SMX és a Fermi SM

esetében ................................................................................................... 142 3.5.9. d) A szálanként elérhető regiszterek számának megnégyszerezése 143 3.5.10. A Kepler magokban bevezetett szálanként elérhető regiszterszám

négyszerezésének hatása .......................................................................... 143 3.5.11. e) Egy általános célra használható 48 KB-os, csak olvasható adat

gyorsítótár bevezetése .............................................................................. 143 3.5.12. f) Az L2 cache méret és sávszélesség megduplázása a Fermihez képest

144 4. Az Nvidia GK104 Kepler magja, és a hozzá tartozó kártyák ................................. 144

4.1. A Kepler alcsaládjai ................................................................................... 144 4.2. GK104 Kepler mag [76] ............................................................................. 145 4.3. Az Nvidia GK104 mag lapkájának képe [78] ............................................ 145 4.4. A Kepler GK104 mag SMX-ének blokkdiagrammja [76] ......................... 146 4.5. A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP32 és FP64

teljesítménye ..................................................................................................... 147 4.5.1. a) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP32

teljesítménye - 1 ...................................................................................... 147 4.5.2. a) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP32

teljesítménye - 2 [70] ............................................................................... 147 4.5.3. a) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP32

teljesítménye - 3 ...................................................................................... 148 4.5.4. b) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP64

teljesítménye - 1 ...................................................................................... 148 4.5.5. b) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP64

teljesítménye - 2 [70] ............................................................................... 149 4.5.6. b) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP64

teljesítménye - 3 ...................................................................................... 149 5. Az Nvidia GK110 Kepler magja, és a hozzá tartozó kártyák ................................. 149

5.1. A Kepler alcsaládjai ................................................................................... 149 5.2. A GK110 mag ............................................................................................ 150 5.3. A GK110 Kepler mag [70] ......................................................................... 150

5.3.1. Az Nvidia Kepler GK110 magjának fotója [70] ............................ 150

Page 7: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

vii Created by XMLmind XSL-FO Converter.

5.3.2. Az Nvidia Kepler GK110 magjának felépítése [79] ...................... 151 5.3.3. Az Nvidia GK110 és GK104 magjainak összehasonlítása [79] ..... 152 5.3.4. A Kepler GK110 SMX-ének blokkdiagrammja [70] ..................... 153 5.3.5. a) A GK110 alapú GeForce GTX Titan grafikus kártya maximális FP32

teljesítménye ............................................................................................ 154 5.3.6. b) A GK110 alapú GeForce GTX Titan grafikus kártya maximális FP64

teljesítménye ............................................................................................ 154 6. Az Nvidia mikroarchitektúráinak fejlődése ............................................................ 155

6.1. a) Az Nvidia Fermi előtti GPGPU-inak FP32 warp kibocsájtási hatékonysága 155 6.2. b) Az Nvidia Fermi és Kepler GPGPU-inak FP32 warp kibocsájtási hatékonysága

155 6.3. c) Az Nvidia Fermi előtti GPGPU-inak FP64 teljesítmény növekedése .... 156 6.4. d) Az Nvidia Tesla GPGPU-inak FP64 teljesítmény növekedése .............. 156

6. Az AMD heterogén rendszerarchitektúrája ...................................................................... 158 1. A HSA elve ............................................................................................................. 158

1.1. A HSA elv első nyivános bemutatása (6/2011) [84], [85] ......................... 158 1.2. A HSA (Heterogeneous Systems Architecture) céljai ................................ 158

1.2.1. AMD’s view of the evolution path to heterogeneous computing (6/2011)

[84] .......................................................................................................... 159 2. A HSA célkitűzései [85], [87] ................................................................................ 159

2.1. a) A CPU és a GPU számára közös címteret biztosító memória model [87] 160 2.2. b) Felhasználói szintű parancs várakozósor [87] ........................................ 160 2.3. c) A HAS IL virtuális ISA (HSA köztes réteg - HSA Intermediate Layer) [87]. [88]

............................................................................................................................ 160 2.4. d) Az alkalmazásfeldolgozás modellje [88] ............................................... 160 2.5. Az alkalmazásfeldolgozás elve a HSA-ban [87] ........................................ 161 2.6. A futtatási fázis [87] ................................................................................... 162 2.7. Heterogeneous Sytem Architecture Foundation (HSAF - Heterogén Rendszer

architektúra alapítvány) ..................................................................................... 164 2.8. Az AMD útiterve a HSA implementációjára [90] ...................................... 164 2.9. Az AMD útiterve a HSA implementációjára - részletezés [85] ................. 165

7. Az AMD Southern Islands családhoz tartozó magok és kártyák ..................................... 166 1. Az AMD Southern Islands családjának áttekintése ................................................ 166

1.1. Az AMD útiterve a HSA implementációjára (Financial Analyst Day 2012 február)

[90] .................................................................................................................... 166 1.2. Az AMD új GPU mikroarchitektúrája: a Graphics Core Next (GCN) Következő

Grafikus Mag) ................................................................................................... 166 1.3. A GCN mikroarchitektúra bejelentése és megvalósítása ........................... 167 1.4. Az AMD útiterve, mely a GCN mikroarchitektúra megjelenését jelzi a Southern

Islands grafikai családban (2012 február) [94] .................................................. 167 2. A Southern Islands mikroarchitektúra főbb újításai ............................................... 167

2.1. VLIW4 alapú GPU-k helyett SIMD alapú GPU bevezetése ...................... 167 2.1.1. Az ATI (melyet AMD 2006-ban felvásárolt) és az AMD GPU-k

mikroarchitektúra fejlődésének főbb állomásai [95] ............................... 168 2.1.2. VLIW alapú ALU-k használata GPU-kban ................................... 168 2.1.3. VLIW-alapú ALU-k ...................................................................... 169 2.1.4. Hullámfront sorozat átkódolása VLIW4 utasításokká [96] ........... 169 2.1.5. Hullámfrontok ütemezése VLIW4 kódolást feltételezve [96] ....... 170 2.1.6. Grafikus feldolgozás és VLIW alapú ALU-k ................................ 171 2.1.7. Az AMD motivációja a korábbi GPU-kban használt VLIW alapú ALU-k

használatára ............................................................................................. 171 2.1.8. Feldolgozó egységek (EU) száma Nvidia és AMD GPU-k esetében 172 2.1.9. Az AMD motivációja első GPU-iban VLIW5 alapú ALU-k használatára

[97] .......................................................................................................... 172 2.1.10. Az AMD VILW5 ALU-jának kialakítása ..................................... 172 2.1.11. A továbbfejlesztett VLIW5 ALU bevezetése .............................. 174 2.1.12. A VLIW4 bevezetése a továbbfejlesztett VLIW5 kialakítás helyett - 1

174 2.1.13. A VLIW4 bevezetése a továbbfejlesztett VLIW5 kialakítás helyett - 2

174

Page 8: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

viii Created by XMLmind XSL-FO Converter.

2.1.14. Az AMD továbbfejlesztett VLIW5 és VLIW4 megvalósításainak

összehasonlítása [17] ............................................................................... 175 2.1.15. A numerikus számítások fontosságának növekedése és ezzel

összefüggésben a GCN microarchitektúra bevezetése ............................ 177 2.1.16. A VLIW4 alapú ALU-k leváltása SIMD alapú GCN architektúrájú ALU-

kra [91] .................................................................................................... 177 2.2. Az AMD ZeroCore technológiája [49] ...................................................... 177

2.2.1. A ZeroCore technológia segítségével elérhető passzív állapotú energia

fogyasztás [104] ....................................................................................... 178 2.2.2. Az AMD PowerTune technológiája .............................................. 178 2.2.3. A Northern Islands családban bevezetett PowerTune technológia (HD

6900/Cayman), 2010 december) [106] .................................................... 179 2.2.4. A PowerTune technológia használatának előnye [105] ................. 179

3. Az AMD Southern Islands kártyacsaládja .............................................................. 180 3.1. A Southern Islands család áttekintése ........................................................ 180

3.1.1. Az AMD GCN bejelentése és megvalósítása ................................ 180 3.1.2. A Southern Islands család főbb jellemzői ...................................... 181 3.1.3. Southern Islands család alcsaládjai - 1 [107] ................................. 181 3.1.4. A Southern Islands család alcsaládjai - 2 [108] ............................. 182 3.1.5. Az AMD és Nvidia grafikus magjai lapkaméreteinek összehasonlítása [95]

................................................................................................................... 182 3.1.6. AMD GCN bejelentése és megvalósítása ...................................... 183

3.2. A Radeon HD7970 grafikus kártya Tahiti XT magjának mikroarchitektúrája 183 3.2.1. A Tahiti XT mag mikroarchitektúrájának áttekintése [95] ............ 183 3.2.2. A 7950 (Tahiti Pro) és a 7970 (Tahiti XT) magokat használó kártyák közötti

különbségek ............................................................................................. 184 3.2.3. A számítási egységek (CU - Compute Unit) architekturális áttekintése -

egyszerűsített blokkdiagramm [95] ......................................................... 185 3.2.4. Egy számítási egység (CU) részletes blokkdiagrammja [108] ...... 185 3.2.5. Egy számítási egység (CU) fő egységei ........................................ 185 3.2.6. A CU négy 16-széles SIMD egysége [110] (nagymértékben egyszerűsített

leírás) ....................................................................................................... 186 3.2.7. A CU skalár egysége [110] ............................................................ 186 3.2.8. A HD 7970 (Tahiti XT) grafikai kártya maximális FP32 és FP64

teljesítménye ............................................................................................ 186 3.2.9. A HD 7970 (Tahiti XT) cache hierarchiája [95] ............................ 187 3.2.10. CPU-nkénti és GPU-nkénti elérhető tárhelyek a HD 7970-ben (Tahiti XT)

[110] ........................................................................................................ 187 3.2.11. A HD 7970 (Tahiti XT) magban található memóriák méretei, valamint

azok olvasási sebessége [16] ................................................................... 188 3.3. Működési elvük (Ismétlés a 3.2-es fejezetből) ........................................... 189

3.3.1. Számítási feladatok ........................................................................ 189 3.3.2. Munkaelemek ................................................................................ 190 3.3.3. A kernel ......................................................................................... 191 3.3.4. Munkacsoportok ............................................................................ 191 3.3.5. Hullámfrontok - 1 .......................................................................... 192 3.3.6. Hullámfrontok - 2 .......................................................................... 192 3.3.7. Működési elv ................................................................................. 193 3.3.8. Számítási feladatok elindítása a GPU-n ......................................... 193 3.3.9. Számítási feladatok végrehajtása - 1 .............................................. 193 3.3.10. Számítási feladatok végrehajtása - 2 ............................................ 194 3.3.11. Számítási feladatok végrehajtása - 3 ............................................ 194

3.4. A HD 7970 (Tahiti XT) teljesítmény adatai és fogyasztása [110] ............. 194 3.4.1. a) A kártya teljesítménye játékokban ............................................. 195 3.4.2. a) Nagy teljesítményű grafikus kártyák teljesítménye játékokban - 1 [50]

195 3.4.3. a) Nagy teljesítményű grafikus kártyák teljesítménye játékokban - 2 [50]

195 3.4.4. b) Nagy teljesítményű grafikus kártyák teljesítménye számítási feladatokon

mérve [50] ............................................................................................... 196

Page 9: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

ix Created by XMLmind XSL-FO Converter.

3.4.5. c) Terhelés alatti energia fogyasztás (teljes terhelésen) [50] ......... 197 3.4.6. d) Üresjárati fogyasztás [50] .......................................................... 198

8. Az AMD Sea Islands családja .......................................................................................... 200 1. A Sea Islands család helye az AMD 2013-as útitervében [111] ............................. 200 2. A Sea Islands család fő jellemzői ........................................................................... 200 3. Az AMD 2. generációs GCN-jének, a Sea Islands családnak a tervezett bevezetése 201 4. A HD 8950/70 grafikus kártyák fő paraméterei ..................................................... 201

9. Kitekintés ......................................................................................................................... 202 1. Nvidia útiterve 2014-re és tovább ........................................................................... 202

1.1. A Maxwell CPU + GPU ............................................................................. 202 1.2. A Volta CPU + GPU .................................................................................. 203 1.3. Volta processzor rétegezett DRAM-mal [113] .......................................... 203

2. AMD grafikai útiterve 2013-ra ............................................................................... 203 3. Az AMD asztali gépekbe szánt grafikai kártyáinak 2013-as útiterve ...................... 204 4. Az Intel Xeon Phi családja ..................................................................................... 204

4.1. A Knights Ferry protípusa .......................................................................... 205 4.2. Az MIC elnevezés módosítása Xeon Phi-re, és a nyílt forráskódú szoftverek

támogatása ......................................................................................................... 205 4.3. A Knights Corner processzor ..................................................................... 206 4.4. A Xeon Phi család főbb jellemzői [120] .................................................... 206 4.5. A Xeon Phi társprocesszor család elsőként megjelenő tagjai és főbb jellemzőik

[121] .................................................................................................................. 207 4.6. A Knights Corner (KCN) DPA felépítése [120] ........................................ 208 4.7. A Knights Corner mikroarchitektúrája [120] ............................................. 208 4.8. A lapka dupla gyűrűs összeköttetéseinek kialakítása [122] ....................... 209 4.9. A Knights Corner magjának blokk diagrammja [120] ............................... 209 4.10. A vektor feldolgozó egység blokkvázlata és futószalag alapú működése [120]

210 4.11. A Xeon Phi társprocesszor rendszer-architektúrája [122] ........................ 210 4.12. The Xeon Phi 5110P társprocesszor [124] ............................................... 211 4.13. A Xeon Phi társprocesszor nyáklap (hátoldal) [122] ............................... 212 4.14. Az aktív hűtéssel ellátott Xeon Phi 3100 szerelési ábrája [122] .............. 212 4.15. Az Intel többmagos, sokmagos és cluster architektúráinak közös fejlesztési

platformja [125] ................................................................................................ 213 4.16. Az Intel Knight Corner és a versenytársai teljesítmény hatékonyságának

összehasonlítása [120] ....................................................................................... 213 4.17. A Xeon Phi 5110P, SE10P/X és a 2-processzoros Intel Xeon szerver maximális

teljesítményének összehasonlítása [126] ........................................................... 214 4.18. Xeon 5110P és egy 2-processzoros Sandy Bridge alapú Xeon szerver

teljesítményének [126] ...................................................................................... 214 4.19. A Xeon Phi 5110P sebességének összehasonlítása egy 2-processzoros Xeon

szerverrel ........................................................................................................... 215 4.20. Az Intel Xeon Phi családjának útiterve [127] .......................................... 215 4.21. Assessing the peak FP64 performance of the Knights Corner coprocessor with that

of Nvidia’s and AMD’s recent devices ............................................................. 216 4.22. a) Intel Knights Corner családjának FP64 teljesítménye [126] ................ 216 4.23. b) Az Nvidia Tesla GPGPU-inak FP64 teljesítménye .............................. 217 4.24. c) AMD csúcskategóriás GPU-inak FP64 teljesítménye .......................... 218

10. Hivatkozások .................................................................................................................. 219 II. GPGPU-k és programozásuk ..................................................................................................... 226

1. Bevezetés ......................................................................................................................... 231 1. Bevezetés (1) .......................................................................................................... 231

1.1. GPU-k számítási kapacitása ....................................................................... 231 2. Bevezetés (2) .......................................................................................................... 231

2.1. Valós alkalmazások .................................................................................... 231 2.2. Grafikus Feldolgozó Egységek .................................................................. 232

2.2.1. Shaderek ........................................................................................ 232 2.3. Unified Shader Model ................................................................................ 232 2.4. GPGPU fogalom megjelenése .................................................................... 233 2.5. GPGPU helye és szerepe ............................................................................. 234

Page 10: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

x Created by XMLmind XSL-FO Converter.

2.6. CPU-GPGPU összehasonlítás .................................................................... 234 2.7. Memória szerkezete ................................................................................... 235 2.8. SIMT végrehajtás ....................................................................................... 236

2. Programozási modell ........................................................................................................ 238 1. CUDA környezet alapjai ......................................................................................... 238

1.1. CUDA környezet ........................................................................................ 238 1.2. Szükséges komponensek ............................................................................ 238 1.3. CUDA környezet áttekintése ...................................................................... 239 1.4. CUDA környezet részei ............................................................................. 240 1.5. CUDA szoftver rétegek .............................................................................. 240 1.6. CUDA alapú fejlesztés lépései ................................................................... 241

2. Fordítás és szerkesztés ............................................................................................ 242 2.1. CUDA fordítás lépései ............................................................................... 242

2.1.1. Bemenet ......................................................................................... 242 2.1.2. Kimenet ......................................................................................... 243

2.2. nvcc fordító alapvető paraméterei .............................................................. 244 2.2.1. Fordítás céljának meghatározása ................................................... 244

2.3. nvcc fordító alapvető paraméterei (2) ........................................................ 244 2.4. nvcc fordító alapvető paraméterei (3) ........................................................ 245 2.5. nvcc fordító alapvető paraméterei (4) ........................................................ 245 2.6. Példa parancssori fordításra ....................................................................... 245 2.7. Fordítás áttekintése .................................................................................... 246

3. Platform modell ...................................................................................................... 246 3.1. CUDA platform modell .............................................................................. 246 3.2. CUDA platform modell (2) ........................................................................ 249 3.3. Hozzáférés az eszközökhöz ........................................................................ 250

3.3.1. CUDA eszköz kiválasztása ............................................................ 251 3.4. Eszközök adatai .......................................................................................... 251 3.5. Eszközök adatainak lekérdezése ................................................................ 251

3.5.1. Feladat 2.3.1 .................................................................................. 252 4. Memória modell ..................................................................................................... 252

4.1. CUDA memória modell ............................................................................. 252 4.1.1. Kapcsolat a hoszttal ....................................................................... 252

4.2. CUDA memória modell – globális memória ............................................. 253 4.3. CUDA memória modell – konstans memória ............................................ 254 4.4. CUDA memória modell – textúra memória ............................................... 255 4.5. CUDA memória modell – megosztott memória ......................................... 256 4.6. CUDA memória modell – regiszterek ........................................................ 257 4.7. CUDA memória modell – lokális memória ............................................... 258

4.7.1. Deklaráció .................................................................................... 258 4.8. Memória modell fizikai leképezése ............................................................ 259 4.9. Memory handling ....................................................................................... 261 4.10. Memória területek elérhetőség szerint ..................................................... 261 4.11. Dinamikus memóriakezelés – foglalás ..................................................... 262

4.11.1. Memória felszabadítás ................................................................. 262 4.12. Memória területek közötti másolás .......................................................... 262 4.13. Rögzített memória (pinned memory) ....................................................... 263 4.14. Másolás nélküli memória (zero-copy memory) ....................................... 264

5. Végrehajtási modell ................................................................................................ 264 5.1. CUDA végrehajtási modell - szálak ........................................................... 264 5.2. CUDA blokkok .......................................................................................... 265 5.3. Blokkok azonosítása .................................................................................. 265 5.4. Globális – lokális index .............................................................................. 266

5.4.1. Lokális azonosító ........................................................................... 266 5.4.2. Globális azonosító ......................................................................... 267

5.5. Néhány alapvető összefüggés .................................................................... 267 5.6. CUDA végrehajtási modell – kernel .......................................................... 267 5.7. CUDA végrehajtási modell – kernel indítása ............................................. 268 5.8. Kernel indítással kapcsolatos típusok ........................................................ 268 5.9. Kernel implementálása ............................................................................... 269

Page 11: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

xi Created by XMLmind XSL-FO Converter.

5.10. Kernel elindítás példa ............................................................................... 269 5.11. Blokkokat kezelő kernel implementálása ................................................. 270 5.12. Blokkokat kezelő kernel indítás példa ...................................................... 270 5.13. Teljes alkalmazás elkészítése ................................................................... 270

5.13.1. Feladat 2.5.1 ................................................................................ 271 3. Programozási környezet ................................................................................................... 272

1. Visual Studio használata ......................................................................................... 272 1.1. Visual Studio lehetőségek .......................................................................... 272

1.1.1. New project wizard ........................................................................ 272 1.2. New project wizard .................................................................................... 272 1.3. Custom build rules ..................................................................................... 273 1.4. CUDA-val kapcsolatos project beállítások ................................................ 274

2. Számítási képességek ............................................................................................. 275 2.1. Számítási képességek (1) ........................................................................... 275 2.2. Számítási képességek (2) ........................................................................... 276 2.3. Számítási képességek (3) ........................................................................... 276 2.4. Compute capability (4) ................................................................................ 277 2.5. Néhány Nvidia GPU számítási képessége .................................................. 277 2.6. Néhány Nvidia GPU számítási képessége .................................................. 277

3. CUDA nyelvi kiterjesztés ....................................................................................... 278 3.1. CUDA language extensions ....................................................................... 278 3.2. Mindkét oldalon elérhető típusok ............................................................... 278

3.2.1. dim3 típus ..................................................................................... 278 3.3. Mindkét oldalon elérhető függvények ........................................................ 278 3.4. Csak eszköz oldalon elérhető változók ...................................................... 279 3.5. Csak eszköz oldalon elérhető függvények ................................................. 279 3.6. Csak hoszt oldalon elérhető függvények .................................................... 280

4. Aszinkron konkurens végrehajtás ........................................................................... 281 4.1. Stream-ek ................................................................................................... 281 4.2. Stream-ek létrehozás és megszüntetése ...................................................... 281 4.3. Stream-ek használata .................................................................................. 282 4.4. Példa a stream-ek használatára ................................................................... 283 4.5. Stream szinkronizáció ................................................................................ 283 4.6. Szinkronizációt magukba foglaló műveletek ............................................. 283 4.7. Stream időzítés [12] ................................................................................... 284 4.8. Konkurens végrehajtás támogatása ............................................................ 284 4.9. Példa blokkolt sorra ................................................................................... 285 4.10. Példa blokkolt sorra (2) ............................................................................ 285

5. CUDA események .................................................................................................. 286 5.1. Események létrehozása és megszüntetése .................................................. 286 5.2. Esemény rögzítése ...................................................................................... 286 5.3. Esemény szinkronizálása ........................................................................... 287 5.4. Esemény ellenőrzése .................................................................................. 287 5.5. Szinkronizáció eseményekkel .................................................................... 288 5.6. Szinkronizáció eseményekkel (példa) ........................................................ 288 5.7. Események között eltelt idő számítása ....................................................... 289 5.8. Eltelt idő számítása (példa) ........................................................................ 289

6. Egyesített Virtuális Címtér ..................................................................................... 289 6.1. CUDA Unified Virtual Address Management ........................................... 289 6.2. Egyesített Virtuális Címtér (UVA) ............................................................ 290 6.3. Egyesített Virtuális Címtér – elérhetőség ................................................... 290 6.4. Peer to peer kommunikáció az eszközök között ......................................... 291 6.5. UVA és a P2P átvitel .................................................................................. 292 6.6. P2P memória átvitel GPU-k között ............................................................ 292 6.7. P2P memória másolás GPU-k között ......................................................... 293 6.8. P2P memória hozzáférést bemutató kernel ................................................ 293 6.9. CUDA UVA összegzés .............................................................................. 294

4. Optimalizációs technikák ................................................................................................. 295 1. Megosztott memória használata ............................................................................. 295

1.1. Optimalizációs stratégiák ........................................................................... 295

Page 12: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

xii Created by XMLmind XSL-FO Converter.

1.2. Mátrix szorzó alkalmazás elkészítése ........................................................ 295 1.2.1. Feladat 4.1.1 .................................................................................. 295

1.3. Többdimenziós mátrix a memóriában ........................................................ 296 1.4. Többdimenziós mátrix a memóriában ........................................................ 297 1.5. Több dimenziós mátrix a GPU memóriában ............................................... 297 1.6. Igazított elhelyezés ..................................................................................... 298 1.7. Igazított memóriakezelés ........................................................................... 299 1.8. Igazított memória másolása ........................................................................ 299 1.9. Mátrix szorzó alkalmazás elkészítése igazított memóriával ....................... 300

1.9.1. Feladat 4.1.2 .................................................................................. 300 1.10. Kernel igazított memóriakezeléssel .......................................................... 300 1.11. Kernel hívása igazított tömbök esetén ...................................................... 301 1.12. Megosztott memória kezelése .................................................................. 301 1.13. Ötlet a mátrix szorzás gyorsítására (csempe technika) ............................. 302 1.14. Mátrix szorzó alkalmazás elkészítése (megosztott memóriával) .............. 302

1.14.1. Feladat 4.1.3 ................................................................................ 302 1.15. Mátrix szorzás gyorsítása ......................................................................... 303 1.16. Mátrix szorzás gyorsítása (2) ................................................................... 303 1.17. Mátrix szorzás gyorsítása (3) ................................................................... 304 1.18. Mátrix szorzás gyorsítása (4) ................................................................... 305 1.19. Mátrix szorzás gyorsítása (5) ................................................................... 306 1.20. Optimalizált mátrix szorzás kernel ........................................................... 307 1.21. Összehasonlító vizsgálat .......................................................................... 308

2. Atomi műveletek használata ................................................................................... 308 2.1. Atomi műveletek szükségessége ................................................................ 308 2.2. CUDA atomi műveletek ............................................................................. 308 2.3. CUDA atomi műveletek - aritmetika ......................................................... 309 2.4. CUDA atomi műveletek – aritmetika (2) ................................................... 309 2.5. CUDA atomi műveletek – logikai függvények .......................................... 310

2.5.1. Feladat 4.2.1 .................................................................................. 310 2.6. Vektor legkisebb elemének értéke ............................................................. 310

2.6.1. Feladat 4.2.2 .................................................................................. 310 2.7. Memóriahozzáférések csökkentése – megosztott memória ........................ 310

2.7.1. Összehasonlító vizsgálat ................................................................ 311 2.8. Blokkon belüli párhuzamosítás .................................................................. 312

2.8.1. Feladat 4.2.3 .................................................................................. 312 2.9. Párhuzamos minimum - betöltés ................................................................ 312 2.10. Párhuzamos minimum – blokk minimuma .............................................. 313 2.11. Párhuzamos minimum - kernel ................................................................ 314 2.12. Párhuzamos minimum – kernel (2) .......................................................... 314 2.13. Összehasonlító vizsgálat .......................................................................... 314 2.14. Összehasonlító vizsgálat .......................................................................... 315

3. Kihasználtság .......................................................................................................... 315 3.1. A végrehajtás áttekintése ............................................................................ 315 3.2. Kihasználtság ............................................................................................. 316 3.3. Kihasználtság és a regiszterek kapcsolata .................................................. 316 3.4. Kihasználtság és megosztott memória ....................................................... 317 3.5. Kihasználtság és blokk méret ..................................................................... 317 3.6. CUDA Occupancy calculator ..................................................................... 318 3.7. CUDA Occupancy calculator - példa ......................................................... 318 3.8. CUDA Occupancy calculator – változó blokk méret hatása ...................... 319 3.9. CUDA Occupancy calculator – változó regiszter szám hatása .................. 319 3.10. CUDA Occupancy calculator – változó megosztott memória hatása ....... 320 3.11. Blokk mérettel kapcsolatos javaslatok [18] .............................................. 320

4. Parallel Nsight ........................................................................................................ 321 4.1. Parallel Nsight ............................................................................................ 321 4.2. Kernel nyomkövetés .................................................................................. 322 4.3. GPU memória régiók megtekintése ........................................................... 322 4.4. CUDA Debug Focus .................................................................................. 323 4.5. CUDA Device Summary ............................................................................ 323

Page 13: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

xiii Created by XMLmind XSL-FO Converter.

4.6. CUDA Device Summary - rács .................................................................. 324 4.7. CUDA Device Summary - warp ................................................................ 324 4.8. PTX code nyomkövetése ............................................................................ 325 4.9. Memória ellenőrzés használata .................................................................. 326 4.10. CUDA memória ellenőrző minta eredmény ............................................. 326 4.11. Lehetséges hibakódok és jelentésük ......................................................... 327

5. CUDA könyvtárak ........................................................................................................... 329 1. CUBLAS könyvtár ................................................................................................. 329

1.1. CUBLAS Library ....................................................................................... 329 1.2. CUBLAS alapú alkalmazások fejlesztése .................................................. 329 1.3. CUBLAS függvények visszatérési értéke .................................................. 329 1.4. CUBLAS segítő függvények ...................................................................... 330 1.5. CUBLAS memória kezelés ........................................................................ 330 1.6. BLAS függvények áttekintése .................................................................... 331 1.7. Néhány CUBLAS 1. szintű függvény ........................................................ 331 1.8. Néhány CUBLAS 2. szintű függvény ........................................................ 332 1.9. Néhány CUBLAS 3. szintű függvény ........................................................ 332

6. CUDA verziók ................................................................................................................. 334 1. CUDA 4 újdonságok .............................................................................................. 334

1.1. CUDA 4.0 újdonságai ................................................................................ 334 1.2. Aktuális eszköz kiválasztása ...................................................................... 334 1.3. Aktuális eszköz – stream, események ........................................................ 334 1.4. Több-GPU példa ........................................................................................ 335 1.5. Több CPU szál használata .......................................................................... 335 1.6. Vektor szorzás több-GPU-s környezetben - kernel .................................... 336 1.7. Vektor szorzás több-GPU-s környezetben – memória foglalás .................. 336 1.8. Vektor szorzás több-GPU-s környezetben – kernel hívás .......................... 337 1.9. Vektor szorzás több-GPU-s környezetben – kernel hívás .......................... 337

2. CUDA 5 újdonságok .............................................................................................. 338 2.1. CUDA 5.0 újdonságok [26] ....................................................................... 338 2.2. Dinamikus párhuzamosság ......................................................................... 338

7. Felhasznált irodalom ........................................................................................................ 340 1. Felhasznált irodalom ............................................................................................... 340 2. Gyakran előforduló kifejezések fordításai ............................................................... 341

Page 14: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

xiv Created by XMLmind XSL-FO Converter.

Az ábrák listája

1.1. ................................................................................................................................................... 10 1.2. ................................................................................................................................................... 10 1.3. ................................................................................................................................................... 11 1.4. Képpont/csúcs shader modellek (SM) támogatottsága az egymást követő DirectX verziókban és a

Microsoft operációs rendszerekben [2], [3] ..................................................................................... 11 1.5. ................................................................................................................................................... 13 1.6. Az egységesített shader architektúra alapelve [6] ...................................................................... 13 1.7. ................................................................................................................................................... 14 1.8. ................................................................................................................................................... 14 1.9. ................................................................................................................................................... 15 1.10. ................................................................................................................................................. 16 1.11. ................................................................................................................................................. 17 1.12. GPU és CPU lapkafelülete k kihasználtságának összehasonlítása [10] .................................. 17 1.13. ................................................................................................................................................. 17 2.1. ................................................................................................................................................... 19 2.2. ................................................................................................................................................... 20 2.3. ................................................................................................................................................... 20 2.4. ................................................................................................................................................... 20 2.5. ................................................................................................................................................... 21 2.6. GPGPU-k és adatpárhuzamos gyorsítók terminológiája ........................................................... 23 2.7. A SIMT számítási modell tervezési tere .................................................................................... 24 2.8. ................................................................................................................................................... 24 2.9. ................................................................................................................................................... 25 2.10. Az Ndimenziós tartomány értelmezése [12] ............................................................................ 25 2.11. A munkaelem értelmezése ([12] alapján) ............................................................................... 26 2.12. A munkacsoport értelmezése [12] .......................................................................................... 27 2.13. A hullámfrontok értelmezése [12] .......................................................................................... 28 2.14. ................................................................................................................................................. 29 2.15. A kernel modell értelmezése .................................................................................................... 29 2.16. ................................................................................................................................................. 30 2.17. ................................................................................................................................................. 30 2.18. ................................................................................................................................................. 31 2.19. A számítási erőforrások modellje [15] .................................................................................... 31 2.20. ................................................................................................................................................. 32 2.21. ................................................................................................................................................. 32 2.22. ................................................................................................................................................. 33 2.23. ................................................................................................................................................. 34 2.24. ................................................................................................................................................. 35 2.25. GPGPU-kon a virtuális gép szintjén elérhető tárterületek ....................................................... 35 2.26. ................................................................................................................................................. 35 2.27. ................................................................................................................................................. 36 2.28. ................................................................................................................................................. 36 2.29. ................................................................................................................................................. 37 2.30. ................................................................................................................................................. 37 2.31. Az AMD IL v2.0 alatt rendelkezésre álló tárhelyek [22] ......................................................... 38 2.32. ................................................................................................................................................. 38 2.33. A végrehajtási modell fő komponensei .................................................................................... 39 2.34. A végrehajtás modell fő fogalmai ............................................................................................ 39 2.35. Memóriaolvasás miatti várakozások elrejtését lehetővé tevő hullámfront ütemezés [24] ...... 40 2.36. CPUk és GPUk lapkaterületének eltérő kihasználtsága [10] ................................................... 40 2.37. A használt platform modell [15] .............................................................................................. 41 2.38. A SIMD végrehajtás elve ......................................................................................................... 41 2.39. SIMT végrehajtás elve ............................................................................................................. 42 2.40. A SIMT végrehajtás elve ......................................................................................................... 42 2.41. A SIMD és a SIMT végrehajtás összevetése ........................................................................... 43 2.42. A végrehajtás modell fő fogalmai ............................................................................................ 43

Page 15: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

xv Created by XMLmind XSL-FO Converter.

2.43. A végrehajtási tartomány felbontása munkacsoportokra ......................................................... 44 2.44. A végrehajtási tartomány felbontása munkacsoportokra ......................................................... 44 2.45. ................................................................................................................................................. 45 2.46. ................................................................................................................................................. 45 2.47. ................................................................................................................................................. 46 2.48. ................................................................................................................................................. 46 2.49. A végrehajtás modell fő fogalmai ............................................................................................ 47 2.50. ................................................................................................................................................. 48 2.51. A végrehajtás modell fő fogalmai ............................................................................................ 48 2.52. Elágazások végrehajtása - 1 [26] ............................................................................................. 49 2.53. Elágazások végrehajtása - 2 [26] ............................................................................................. 49 2.54. Utasítás folyam végrehajtásának folytatása elágazás után [26] ............................................... 50 2.55. A végrehajtás modell fő fogalmai ............................................................................................ 50 2.56. ................................................................................................................................................. 51 2.57. ................................................................................................................................................. 52 2.58. ................................................................................................................................................. 52 2.59. ................................................................................................................................................. 53 2.60. ................................................................................................................................................. 53 2.61. ................................................................................................................................................. 54 2.62. ................................................................................................................................................. 55 2.63. ................................................................................................................................................. 56 2.64. ................................................................................................................................................. 56 2.65. ................................................................................................................................................. 56 2.66. ................................................................................................................................................. 57 2.67. ................................................................................................................................................. 58 3.1. A SIMT végrehajtás megvalósítási alternatívái ......................................................................... 59 3.2. Az Nvidia és AMD/ATI GPGPU vonalainak áttekintése .......................................................... 59 3.3. GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése (1) .................... 60 3.4. GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése (2) .................... 60 3.5. GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése (3) .................... 61 3.6. Main features of Nvidia’s dual-GPU graphics cards [33], [34] ................................................. 62 3.7. Az AMD/ATI duál-GPU grafikus kártyáinak főbb jellemzői [35] ............................................ 62 3.8. ................................................................................................................................................... 62 3.9. Az Nvidia Fermi előtti grafikus kártyái [33] ............................................................................ 63 3.10. A MAD (Multiply-ADD - Szorzás-Összeadás) művelet értelmezése [51] .............................. 64 3.11. ................................................................................................................................................. 64 3.12. Az Nvidia Fermi alapú grafikus kártyáinak főbb jellemzői [33] ............................................. 65 3.13. Az Nvidia Kepler alapú grafikus kártyáinak főbb jellemzői [33] ........................................... 66 3.14. ................................................................................................................................................. 67 3.15. ................................................................................................................................................. 68 3.16. ................................................................................................................................................. 69 3.17. ................................................................................................................................................. 69 3.18. ................................................................................................................................................. 70 3.19. ................................................................................................................................................. 70 3.20. Az AMD/ATI korai grafikus kártyáinak főbb jellemzői -1 [35] ............................................. 71 3.21. Az AMD/ATI korai grafikus kártyáinak főbb jellemzői - 2 [35] ............................................. 72 3.22. Az AMD Southern Islands sorozatú grafikus kártyái [35] ...................................................... 72 3.23. Az AMD Northern Islands sorozatú grafikus kártyái [35] ...................................................... 73 3.24. AMD Southern Islands sorozatú (GCN) grafikus kártyái [35] ................................................ 74 3.25. Az AMD Sea Islands sorozatú grafikus kártyáinak főbb jellemzői [45] ................................. 74 3.26. ATI HD 5870 (RV870 alapú) [43] ......................................................................................... 75 3.27. ATI HD 5970: 2 x ATI HD 5870 némileg csökkentett memória órajellel ............................... 76 3.28. ATI HD 5970: 2 x ATI HD 5870 valamelyest csökkentett memória órajellel ........................ 76 3.29. AMD HD 6990: 2 x ATI HD 6970 valamelyest csökkentett memória és shader órajellel ...... 77 3.30. AMD HD 7970 ........................................................................................................................ 77 3.31. GPU árak összehasonlítása 2012 nyarán ................................................................................. 78 4.1. GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése (2) .................... 80 4.2. ................................................................................................................................................... 80 4.3. ................................................................................................................................................... 81 4.4. ................................................................................................................................................... 82

Page 16: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

xvi Created by XMLmind XSL-FO Converter.

4.5. ................................................................................................................................................... 83 4.6. ................................................................................................................................................... 86 4.7. ................................................................................................................................................... 86 4.8. ................................................................................................................................................... 88 4.9. ................................................................................................................................................... 89 4.10. ................................................................................................................................................. 89 4.11. ................................................................................................................................................. 89 4.12. ................................................................................................................................................. 90 4.13. A Fermi rendszerarchitektúrája [52] ....................................................................................... 90 4.14. ................................................................................................................................................. 91 4.15. ................................................................................................................................................. 92 4.16. ................................................................................................................................................. 93 4.17. ................................................................................................................................................. 93 4.18. ................................................................................................................................................. 94 4.19. ................................................................................................................................................. 95 4.20. ................................................................................................................................................. 96 4.21. A single ALU [57] .................................................................................................................. 96 4.22. Multiply-Add (MAD) és Fused-Multiply-Add (FMA) műveletek összevetése [51] .............. 97 4.23. szálak hierarchiája [58] ............................................................................................................ 97 4.24. ................................................................................................................................................. 98 4.25. ................................................................................................................................................. 98 4.26. ............................................................................................................................................... 100 4.27. ............................................................................................................................................... 100 4.28. ............................................................................................................................................... 102 4.29. A Bulldozer mag felépítése [60] ........................................................................................... 103 4.30. A Fermi mag [52] .................................................................................................................. 103 4.31. A Fermi mag [52] ................................................................................................................. 105 4.32. A Fermi mag [52] ................................................................................................................. 106 4.33. ............................................................................................................................................... 107 4.34. ............................................................................................................................................... 108 4.35. Warp ütemezés a G80-ban [59] ............................................................................................. 110 4.36. Warp ütemezés a G80-ban [59] ............................................................................................. 111 4.37. Warp ütemezés a G80-ban [59] ............................................................................................. 111 4.38. A Fermi magja [52] .............................................................................................................. 113 4.39. A Fermi magja [52] ............................................................................................................... 115 4.40. GF104 és GF100 felépítésének összehasonlítása [62] .......................................................... 116 4.41. ............................................................................................................................................... 117 4.42. ............................................................................................................................................... 118 4.43. ............................................................................................................................................... 118 4.44. ............................................................................................................................................... 120 4.45. ............................................................................................................................................... 121 4.46. ............................................................................................................................................... 121 4.47. ............................................................................................................................................... 122 4.48. ............................................................................................................................................... 123 4.49. ............................................................................................................................................... 124 4.50. ............................................................................................................................................... 125 4.51. ............................................................................................................................................... 125 5.1. GPGPU magok, kártyák és az azokat támogató szoftverek áttekintése (3) ............................ 127 5.2. ................................................................................................................................................. 127 5.3. A GK104 Kepler magjának blokkdiagrammja ........................................................................ 127 5.4. A GK110 Kepler magjának blokkdiagrammja ........................................................................ 128 5.5. ................................................................................................................................................. 128 5.6. A Kepler GPU-kban használt dinamikus párhuzamosság elve ................................................ 130 5.7. Soros és párhuzamos kernel futtatási modell a Fermiben és a Fermi előtti eszközökben [25], [18]

130 5.8. Soros és párhuzamos kernel futtatási modell a Fermiben és a Fermi előtti eszközökben [25], [18]

131 5.9. Egyetlen hardver munkasor használata több kernelfolyam esetén [70] .................................. 131 5.10. Fermi párhuzamos végrehajtási modellje [70] ....................................................................... 132 5.11. A Hyper-Q ütemezési modell működési elve [70] ................................................................ 133

Page 17: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

xvii Created by XMLmind XSL-FO Converter.

5.12. A Hyper-Q működési modell elve [70] ................................................................................. 134 5.13. A Kepler Hyper-Q ütemező mechanizmusa, mely egyidejűle több MPI feladat kiküldédére képes,

szemben a Fermi egyetlen MPI feladat kibocsájtási képességével [73] ......................................... 135 5.14. A Fermi és a Kepler architektúriák ütemező alrendszereinek összehasonlítása [70] ............ 136 5.15. GPU Direct a Keplerben [70] ................................................................................................ 137 5.16. Titan (Cray XK7) szuperszámítógép [75] .............................................................................. 137 5.17. Mag és shader frekvenciák összehasonlítása az Nvidia fontosabb GPU családjaiban .......... 138 5.18. Rendelkezésre álló feldolgozási erőforrások a Kepler SMX és a Fermi SM esetén ............. 139 5.19. Magok és shaderek órajel frekvenciái az Nvidia főbb GPU családjaiban ............................ 139 5.20. ............................................................................................................................................... 139 5.21. Nvidia és AMD GPU kártyák főbb jellemzőinek összevetése [77] ...................................... 140 5.22. Fermi és Kepler kártyák teljesítményhatékonyságának összevetése [76] ............................. 141 5.23. A Fermi hardveres függőség ellenőrzője [76] ....................................................................... 141 5.24. A Kepler hardveres függőség ellenőrzésének blokkdiagrammja [76] .................................. 141 5.25. ............................................................................................................................................... 142 5.26. ............................................................................................................................................... 142 5.27. ............................................................................................................................................... 142 5.28. Számítási verziók főbb eszköz jellemzői [32] ...................................................................... 143 5.29. A Kepler cache architektúrája [70] ....................................................................................... 144 5.30. ............................................................................................................................................... 145 5.31. A GK104 Kepler magjának blokkdiagrammja ...................................................................... 145 5.32. ............................................................................................................................................... 145 5.33. ............................................................................................................................................... 146 5.34. Az Nvidia Kepler-alapú GTX 680 GPGPU kártya [33] ....................................................... 147 5.35. ............................................................................................................................................... 147 5.36. ............................................................................................................................................... 149 5.37. ............................................................................................................................................... 149 5.38. A GK110 Kepler magjának blokkdiagrammja ...................................................................... 150 5.39. ............................................................................................................................................... 151 5.40. ............................................................................................................................................... 151 5.41. ............................................................................................................................................... 152 5.42. ............................................................................................................................................... 153 5.43. ............................................................................................................................................... 155 5.44. ............................................................................................................................................... 155 5.45. ............................................................................................................................................... 156 5.46. ............................................................................................................................................... 157 6.1. ................................................................................................................................................. 158 6.2. Az AMD összefoglaló ábrája a processzorok teljesítményének fejlődédéről a mikroarchitektúra

egymást követő fejlődési szakaszaiban (6/2011) [84] .................................................................... 159 6.3. AMD’s view of the evolution to heterogeneous computing [84] ............................................ 159 6.4. ................................................................................................................................................. 160 6.5. A fordítási fázis ....................................................................................................................... 161 6.6. A futtatási fázis ........................................................................................................................ 162 6.7. Klasszikus három fázisú moduláris fordító felépítése [89] ..................................................... 163 6.8. ................................................................................................................................................. 164 6.9. ................................................................................................................................................. 164 6.10. ............................................................................................................................................... 165 7.1. ................................................................................................................................................. 166 7.2. GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése (3) .................. 167 7.3. ................................................................................................................................................. 167 7.4. Az ATI és az AMD GPU-k mikroarchitektúra fejlődésének főbb állomásai [95] .................. 168 7.5. Egy VLIW5 ALU blokkdiagrammja [17] ............................................................................... 168 7.6. ................................................................................................................................................. 169 7.7. VLIW4 ALU blokkdiagrammja (a Northern Islands család (HD6900-as kártyájában)) [17] . 169 7.8. 16-széles SIMD egység egyszerűsített blokkdiagrammja ([95]) ............................................ 170 7.9. ................................................................................................................................................. 170 7.10. ............................................................................................................................................... 172 7.11. Feldolgozó egységek (EU) száma Nvidia és AMD GPU-k esetében .................................... 172 7.12. A vertex shader futószalag az ATI első DX 9.0 támogatású GPU-jában (az R300 magban) (2002)

[102] .............................................................................................................................................. 173

Page 18: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

xviii Created by XMLmind XSL-FO Converter.

7.13. Az AMD VLIW alapú shader ALU-inak fejlődési lépései .................................................... 174 7.14. Az AMD VLIW alapú shader ALU-inak fejlődési lépései .................................................... 174 7.15. A Northern Islands vonalban (HD6900) bevezetett VLIW4 ALU blokkdiagrammja [17] ... 175 7.16. ............................................................................................................................................... 175 7.17. ............................................................................................................................................... 177 7.18. ............................................................................................................................................... 178 7.19. ............................................................................................................................................... 179 7.20. ............................................................................................................................................... 179 7.21. GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése (4) ................ 180 7.22. Southern Islands család alcsaládjai [107] ............................................................................. 181 7.23. ............................................................................................................................................... 182 7.24. ............................................................................................................................................... 182 7.25. GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése (3) ................ 183 7.26. ............................................................................................................................................... 183 7.27. HD 5950 (Tahiti Pro) blokkdiagrammja [109] ..................................................................... 184 7.28. ............................................................................................................................................... 185 7.29. ............................................................................................................................................... 185 7.30. A 16-széles SIMD egység egyszerűsített blokkdiagrammja ([95] alapján) ........................... 186 7.31. ............................................................................................................................................... 187 7.32. ............................................................................................................................................... 187 7.33. ............................................................................................................................................... 188 7.34. Az N dimenziós végrehajtási tartomány értelmezése [12] .................................................... 189 7.35. A munkaelem értelmezése ([12] alapján) .............................................................................. 190 7.36. A munkacsoport értelmezése [12] ......................................................................................... 191 7.37. A hullámfrontok értelmezése [12] ......................................................................................... 192 7.38. Southern Islands sorozatú processzor blokkdiagrammja [110] ............................................ 193 7.39. CU blokkdiagrammja [110] .................................................................................................. 194 7.40. ............................................................................................................................................... 195 7.41. ............................................................................................................................................... 195 7.42. ............................................................................................................................................... 196 7.43. ............................................................................................................................................... 197 7.44. ............................................................................................................................................... 198 8.1. ................................................................................................................................................. 200 8.2. ................................................................................................................................................. 200 8.3. GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése (4) .................. 201 9.1. ................................................................................................................................................. 202 9.2. ................................................................................................................................................. 203 9.3. Az Intel Package-on-Package memória rétegezett megoldása a Clover Trail tábla platformon [116]

203 9.4. Az AMD asztali gépekbe szánt grafikai kártyáinak 2013-as útiterve [117] ........................... 204 9.5. ................................................................................................................................................. 204 9.6. ................................................................................................................................................. 204 9.7. ................................................................................................................................................. 205 9.8. Az Intel Xeon Phi család áttekintése (a korábbi MIC család) ................................................. 206 9.9. ................................................................................................................................................. 206 9.10. ............................................................................................................................................... 207 9.11. Intel Xeon Phi családjának fő jellemzői [122], [123] ........................................................... 207 9.12. ............................................................................................................................................... 208 9.13. A Knights Corner mikroarchitektúrája [120] ........................................................................ 209 9.14. ............................................................................................................................................... 209 9.15. ............................................................................................................................................... 209 9.16. ............................................................................................................................................... 210 9.17. ............................................................................................................................................... 210 9.18. ............................................................................................................................................... 211 9.19. ............................................................................................................................................... 212 9.20. ............................................................................................................................................... 212 9.21. ............................................................................................................................................... 213 9.22. ............................................................................................................................................... 213 9.23. ............................................................................................................................................... 214 9.24. ............................................................................................................................................... 214

Page 19: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

xix Created by XMLmind XSL-FO Converter.

9.25. ............................................................................................................................................... 215 9.26. ............................................................................................................................................... 216 9.27. ............................................................................................................................................... 217 9.28. ............................................................................................................................................... 218 1.1. [11] .......................................................................................................................................... 231 1.2. ................................................................................................................................................. 231 1.3. [3] ............................................................................................................................................ 233 1.4. [5] ............................................................................................................................................ 234 1.5. [3] ............................................................................................................................................ 235 1.6. [7] ............................................................................................................................................ 237 2.1. ................................................................................................................................................. 238 2.2. [5] ............................................................................................................................................ 239 2.3. [5] ............................................................................................................................................ 241 2.4. [2] ............................................................................................................................................ 242 2.5. ................................................................................................................................................. 245 2.6. ................................................................................................................................................. 246 2.7. [5] ............................................................................................................................................ 247 2.8. [5] ............................................................................................................................................ 249 2.9. ................................................................................................................................................. 250 2.10. ............................................................................................................................................... 251 2.11. ............................................................................................................................................... 251 2.12. ............................................................................................................................................... 252 2.13. [5] .......................................................................................................................................... 252 2.14. ............................................................................................................................................... 253 2.15. [5] .......................................................................................................................................... 254 2.16. ............................................................................................................................................... 254 2.17. [5] .......................................................................................................................................... 255 2.18. [5] .......................................................................................................................................... 255 2.19. ............................................................................................................................................... 256 2.20. [5] .......................................................................................................................................... 257 2.21. ............................................................................................................................................... 257 2.22. [5] .......................................................................................................................................... 258 2.23. ............................................................................................................................................... 259 2.24. [5] .......................................................................................................................................... 259 2.25. [5] .......................................................................................................................................... 260 2.26. ............................................................................................................................................... 261 2.27. ............................................................................................................................................... 261 2.28. ............................................................................................................................................... 262 2.29. ............................................................................................................................................... 262 2.30. ............................................................................................................................................... 263 2.31. [5] .......................................................................................................................................... 263 2.32. ............................................................................................................................................... 264 2.33. [5] .......................................................................................................................................... 266 2.34. ............................................................................................................................................... 268 2.35. ............................................................................................................................................... 269 2.36. ............................................................................................................................................... 269 2.37. ............................................................................................................................................... 270 2.38. ............................................................................................................................................... 270 3.1. ................................................................................................................................................. 272 3.2. ................................................................................................................................................. 273 3.3. ................................................................................................................................................. 274 3.4. ................................................................................................................................................. 274 3.5. ................................................................................................................................................. 277 3.6. ................................................................................................................................................. 277 3.7. [12] .......................................................................................................................................... 281 3.8. ................................................................................................................................................. 282 3.9. ................................................................................................................................................. 282 3.10. ............................................................................................................................................... 282 3.11. ............................................................................................................................................... 283 3.12. ............................................................................................................................................... 283

Page 20: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

xx Created by XMLmind XSL-FO Converter.

3.13. ............................................................................................................................................... 283 3.14. [12] ........................................................................................................................................ 285 3.15. [12] ........................................................................................................................................ 285 3.16. ............................................................................................................................................... 286 3.17. ............................................................................................................................................... 286 3.18. ............................................................................................................................................... 287 3.19. ............................................................................................................................................... 287 3.20. ............................................................................................................................................... 287 3.21. ............................................................................................................................................... 288 3.22. ............................................................................................................................................... 289 3.23. [9] .......................................................................................................................................... 290 3.24. ............................................................................................................................................... 290 3.25. [10] ........................................................................................................................................ 291 3.26. ............................................................................................................................................... 292 3.27. ............................................................................................................................................... 292 3.28. ............................................................................................................................................... 292 3.29. ............................................................................................................................................... 292 3.30. ............................................................................................................................................... 292 3.31. ............................................................................................................................................... 293 3.32. ............................................................................................................................................... 293 3.33. ............................................................................................................................................... 293 3.34. ............................................................................................................................................... 293 3.35. ............................................................................................................................................... 294 4.1. ................................................................................................................................................. 296 4.2. ................................................................................................................................................. 296 4.3. ................................................................................................................................................. 297 4.4. ................................................................................................................................................. 297 4.5. ................................................................................................................................................. 297 4.6. ................................................................................................................................................. 297 4.7. ................................................................................................................................................. 298 4.8. ................................................................................................................................................. 298 4.9. ................................................................................................................................................. 298 4.10. ............................................................................................................................................... 300 4.11. ............................................................................................................................................... 301 4.12. ............................................................................................................................................... 301 4.13. ............................................................................................................................................... 301 4.14. ............................................................................................................................................... 301 4.15. ............................................................................................................................................... 303 4.16. ............................................................................................................................................... 303 4.17. ............................................................................................................................................... 304 4.18. ............................................................................................................................................... 305 4.19. ............................................................................................................................................... 306 4.20. ............................................................................................................................................... 307 4.21. ............................................................................................................................................... 308 4.22. ............................................................................................................................................... 310 4.23. ............................................................................................................................................... 311 4.24. ............................................................................................................................................... 311 4.25. ............................................................................................................................................... 313 4.26. ............................................................................................................................................... 313 4.27. ............................................................................................................................................... 314 4.28. ............................................................................................................................................... 314 4.29. ............................................................................................................................................... 314 4.30. ............................................................................................................................................... 315 4.31. ............................................................................................................................................... 318 4.32. ............................................................................................................................................... 319 4.33. ............................................................................................................................................... 319 4.34. ............................................................................................................................................... 320 4.35. ............................................................................................................................................... 322 4.36. ............................................................................................................................................... 323 4.37. ............................................................................................................................................... 324

Page 21: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

xxi Created by XMLmind XSL-FO Converter.

4.38. ............................................................................................................................................... 324 4.39. ............................................................................................................................................... 325 4.40. ............................................................................................................................................... 325 4.41. ............................................................................................................................................... 327 5.1. ................................................................................................................................................. 330 6.1. ................................................................................................................................................. 335 6.2. ................................................................................................................................................. 336 6.3. ................................................................................................................................................. 336 6.4. ................................................................................................................................................. 337 6.5. ................................................................................................................................................. 338 6.6. ................................................................................................................................................. 338

Page 22: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler
Page 23: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Created by XMLmind XSL-FO Converter.

I. rész - GPGPU-k

Page 24: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

2 Created by XMLmind XSL-FO Converter.

Tartalom

Cél ................................................................................................................................................... ix 1. Bevezetés a GPGPU-kba ............................................................................................................. 10

1. Objektumok ábrázolása háromszögekkel ........................................................................... 10 1.1. GPU-k shadereinek főbb típusai ............................................................................ 11

2. Él- és csúcs shader modellek funkcióinak egybeolvadása ................................................. 12 3. Nvidia GPU-k és Intel P4 ill. Core2 CPU-k FP32/FP64 teljesítményének összehasonlítása [7]

14 4. AMD GPU-k csúcs FP32 teljesítménye [8] ........................................................................ 15 5. GPU-k FP32 feldolgozási teljesítményének fejlődése [9] .................................................. 16 6. Nvidia GPU-k és Intel P4, Core2 CPU-k sávszélességének fejlődése [7] .......................... 16 7. CPU-k és GPU-k főbb jellemzőinek összevetése [12] ....................................................... 17

2. A GPGPU modell virtuális gép elve ............................................................................................ 19 1. GPGPU-k virtuális gép modellje ........................................................................................ 19

1.1. GPGPU-k virtuális gép modellje ........................................................................... 19 1.2. Pseudo assembly kód hordozhatóságának előnyei ................................................. 19 1.3. Az alkalmazásfejlesztés fázisai - 1 ........................................................................ 19 1.4. Az alkalmazás végrehajtásának fázisai - 2 ............................................................. 20 1.5. Alkalmazások leírása eltérő absztrakciós szinteken .............................................. 20

2. GPGPU-kon alapuló masszívan adatpárhuzamos számítási modell .................................. 21 2.1. GPGPU-k specifikációja különböző absztrakciós szinteken ................................. 21 2.2. GPGPU-k virtuális gép szintű specifikációja ........................................................ 22 2.3. Az GPGPU alapú masszívan párhuzamos adatfeldolgozási modell ...................... 22 2.4. A GPGPU alapú masszívan párhuzamos számítási modellek térnyerése .............. 22 2.5. A tárgyalt számítási modell kiválasztása ............................................................... 23 2.6. A használt terminológia kiválasztása ..................................................................... 23

2.6.1. A GPGPU alapú masszívan párhuzamos adatfeldolgozási modellre SIMT (Single

instruction Multiple Threads) számítási modell néven hivatkozunk. .................. 23 2.6.2. A GPGPU alapú masszívan adatpárhuzamos számítási modellel kapcsolatos

kifejezések megválasztása ................................................................................... 23 3. A SIMT számítási modell .................................................................................................. 24

3.1. A SIMT számítási modell főbb komponensei ....................................................... 24 3.2. A számítási feladat modellje .................................................................................. 24

3.2.1. A szál modell ............................................................................................ 25 3.2.2. A kernel modell ......................................................................................... 29

3.3. A platform modellje ............................................................................................... 30 3.3.1. A számítási erőforrások modellje .............................................................. 31 3.3.2. A memória modell .................................................................................... 35

3.4. A végrehajtási modell ............................................................................................ 39 3.4.1. A SIMT végrehajtás elve .......................................................................... 39 3.4.2. A feladat szétosztása a PE-k felé ............................................................... 43 3.4.3. Az adatmegosztás elve .............................................................................. 47 3.4.4. Az adatfüggő végrehajtás elve .................................................................. 48 3.4.5. A szinkronizáció elve ................................................................................ 50

4. GPGPU-k pseudo ISA szintű leírása .................................................................................. 51 4.1. Pseudo ISA-k leírása ............................................................................................. 52 4.2. Mintapélda: Az Nvidia PTX virtuális gép pseudo ISA szintű leírása .................... 52 4.3. Mintapélda: Az Nvidia PTX virtuális gép pseudo ISA szintű leírása .................... 53 4.4. Nvidia számítási képesség (számítási képesség) elve [31], [1] .............................. 54 4.5. a) A funkcionális jellemzők, vagyis a számítási képességek összehasonlítása egymást

követő Nvidia pseudo ISA (PTX) verziókban [32] ...................................................... 55 4.6. b) Az eszközjellemzők fejlődésének összehasonlítása egymást követő Nvidia pseudo ISA

(PTX) számítási képességekben [32] ............................................................................ 56 4.7. c) Számítási képességhez kötött architektúra specifikációk az Nvidia PTX-ben [32] 56 4.8. d) Natív aritmetikai utasítások végrehajtási sebessége az Nvidia PTX számítási

képességeinek egymást követő verzióiban (utasítás / óraciklus/SM) [7] ...................... 56

Page 25: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k

3 Created by XMLmind XSL-FO Converter.

4.9. Egymást követő CUDA SDK-kkal megjelent PTX ISA verziók, valamint az általuk

támogatott számítási képesség verziók (sm[xx]) (A táblázatban ez Supported Targets néven

szerepel) [20] ................................................................................................................ 57 4.10. Nvidia GPGPU magjai és kártyái által támogatott számítási képesség verziók [32] 58 4.11. A PTX kód előre hordozhatósága [31] ................................................................ 58 4.12. Egy megadott GPGPU számítási képesség verzióra fordított objektum fájlra (CUBIN

file) vonatkozó kompatibilitási szabályok [31] ............................................................. 58 3. GPGPU magok és kártyák áttekintése ......................................................................................... 59

1. Általános áttekintés ............................................................................................................ 59 1.1. GPGPU magok ...................................................................................................... 59 1.2. Az Nvidia duál-GPU grafikus kártyáinak főbb jellemzői ...................................... 62 1.3. Az AMD/ATI duál-GPU grafikus kártyáinak főbb jellemzői ................................ 62 1.4. Megjegyzés az AMD alapú grafikus kártyákhoz [36], [37] ................................... 62

2. Az Nvidia grafikus magok és kártyák főbb jellemzőinek áttekintése ................................ 63 2.1. Az Nvidia grafikus magok és kártyák főbb jellemzői ............................................ 63

2.1.1. Egy SM felépítése a G80 architektúrában ................................................. 64 2.1.2. Az Nvidia GPGPU kártyáinak pozicionálása a termékspektrumukon belül [41]

67 2.2. Példák az Nvidia grafikus kártyáira ....................................................................... 68

2.2.1. Nvidia GeForce GTX 480 (GF 100 alapú) [42] ........................................ 68 2.2.2. Párba állított Nvidia GeForce GTX 480 kártyák [42] (GF100 alapú) ....... 68 2.2.3. Nvidia GeForce GTX 480 és 580 kártyák [44] ......................................... 69 2.2.4. Nvidia GTX 680 kártya [80] (GK104 alapú) ............................................ 70 2.2.5. Nvidia GTX Titan kártya [81] (GK110 alapú) .......................................... 70

3. Az AMD grafikus magok és kártyák főbb jellemzőinek áttekintése .................................. 71 3.1. Az AMD grafikus magok és kártyák főbb jellemzői ............................................. 71 3.2. Példák AMD grafikus kártyákra ............................................................................ 75

3.2.1. ATI HD 5970 (gyakorlatilag RV870 alapú) [46] ...................................... 76 3.2.2. ATI HD 5970 (RV870 alapú) [47] ............................................................ 76 3.2.3. AMD HD 6990 (Cayman alapú) [48] ........................................................ 77 3.2.4. AMD Radeon HD 7970 (Tahiti XT, Southern Islands alapú) - Első GCN

megvalósítás [49] ................................................................................................ 77 3.2.5. GPGPU árak 2012 nyarán [50] ................................................................. 78

4. Az Nvidia Fermi családhoz tartozó magok és kártyák ................................................................ 80 1. A Fermi család áttekintése ................................................................................................. 80

1.1. A Fermi főbb alcsaládjai ........................................................................................ 81 2. A Fermi PTX 2.0 legfontosabb újításai .............................................................................. 81

2.1. A PTX 2.0 áttekintése ............................................................................................ 81 2.2. A PTX 2.0 pseudo ISA főbb újításai ..................................................................... 82

2.2.1. a) A változók és a pointerek számára biztosított egységesített címtér mely azonos

load/store utasításkészlettel érhető el - 1 [11] ..................................................... 82 2.2.2. a) A változók és a pointerek számára biztosított egységesített címtér mely azonos

load/store utasításkészlettel érhető el - 2 [11] ..................................................... 83 2.2.3. b) 64-bites címzési lehetőség .................................................................... 84 2.2.4. c) Új utasítások, amelyek támogatják az OpenCL és DirectCompute API-kat

84 2.2.5. d) A predikáció teljeskőrű támogatása [51] ............................................... 84 2.2.6. e) A 32- és 64-bites lebegőpontos feldolgozás teljeskörű IEEE 754-3008

támogatása ........................................................................................................... 85 2.2.7. A Fermi GPGPU-kra történő programfejlesztések megkönnyítése [11] ... 85

3. A Fermi mikroarchitektúrájának főbb újításai és továbbfejlesztései .................................. 85 3.1. Főbb újítások ......................................................................................................... 85 3.2. Főbb továbbfejlesztések ......................................................................................... 85 3.3. Főbb architekturális újdonságok a Fermiben ......................................................... 85

3.3.1. a) Párhuzamos kernel futtatás [52], [18] ................................................... 86 3.3.2. b) Valódi kétszintű cache hierarchia [11] .................................................. 86 3.3.3. c) SM-enként konfigurálható osztott memória és L1 cache [11] .............. 87 3.3.4. d) ECC támogatás [11] .............................................................................. 88

3.4. A Fermi főbb architektúrális továbbfejlesztései .................................................... 89 3.4.1. a) Jelentősen megnövelt FP64 teljesítmény .............................................. 89

Page 26: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k

4 Created by XMLmind XSL-FO Converter.

3.5. Aritmetikai műveletek átviteli sebessége óraciklusonként és SM-enként [13] ...... 89 3.5.1. b) Jelentősen csökkentett kontextus váltási idők [11] ............................... 89 3.5.2. c) 10-20-szorosára felgyorsított atomi memória műveletek [11] .............. 90

4. A Fermi GF100 mikroarchitektúrája .................................................................................. 90 4.1. A Fermi GF100 felépítése [18], [11] ..................................................................... 90 4.2. A Fermi GT100 magasszintű mikroarchitektúrája ................................................. 90 4.3. Az Nvidia GPGPU-k magasszintű mikroarchitektúrájának fejlődése [52] ............ 91 4.4. Cuda GF100 SM felépítése [19] ............................................................................ 92 4.5. Az Nvidia GPGPU-iban található magok (SM) fejlődése - 1 ................................ 92 4.6. Az Nvidia GPGPU-iban található magok (SM) fejlődése - 2 ................................ 94 4.7. A Fermi GF100 GPGPU felépítése és működése .................................................. 95

4.7.1. A Cuda GF100 SM felépítése [19] ............................................................ 95 4.7.2. Egy ALU („CUDA mag”) ......................................................................... 96

4.8. SIMT végrehajtás elve soros kernel végrehajtás esetén ......................................... 97 4.9. A Fermi GF100 GPGPU működési elve ................................................................ 97 4.10. Feladat ütemezés alfeladatai ................................................................................ 97 4.11. Kernelek ütemezése az SM-ekre [25], [18] ......................................................... 98 4.12. Azonos kernelhez tartozó szálblokkok SM-hez rendelése ................................... 98 4.13. A CUDA szál blokkok fogalma és jellemzői [53] ............................................... 99 4.14. Szál blokkok warp-okká történő szegmentálása [59] ........................................ 100 4.15. Warpok ütemezése végrehajtásra az SM-ekre ................................................... 101 4.16. A Fermi GF100 mikroarchitektúra blokk diagrammja és működésének leírása . 101 4.17. Feltételezett működési elv - 1 ............................................................................ 103 4.18. Feltételezett működési elv - 2 ............................................................................ 104 4.19. Feltételezett működési elv - 3 ............................................................................ 105 4.20. Példa: Aritmetikai műveletek kibocsájtási sebessége (művelet/órajel) SM-enként [13]

107 4.21. A Fermi GF100 SM warp ütemezési politikája - 1 ............................................ 108 4.22. A Fermi GF100 SM warp ütemezési politikája - 2 ............................................ 109 4.23. A Fermi GF100 maximális teljesítményének becslése - 1 ................................. 112 4.24. A Fermi GF100 maximális teljesítményének becslése - 2 ................................. 114

5. A Fermi GF104 mikroarchitektúrája ................................................................................ 116 5.1. SM-enként rendelkezésre álló feldolgozó egységek a GF104 és a GF100 esetében 117 5.2. A GF 104/114 aritmetikai műveletvégzési sebessége (művelet/óraciklus) SM-enként [13]

...................................................................................................................................... 118 5.3. Warp kibocsájtás a Fermi GF104-ben .................................................................. 118 5.4. A Fermi GF104 alapú GTX 460-as kártya maximális számítási teljesítmény adatai 119

6. A Fermi GF110 mikroarchitektúrája ................................................................................ 120 6.1. A Fermi GF110 mikroarchitektúrája [64] ............................................................. 120 6.2. A Fermi GF110 felépítése [65] ............................................................................ 120 6.3. A Fermi négy alcsaládjának magjait (SM egységeit) ábrázoló blokkdiagramm [66] 121 6.4. A GF 100/110 aritmetikai műveletvégzési sebessége (művelet/óraciklus) SM-enként [13]

...................................................................................................................................... 122 7. A Fermi GF114 mikroarchitektúrája ................................................................................ 123

7.1. A Fermi GF114 magjának felépítése a GTX 560-as kártyában [67] ................... 123 7.2. A Fermi GF114 mikroarchitektúrája ................................................................... 124 7.3. A Fermi négy alcsaládjának magjait (SM egységeit) ábrázoló blokkdiagramm [66] 125 7.4. A GF 104/114 aritmetikai műveletvégzési sebessége (művelet/óraciklus) SM-enként [13]

...................................................................................................................................... 125 5. Az Nvidia Kepler családhoz tartozó magok és kártyák ............................................................. 127

1. Az Nvidia Kepler családjának áttekintése ........................................................................ 127 1.1. A Kepler alcsaládjai ............................................................................................. 127 1.2. A GK104 Kepler mag [76] .................................................................................. 127 1.3. A GK110 Kepler mag [70] .................................................................................. 128 1.4. Az Nvidia Kepler GK104 és GK110 magjainak főbb tulajdonságai [70] ............ 128

2. A Kepler PTX 3.x főbb újításai ........................................................................................ 129 3. A Kepler mikroarchitektúrájának főbb újításai ................................................................ 129

3.1. a) Dinamikus párhuzamosság [70] ...................................................................... 129 3.1.1. A Kepler GPU-kban használt dinamikus párhuzamosság elve ............... 130 3.1.2. Dinamikus párhuzamosság előnyei [70] ................................................. 130

Page 27: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k

5 Created by XMLmind XSL-FO Converter.

3.2. b) A Hyper-Q ütemezési mechanizmus ............................................................... 130 3.2.1. A Hyper-Q ütemező mechanizmus lehetséges gyorsító hatása ............... 135

3.3. c) Grid Management Unit .................................................................................... 136 3.4. d) A GPU Direct .................................................................................................. 136 3.5. A Kepler mikroarchitektúrájának főbb továbbfejlesztései ................................... 137

3.5.1. a) A feldolgozó egységek működési frekvenciájának (shader frequency)

lecsökkentése a mag frekvenciájára - 1 ............................................................. 138 3.5.2. a) A feldolgozó egységek működési frekvenciájának (shader frequency)

lecsökkentése a mag frekvenciájára - 2 ............................................................. 138 3.5.3. a) A feldolgozó egységek működési frekvenciájának (shader frequency)

lecsökkentése a mag frekvenciájára - 3 ............................................................. 139 3.5.4. a) A feldolgozó egységek működési frekvenciájának (shader frequency)

lecsökkentése a mag frekvenciájára - 4 ............................................................. 139 3.5.5. A Fermi és Kepler feldolgozó egységei lapkaméretének és energia fogyasztásának

összehasonlítása [76] ......................................................................................... 139 3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek

szolgáltatott kulcsszavak (compiler hints) segítségével .................................... 141 3.5.7. c) SMX-enként négyszeres warp ütemező bevezetése ............................ 141 3.5.8. Rendelkezésre álló számítási erőforrások a Kepler SMX és a Fermi SM esetében

............................................................................................................................ 142 3.5.9. d) A szálanként elérhető regiszterek számának megnégyszerezése ........ 143 3.5.10. A Kepler magokban bevezetett szálanként elérhető regiszterszám

négyszerezésének hatása ................................................................................... 143 3.5.11. e) Egy általános célra használható 48 KB-os, csak olvasható adat gyorsítótár

bevezetése ......................................................................................................... 143 3.5.12. f) Az L2 cache méret és sávszélesség megduplázása a Fermihez képest 144

4. Az Nvidia GK104 Kepler magja, és a hozzá tartozó kártyák ........................................... 144 4.1. A Kepler alcsaládjai ............................................................................................. 144 4.2. GK104 Kepler mag [76] ...................................................................................... 145 4.3. Az Nvidia GK104 mag lapkájának képe [78] ...................................................... 145 4.4. A Kepler GK104 mag SMX-ének blokkdiagrammja [76] ................................... 146 4.5. A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP32 és FP64 teljesítménye

...................................................................................................................................... 147 4.5.1. a) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP32

teljesítménye - 1 ................................................................................................ 147 4.5.2. a) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP32

teljesítménye - 2 [70] ........................................................................................ 147 4.5.3. a) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP32

teljesítménye - 3 ................................................................................................ 148 4.5.4. b) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP64

teljesítménye - 1 ................................................................................................ 148 4.5.5. b) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP64

teljesítménye - 2 [70] ........................................................................................ 149 4.5.6. b) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP64

teljesítménye - 3 ................................................................................................ 149 5. Az Nvidia GK110 Kepler magja, és a hozzá tartozó kártyák ........................................... 149

5.1. A Kepler alcsaládjai ............................................................................................. 149 5.2. A GK110 mag ...................................................................................................... 150 5.3. A GK110 Kepler mag [70] .................................................................................. 150

5.3.1. Az Nvidia Kepler GK110 magjának fotója [70] ..................................... 150 5.3.2. Az Nvidia Kepler GK110 magjának felépítése [79] ............................... 151 5.3.3. Az Nvidia GK110 és GK104 magjainak összehasonlítása [79] .............. 152 5.3.4. A Kepler GK110 SMX-ének blokkdiagrammja [70] .............................. 153 5.3.5. a) A GK110 alapú GeForce GTX Titan grafikus kártya maximális FP32

teljesítménye ..................................................................................................... 154 5.3.6. b) A GK110 alapú GeForce GTX Titan grafikus kártya maximális FP64

teljesítménye ..................................................................................................... 154 6. Az Nvidia mikroarchitektúráinak fejlődése ..................................................................... 155

6.1. a) Az Nvidia Fermi előtti GPGPU-inak FP32 warp kibocsájtási hatékonysága .. 155 6.2. b) Az Nvidia Fermi és Kepler GPGPU-inak FP32 warp kibocsájtási hatékonysága 155

Page 28: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k

6 Created by XMLmind XSL-FO Converter.

6.3. c) Az Nvidia Fermi előtti GPGPU-inak FP64 teljesítmény növekedése ............. 156 6.4. d) Az Nvidia Tesla GPGPU-inak FP64 teljesítmény növekedése ....................... 156

6. Az AMD heterogén rendszerarchitektúrája ............................................................................... 158 1. A HSA elve ...................................................................................................................... 158

1.1. A HSA elv első nyivános bemutatása (6/2011) [84], [85] ................................... 158 1.2. A HSA (Heterogeneous Systems Architecture) céljai ......................................... 158

1.2.1. AMD’s view of the evolution path to heterogeneous computing (6/2011) [84]

159 2. A HSA célkitűzései [85], [87] .......................................................................................... 159

2.1. a) A CPU és a GPU számára közös címteret biztosító memória model [87] ....... 160 2.2. b) Felhasználói szintű parancs várakozósor [87] ................................................. 160 2.3. c) A HAS IL virtuális ISA (HSA köztes réteg - HSA Intermediate Layer) [87]. [88] 160 2.4. d) Az alkalmazásfeldolgozás modellje [88] ......................................................... 160 2.5. Az alkalmazásfeldolgozás elve a HSA-ban [87] .................................................. 161 2.6. A futtatási fázis [87] ............................................................................................ 162 2.7. Heterogeneous Sytem Architecture Foundation (HSAF - Heterogén Rendszer architektúra

alapítvány) .................................................................................................................. 164 2.8. Az AMD útiterve a HSA implementációjára [90] ............................................... 164 2.9. Az AMD útiterve a HSA implementációjára - részletezés [85] ........................... 165

7. Az AMD Southern Islands családhoz tartozó magok és kártyák ............................................... 166 1. Az AMD Southern Islands családjának áttekintése .......................................................... 166

1.1. Az AMD útiterve a HSA implementációjára (Financial Analyst Day 2012 február) [90]

166 1.2. Az AMD új GPU mikroarchitektúrája: a Graphics Core Next (GCN) Következő Grafikus

Mag) ........................................................................................................................... 166 1.3. A GCN mikroarchitektúra bejelentése és megvalósítása ..................................... 167 1.4. Az AMD útiterve, mely a GCN mikroarchitektúra megjelenését jelzi a Southern Islands

grafikai családban (2012 február) [94] ....................................................................... 167 2. A Southern Islands mikroarchitektúra főbb újításai ......................................................... 167

2.1. VLIW4 alapú GPU-k helyett SIMD alapú GPU bevezetése ............................... 167 2.1.1. Az ATI (melyet AMD 2006-ban felvásárolt) és az AMD GPU-k

mikroarchitektúra fejlődésének főbb állomásai [95] ......................................... 168 2.1.2. VLIW alapú ALU-k használata GPU-kban ............................................. 168 2.1.3. VLIW-alapú ALU-k ................................................................................ 169 2.1.4. Hullámfront sorozat átkódolása VLIW4 utasításokká [96] ..................... 169 2.1.5. Hullámfrontok ütemezése VLIW4 kódolást feltételezve [96] ................. 170 2.1.6. Grafikus feldolgozás és VLIW alapú ALU-k .......................................... 171 2.1.7. Az AMD motivációja a korábbi GPU-kban használt VLIW alapú ALU-k

használatára ....................................................................................................... 171 2.1.8. Feldolgozó egységek (EU) száma Nvidia és AMD GPU-k esetében ...... 172 2.1.9. Az AMD motivációja első GPU-iban VLIW5 alapú ALU-k használatára [97]

172 2.1.10. Az AMD VILW5 ALU-jának kialakítása .............................................. 172 2.1.11. A továbbfejlesztett VLIW5 ALU bevezetése ........................................ 174 2.1.12. A VLIW4 bevezetése a továbbfejlesztett VLIW5 kialakítás helyett - 1 174 2.1.13. A VLIW4 bevezetése a továbbfejlesztett VLIW5 kialakítás helyett - 2 174 2.1.14. Az AMD továbbfejlesztett VLIW5 és VLIW4 megvalósításainak

összehasonlítása [17] ......................................................................................... 175 2.1.15. A numerikus számítások fontosságának növekedése és ezzel összefüggésben a

GCN microarchitektúra bevezetése ................................................................... 177 2.1.16. A VLIW4 alapú ALU-k leváltása SIMD alapú GCN architektúrájú ALU-kra

[91] .................................................................................................................... 177 2.2. Az AMD ZeroCore technológiája [49] ................................................................ 177

2.2.1. A ZeroCore technológia segítségével elérhető passzív állapotú energia fogyasztás

[104] .................................................................................................................. 178 2.2.2. Az AMD PowerTune technológiája ........................................................ 178 2.2.3. A Northern Islands családban bevezetett PowerTune technológia (HD

6900/Cayman), 2010 december) [106] .............................................................. 179 2.2.4. A PowerTune technológia használatának előnye [105] .......................... 179

3. Az AMD Southern Islands kártyacsaládja ....................................................................... 180

Page 29: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k

7 Created by XMLmind XSL-FO Converter.

3.1. A Southern Islands család áttekintése .................................................................. 180 3.1.1. Az AMD GCN bejelentése és megvalósítása .......................................... 180 3.1.2. A Southern Islands család főbb jellemzői ............................................... 181 3.1.3. Southern Islands család alcsaládjai - 1 [107] .......................................... 181 3.1.4. A Southern Islands család alcsaládjai - 2 [108] ....................................... 182 3.1.5. Az AMD és Nvidia grafikus magjai lapkaméreteinek összehasonlítása [95] 182 3.1.6. AMD GCN bejelentése és megvalósítása ............................................... 183

3.2. A Radeon HD7970 grafikus kártya Tahiti XT magjának mikroarchitektúrája .... 183 3.2.1. A Tahiti XT mag mikroarchitektúrájának áttekintése [95] ..................... 183 3.2.2. A 7950 (Tahiti Pro) és a 7970 (Tahiti XT) magokat használó kártyák közötti

különbségek ...................................................................................................... 184 3.2.3. A számítási egységek (CU - Compute Unit) architekturális áttekintése -

egyszerűsített blokkdiagramm [95] ................................................................... 185 3.2.4. Egy számítási egység (CU) részletes blokkdiagrammja [108] ................ 185 3.2.5. Egy számítási egység (CU) fő egységei .................................................. 185 3.2.6. A CU négy 16-széles SIMD egysége [110] (nagymértékben egyszerűsített leírás)

............................................................................................................................ 186 3.2.7. A CU skalár egysége [110] ..................................................................... 186 3.2.8. A HD 7970 (Tahiti XT) grafikai kártya maximális FP32 és FP64 teljesítménye

186 3.2.9. A HD 7970 (Tahiti XT) cache hierarchiája [95] ..................................... 187 3.2.10. CPU-nkénti és GPU-nkénti elérhető tárhelyek a HD 7970-ben (Tahiti XT) [110]

............................................................................................................................ 187 3.2.11. A HD 7970 (Tahiti XT) magban található memóriák méretei, valamint azok

olvasási sebessége [16] ..................................................................................... 188 3.3. Működési elvük (Ismétlés a 3.2-es fejezetből) .................................................... 189

3.3.1. Számítási feladatok ................................................................................. 189 3.3.2. Munkaelemek .......................................................................................... 190 3.3.3. A kernel ................................................................................................... 191 3.3.4. Munkacsoportok ...................................................................................... 191 3.3.5. Hullámfrontok - 1 .................................................................................... 192 3.3.6. Hullámfrontok - 2 .................................................................................... 192 3.3.7. Működési elv ........................................................................................... 193 3.3.8. Számítási feladatok elindítása a GPU-n .................................................. 193 3.3.9. Számítási feladatok végrehajtása - 1 ....................................................... 193 3.3.10. Számítási feladatok végrehajtása - 2 ..................................................... 194 3.3.11. Számítási feladatok végrehajtása - 3 ..................................................... 194

3.4. A HD 7970 (Tahiti XT) teljesítmény adatai és fogyasztása [110] ....................... 194 3.4.1. a) A kártya teljesítménye játékokban ...................................................... 195 3.4.2. a) Nagy teljesítményű grafikus kártyák teljesítménye játékokban - 1 [50] 195 3.4.3. a) Nagy teljesítményű grafikus kártyák teljesítménye játékokban - 2 [50] 195 3.4.4. b) Nagy teljesítményű grafikus kártyák teljesítménye számítási feladatokon mérve

[50] .................................................................................................................... 196 3.4.5. c) Terhelés alatti energia fogyasztás (teljes terhelésen) [50] ................... 197 3.4.6. d) Üresjárati fogyasztás [50] ................................................................... 198

8. Az AMD Sea Islands családja ................................................................................................... 200 1. A Sea Islands család helye az AMD 2013-as útitervében [111] ...................................... 200 2. A Sea Islands család fő jellemzői ..................................................................................... 200 3. Az AMD 2. generációs GCN-jének, a Sea Islands családnak a tervezett bevezetése ...... 201 4. A HD 8950/70 grafikus kártyák fő paraméterei ............................................................... 201

9. Kitekintés ................................................................................................................................... 202 1. Nvidia útiterve 2014-re és tovább .................................................................................... 202

1.1. A Maxwell CPU + GPU ...................................................................................... 202 1.2. A Volta CPU + GPU ........................................................................................... 203 1.3. Volta processzor rétegezett DRAM-mal [113] .................................................... 203

2. AMD grafikai útiterve 2013-ra ........................................................................................ 203 3. Az AMD asztali gépekbe szánt grafikai kártyáinak 2013-as útiterve ............................... 204 4. Az Intel Xeon Phi családja ............................................................................................... 204

4.1. A Knights Ferry protípusa ................................................................................... 205

Page 30: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k

8 Created by XMLmind XSL-FO Converter.

4.2. Az MIC elnevezés módosítása Xeon Phi-re, és a nyílt forráskódú szoftverek támogatása

205 4.3. A Knights Corner processzor ............................................................................... 206 4.4. A Xeon Phi család főbb jellemzői [120] .............................................................. 206 4.5. A Xeon Phi társprocesszor család elsőként megjelenő tagjai és főbb jellemzőik [121]

207 4.6. A Knights Corner (KCN) DPA felépítése [120] .................................................. 208 4.7. A Knights Corner mikroarchitektúrája [120] ....................................................... 208 4.8. A lapka dupla gyűrűs összeköttetéseinek kialakítása [122] ................................. 209 4.9. A Knights Corner magjának blokk diagrammja [120] ......................................... 209 4.10. A vektor feldolgozó egység blokkvázlata és futószalag alapú működése [120] 210 4.11. A Xeon Phi társprocesszor rendszer-architektúrája [122] ................................. 210 4.12. The Xeon Phi 5110P társprocesszor [124] ......................................................... 211 4.13. A Xeon Phi társprocesszor nyáklap (hátoldal) [122] ......................................... 212 4.14. Az aktív hűtéssel ellátott Xeon Phi 3100 szerelési ábrája [122] ........................ 212 4.15. Az Intel többmagos, sokmagos és cluster architektúráinak közös fejlesztési platformja

[125] ........................................................................................................................... 213 4.16. Az Intel Knight Corner és a versenytársai teljesítmény hatékonyságának

összehasonlítása [120] ................................................................................................ 213 4.17. A Xeon Phi 5110P, SE10P/X és a 2-processzoros Intel Xeon szerver maximális

teljesítményének összehasonlítása [126] .................................................................... 214 4.18. Xeon 5110P és egy 2-processzoros Sandy Bridge alapú Xeon szerver teljesítményének

[126] ........................................................................................................................... 214 4.19. A Xeon Phi 5110P sebességének összehasonlítása egy 2-processzoros Xeon szerverrel

215 4.20. Az Intel Xeon Phi családjának útiterve [127] .................................................... 215 4.21. Assessing the peak FP64 performance of the Knights Corner coprocessor with that of

Nvidia’s and AMD’s recent devices ........................................................................... 216 4.22. a) Intel Knights Corner családjának FP64 teljesítménye [126] ......................... 216 4.23. b) Az Nvidia Tesla GPGPU-inak FP64 teljesítménye ....................................... 217 4.24. c) AMD csúcskategóriás GPU-inak FP64 teljesítménye ................................... 218

10. Hivatkozások ........................................................................................................................... 219

Page 31: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

ix Created by XMLmind XSL-FO Converter.

Cél

A GPGPU-k architektúrájának és működési elvének bemutatása, valamint az aktuális GPGPU családok

működésének ismertetése.

Megjegyzések

1. A közel 500 diából nagyjából 100 egy korábban, a TÁMOP-4.1.2-08/2/A/KMR-2009-0053 keretében

kidolgozott tananyagból származik.

2. Felhívjuk a figyelmet arra, hogy a GPGPU-k programozási kérdéseivel, hatékony használatával, valamint a

rendelkezésre álló fejlesztési környezetekkel ugyanezen TÁMOP pályázat keretében kidolgozott Dr. Szénási

Sándor: GPGPU-k programozása című tananyag foglalkozik.

Page 32: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

10 Created by XMLmind XSL-FO Converter.

1. fejezet - Bevezetés a GPGPU-kba

1. Objektumok ábrázolása háromszögekkel

1.1. ábra -

A csúcspontok leírásával, melyek egyrészt

• három térbeli koordinátával írhatók le és

• tartalmaznak olyan további információkat is, melyek a képalkotáshoz szükségesek, mint a

• szín

• textúra

• tükröződési tulajdonságok

• stb.

Példa: Egy delfin hárömszög alapú ábrázolása [1]

1.2. ábra -

Page 33: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés a GPGPU-kba

11 Created by XMLmind XSL-FO Converter.

1.1. GPU-k shadereinek főbb típusai

1.3. ábra -

1.4. ábra - Képpont/csúcs shader modellek (SM) támogatottsága az egymást követő

DirectX verziókban és a Microsoft operációs rendszerekben [2], [3]

Page 34: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés a GPGPU-kba

12 Created by XMLmind XSL-FO Converter.

2. Él- és csúcs shader modellek funkcióinak egybeolvadása

A korai shader modellek (2-es és 3-as verziók ) különböző pontossági igénynek tettek eleget, ebből fakadóan

különböző adattípusokat, regiszter készleteket és utasítás készleteket használtak.

Ezeket a modelleket a 4-es shader modell integrálta.

Shader model 2 [4]

• Eltérő pontossági igények

Eltérő adattípusok

• Csúcs shader: FP32 (koordináták)

• Képpont shader: FX24 (3 szín x 8)

• Eltérő utasítások

• Eltérő felhasználható erőforrások (pl. regiszterek)

Shader model 3 [4]

• Egységes pontossági igény mindkét shader esetén (FP32)

részpontosság megadásának lehetősége (FP16 vagy FP24) a shader kódjának módosításával

• Eltérő utasítások

• Eltérő rendelkezésre álló erőforrások (pl. regiszterek)

Shader model 4 (a DirectX 10 vezette be) [5]

• Egységes pontossági igény mindkét shader esetén (FP32)

Page 35: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés a GPGPU-kba

13 Created by XMLmind XSL-FO Converter.

új adatformátumok használatának lehetőségével.

• Egységes utasítás készlet.

• Egységes felhasználható erőforrások (pl. átmeneti és állandó regiszterek).

SM4 előtti GPU-k shader architektúrái

SM4 előtti GPU-k (DirectX 10):

eltérő csúcs és képpont egységekkel rendelkeztek, eltérő funkciókkal.

A külön csúcs és képpont shaderek használatának hátrányai

• A hardver implementáció nem hatékony

• A csúcs- és képpont shaderek gyakran ellentétes terhelési mintával rendelkeznek [3]).

1.5. ábra -

1.6. ábra - Az egységesített shader architektúra alapelve [6]

Page 36: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés a GPGPU-kba

14 Created by XMLmind XSL-FO Converter.

1.7. ábra -

3. Nvidia GPU-k és Intel P4 ill. Core2 CPU-k FP32/FP64 teljesítményének összehasonlítása [7]

1.8. ábra -

Page 37: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés a GPGPU-kba

15 Created by XMLmind XSL-FO Converter.

4. AMD GPU-k csúcs FP32 teljesítménye [8]

1.9. ábra -

Page 38: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés a GPGPU-kba

16 Created by XMLmind XSL-FO Converter.

5. GPU-k FP32 feldolgozási teljesítményének fejlődése [9]

1.10. ábra -

6. Nvidia GPU-k és Intel P4, Core2 CPU-k sávszélességének fejlődése [7]

Page 39: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés a GPGPU-kba

17 Created by XMLmind XSL-FO Converter.

1.11. ábra -

1.12. ábra - GPU és CPU lapkafelülete k kihasználtságának összehasonlítása [10]

• A vezérlés kevesebb helyet foglal, mivel a GPGPU-k egyszerűbb vezérlést használnak (minden ALU-n

azonos utasítást hajt végre).

• A cache kevesebb helyet foglal el, mivel a GPGPU-k támogatják a masszív többszálúságot, és ez a

technológia elrejti a hosszú várakozási időket olyan műveleteknél, mint például a cache hiány esetén

szükségessé váló memória hozzáférés.

7. CPU-k és GPU-k főbb jellemzőinek összevetése [12]

1.13. ábra -

Page 40: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés a GPGPU-kba

18 Created by XMLmind XSL-FO Converter.

Page 41: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

19 Created by XMLmind XSL-FO Converter.

2. fejezet - A GPGPU modell virtuális gép elve

1. GPGPU-k virtuális gép modellje

1.1. GPGPU-k virtuális gép modellje

A GPGPU-kra történő program fejlesztés a virtuális gép elven alapszik, az alábbi ábra szerint.

2.1. ábra -

1.2. Pseudo assembly kód hordozhatóságának előnyei

• A lefordított pseudo ISA kód (PTX / IL kód) független marad a tényleges GPGPU hardver megvalósításától,

vagyis használható az egymást követő GPGPU családokban is.

Az objektum kód előre kompatibilitása (GPGPU kód, pl. CUBIN kód) biztosított azonban általában csak a

főverziókon belül (pl. 1.x vagy 2.x).

• Amennyiben a PTX/IL fájl olyan GPGPU-ra kerül lefordításra, ami egy adott funkcióval nem rendelkezik,

akkor a hardverben nem implementált eljárásokat emulációval kell megoldani. Ez lelassítja a végrehajtást.

• A pseudo assembly kód hordozhatósága (Nvidia PTX vagy AMD IL) nagyon előnyös a GPGPU technológiák

jelenleg tapasztalható gyors fejlődése esetében, mivel így a kód újrahasznosítása alacsonyabb költséggel

valósítható meg.

• A kód újrahasznosítás költségét a GPGPU generációk közötti váltás (például a GT200 alapú eszközről GF100

vagy GF110 alapú eszközre való áttérés) vagy a szoftveres környezet leváltása okozza (például CUDA 1.x

SDK-ról CUDA 2.x-re vagy CUDA 3.x SDK-ról CUDA 4.x SDK-ra).

1.3. Az alkalmazásfejlesztés fázisai - 1

A használt virtuális gép elv következtében az alkalmazásfejlesztés egy kétfázisú eljárássá válik.

• 1. fázis: A HLL alkalmazás lefordítása pseudo assembly kódra

Page 42: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

20 Created by XMLmind XSL-FO Converter.

2.2. ábra -

A lefordított pseudo ISA kód (PTX code/IL code) az aktuális hardver megvalósítástól független marad, vagyis

eltérő GPGPU családok között hordozható.

1.4. Az alkalmazás végrehajtásának fázisai - 2

• 2. fázis: A pseudo assembly kód lefordítása GPU specifikus bináris kódra

2.3. ábra -

Az objektum kód (GPGPU kód, pl. a CUBIN fájl) előre hordozható, viszont ez az előre kompatibilitás általában

csak azonos főverziókon belül (például az Nvidia 1.x, vagy a 2.x) áll fent.

1.5. Alkalmazások leírása eltérő absztrakciós szinteken

• Az alkalmazások leírhatóak különböző absztrakciós szinteken a megfelelő nyelvi eszközök

(fejlesztőkészletek) használatával, amint azt a lenti ábra szemlélteti.

2.4. ábra -

Page 43: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

21 Created by XMLmind XSL-FO Converter.

A számítási eszközök is specifikálhatóak különböző absztrakciós szinteken (ld. később).

Megjegyzés

Az Nvidia és az AMD GPGPU-k virtuális gép modellje hasonlít a Java nyelv által használt virtuális gép

modellre, hiszen

• a Java nyelvhez tartozik egy pseudo ISA definició, amit Java bytekódnak hívnak.

• A Java nyelven írt alkalmazások először a platform független Java bytekódra fordulnak le.

• A Java bytekódot ezt követően vagy interpretálja a számítógépre feltelepített Java Runtime Environment

(JRE), vagy futásidőben objektum kódra fordítja le a Just-In-Time (JIT) fordító.

2. GPGPU-kon alapuló masszívan adatpárhuzamos számítási modell

2.1. GPGPU-k specifikációja különböző absztrakciós szinteken

A GPGPU-kat két szinten szokás specifikálni:

• virtuális gép szinten (pseudo ISA szint, pseudo assembly szint, köztes szint), valamint

• az objektum kód szintjén (GPGPU ISA szint).

2.5. ábra -

Page 44: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

22 Created by XMLmind XSL-FO Converter.

A tananyag további részében a GPGPU-kat a virtuális gép szintjén tárgyaljuk, mivel ez maradandóbb

ismereteket nyújt a GPGPU-król, mint a dinamikusan változó hardver specifikációs szint (tényleges ISA szint).

2.2. GPGPU-k virtuális gép szintű specifikációja

Ez két összetartozó elv leírását igényli, ezek

• egy GPGPU alapú masszívan párhuzamos számítási modell és

• a hozzá tartozó GPGPU pseudo ISA.

A GPGPU alapú masszívan adatpárhuzamos számítási modell képezi a pseudo ISA alapját a vonatkozó

feldolgozási környezet és a működési elvek specifikálásával.

A következőkben előbb a GPGPU alapú masszívan adapárhuzamos számítási modellel foglalkozunk, majd ezt

követően tárgyaljuk a GPGPU-k pseudo ISA szintű leírását a 2.3 fejezetben.

2.3. Az GPGPU alapú masszívan párhuzamos adatfeldolgozási modell

A GPGPU alapú masszívan párhuzamos számítási modell tárgyalását nagyban megnehezíti az a tény, hogy

jelenleg nem létezik egy általánosan elfogadott modell, mivel

• mindkét piacvezető GPGPU gyártó (Nvidia és AMD) eltérő GPGPU alapú masszívan párhuzamos számítási

modellt használ és

• ezen túlmenően számítási modelljeiket folyamatosan fejlesztik, részben azért, hogy kövessék a HLL

környezet fejlődését (pl. az egymást követő CUDA vagy OpenCL verziókat), részben pedig azért, hogy az új

GPGPUk hardver jellemzőit támogassák.

2.4. A GPGPU alapú masszívan párhuzamos számítási modellek térnyerése

Mindkét, a GPGPU-k területén vezető cég (Nvidia, AMD) kidolgozott és közzétett GPGPU alapú masszívan

párhuzamos számítási modelleket, az alábbiak szerint

• A SIMT (Single Instruction Multiple Threads) elnevezést az Nvidia vezette be 2006-ban új G80-as GPGPU-

juk megjelenésével egyidőben.

Az Nvidia ezt az elnevezést egy olyan masszívan adatpárhuzamos számítási modellként értelmezte, melynél a

GPGPU egyidejűleg nagyszámú szálat hajt végre [11].

Page 45: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

23 Created by XMLmind XSL-FO Converter.

• 2007-ben az AMD is bevezetett egy hasonló masszívan adatpárhuzamos számítási modellt, melyet ATI

Stream Technology-nak nevezett el.

Később, 2010 októberében az AMD ezt az elnevezést AMD Accelerated Parallel Processing Technology

(APP) elnevezésre módosította a HD68xx Northern Islands) grafikus lapkacsaládja bevezetésével

egyidejűleg.

Valójában az AMD számítási modelljének átnevezését elsődlegesen az indokolta, hogy az AMD 2009-ben az

eredeti Brook+HLL programozási környezetet felváltotta az OpenCL környezettel a HD58xx (Evergreen)

grafikus lapkacsalád bevezetésével.

• Itt megjegyezzük még, hogy az OpenCL GPGPU alapú masszívan párhuzamos számítási modellje az SPMD

(Single Program Multiple Data) modell elnevezésből származik,amit 2008 decemberében publikáltak.

2.5. A tárgyalt számítási modell kiválasztása

• Mivel nincs alapos indoka annak, hogy az egyik vagy a másik gyártó számítási modelljét preferáljuk, ezért a

GPGPU alapú masszívan adatpárhuzamos számítási modelleket általánosabb formában fogjuk tárgyalni egy

olyan számítási modell bemutatásával, ami tartalmazza mind Nvidia mind AMD számítási modelljeinek főbb

vonásait.

2.6. A használt terminológia kiválasztása

2.6.1. A GPGPU alapú masszívan párhuzamos adatfeldolgozási modellre SIMT (Single instruction Multiple Threads) számítási modell néven hivatkozunk.

• Ezt a választást az indokolja, hogy a SIMT (Single Instruction Multiple Threads - Egy Utasítás Több Szál)

számítási modell elnevezés, (az Nvidia gyakorlatával összhangban), jól kifejezi mind a többszálúságot, mind

pedig a hasonlóságot a SIMD modellel.

Megjegyezzük, hogy az azonos elnevezés dacára a modellt részben másként értelmezzük, mint Nvidia.

2.6.2. A GPGPU alapú masszívan adatpárhuzamos számítási modellel kapcsolatos kifejezések megválasztása

Az Nvidia és AMD a legtöbb esetben eltérő terminológiát használnak a GPGPU számítási modelljeikkel

kapcsolatban.

Továbbá, amikor az AMD leváltotta a Brook+ HLL programozási környezetét OpenCL-re, akkor az általuk

használt terminológiát is teljesen lecserélték.

Ezen túlmenően, a vonatkozó dokumentációk terminológiája sem konzisztens, a terminológia eltérő attól

függően, hogy az adott dokumentáció milyen felhasználói rétegnek szól, mint például hardver, pseudo assembly

fejlesztők vagy magas szintű programozók. Az eltérő célcsoportoknak íródott dokumentációk azonos elveket

eltérő nevekkel látnak el, amint azt az alábbi táblázat bemutatja.

Ebben a diasorban leginkább az OpenCL-hez köthető terminológiákat fogjuk használni, mivel az jelenleg a

leginkább elterjedő programozási környezet.

2.6. ábra - GPGPU-k és adatpárhuzamos gyorsítók terminológiája

Page 46: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

24 Created by XMLmind XSL-FO Converter.

3. A SIMT számítási modell

3.1. A SIMT számítási modell főbb komponensei

A SIMT számítási modell a következő három fő absztrakcióból tevődik össze:

2.7. ábra - A SIMT számítási modell tervezési tere

3.2. A számítási feladat modellje

2.8. ábra -

Page 47: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

25 Created by XMLmind XSL-FO Converter.

3.2.1. A szál modell

2.9. ábra -

3.2.1.1. A grafikai számítási feladat fogalma

A GPU esetében a számítási feladat egy párhuzamos adatfolyamot feldolgozó program (kernel) futtatását jelenti

egy legfeljebb három dimenziós adastruktúrán - vagyis egy N dimenziós tartományon (amit végrehajtási

tartománynak is neveznek) a lenti ábra szerint.

2.10. ábra - Az Ndimenziós tartomány értelmezése [12]

Page 48: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

26 Created by XMLmind XSL-FO Converter.

3.2.1.2. A szál modell

A szál modell egy hierachikus modell, ami a munkaelemeken (work-item), munkacsoportokon (work-group) és

a hullámfrontokon (wavefront) alapul, ezekről lesz szó a következőkben.

3.2.1.3. Munkaelemek

A munkaelemek jelentik a számítás alapegységét, melyeket az adattér egy adott pontjaként értelmezzük.

Egy adott munkaelemre vonatkozó utasítássorozatot szálnak nevezünk.

2.11. ábra - A munkaelem értelmezése ([12] alapján)

Page 49: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

27 Created by XMLmind XSL-FO Converter.

3.2.1.4. Munkacsoportok

A végrehajtási tartományokat (N-dimenziós tartomány) a programozó a hatékony végrehajtás érdekében

munkacsoportokra bontja, melyeket szál blokkoknak (thread block) is nevezünk,

Egy munkacsoportot egy azonosító identifikál, és az egy meghatározott számítási egységen (CU) kerül majd

végrehajtásra.

2.12. ábra - A munkacsoport értelmezése [12]

Page 50: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

28 Created by XMLmind XSL-FO Converter.

Megjegyzés

A munkacsoport terminus technicus különböző dokunentációkban eltérő elnevezésekkel szerepel, mint pl.:

• Szál blokk (Thread blocks) - Nvidia dokumentációkban ill.

• Szál blokk (Thread blocks) (OpenCL előtti kifejezés) vagy

• Munkacsoport (Work Groups, Workgroups) (OpenCL kifejezés) - AMD dokumentációkban.

3.2.1.5. Hullámfrontok - 1

A hatékony végrehajtás érdekében a GPGPU-k a munkacsoportokat hullámfrontokra (warp-okra) bontják,

amelyeknek az elemein az utasítások egyidejűleg (ún. lockstep módban), hajtódnak végre ugyanazon a CU-n.

2.13. ábra - A hullámfrontok értelmezése [12]

Az egyazon munkacsoporthoz tartozó hullámfrontok közösen használhatnak adatokat, és futásuk megfelelő

parancsokkal szinkronizálható, vagyis előírható, az hogy a hullámfrontok a program futásának valamely pontján

bevárják egymást.

3.2.1.6. Hullámfrontok - 2

• A hullámfrontok (wavefront) jelentik azt a legkisebb feladat egységet, melyeknek a a feldolgozó elemeken

történő végrehajtását a CU ütemezi.

• A hullámfrontokat az AMD wavefront-nak nevezi, és warp-nak az Nvidia.

• A hullámfront mérete hardverfüggő.

• Az Nvidia GPGPU-kban a (warp-oknak nevezett) hullámfrontok 32 munkaelemet tartalmaznak.

• Az AMD GPGPU-kban a hullámfrontok mérete különböző;

• A nagyteljesítményű GPGPU kártyák, mint például a Southern Islands termékvonal (HD 7950/70

kártyák) jellemzően 64 méretű hullámfronttal dolgoznak, miközben

• az alacsony teljesítményű kártyák hullámfrontjának mérete 32, 24 vagy akár 16 is lehet.

• Minden hullámfront saját Utasítás számlálóval (Program Counterrel (PC)) rendelkezik, ami a hullámfront

által következőként végrehajtandó utasításra mutat.

Page 51: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

29 Created by XMLmind XSL-FO Converter.

Amikor a hullámfront létrejön, akkor az a PC a program első utasítására fog mutatni.

• A hullámfrontokat a CU a PE-n való futásra ütemezi.

A hullámfrontok a hatékony végrehajtás miatt csoportosított munkaelemek a CU-n.

3.2.2. A kernel modell

2.14. ábra -

3.2.2.1. A kernel modell - 1

A programozó un. kernelekkel írja le a teljes végrehajtási tartományon végrehajtandó utasítások halmazát.

2.15. ábra - A kernel modell értelmezése

A kerneleket HLL szinten specifikálják, és azokat a fordító a virtuális gép szintjére fordítja le.

3.2.2.2. A kernel modell - 2

A kernel a végrehajtási tartományon (N dimenziós tér) lefuttatott utasítások sorozata.

A kernelek utasításai lehetnek

• vektor utasítások, melyek pl. a CU mind a 16 EU-jára vonatkoznak, vagy

Page 52: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

30 Created by XMLmind XSL-FO Converter.

• vektor memória utasítások, melyek adatátvitelt (írást és olvasást) írnak elő a GPU memória és a CU-n

található vektor regiszter fájl között, stb.

Megjegyzés

A kernelek számításorientált adatpárhuzamos programok, a shaderek pedig a GPU-n futtatandó grafika orientált

alkalmazások.

3.2.2.3. A kernel modell - 3

Magasszintű nyelvek, mint az OpenCL vagy a CUDA C lehetővé teszik olyan kernelek definiálását, amelyek

meghíváskor párhuzamosan futnak le n különböző szálon, ellentétben a normál C nyelven írt, egyszer lefutó

hagyományos függvényekkel.

3.2.2.4. Kernelek specifikációja

• A kernelt a következőképp lehet definiálni:

• típus jelző vezeti be (pl. _kernel OpenCL-ben, _global_ CUDA C-ben) majd

• definiálni kell a végrehajtandó utasításokat.

3.2.2.5. Kernelek mintakódjai

A következő mintakódok két vektorösszeadást végző kernelt mutatnak be (a két eredeti vektor az „a/A” és a

„b/B”, az eredmény vektor a „c/C”)

2.16. ábra -

Megjegyzés

Futás közben minden szálat egy egyedi azonosítószám identifikál, ami

• CUDA C esetében int I, a threadIdx változón keresztül érhető el,

• OpenCL esetében pedig int id , amit a beépített get_global_id() függvény ad vissza.

3.3. A platform modellje

2.17. ábra -

Page 53: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

31 Created by XMLmind XSL-FO Converter.

3.3.1. A számítási erőforrások modellje

2.18. ábra -

Az elérhető számítási erőforrásokat virtuális gép szinten specifikálja.

Hierarchikus felépítésű, a lenti ábra szerint.

2.19. ábra - A számítási erőforrások modellje [15]

3.3.1.1. Számítási egységek (Compute Units (CU))

Különböző megvalósításúak lehetnek, pl.:

• 16 VLiW5/VLIW4 ALU az AMD Southern Islands termékvonala előtt vagy

Page 54: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

32 Created by XMLmind XSL-FO Converter.

• 2x16 FX/FP32+16 L/S+4 SFU (Special Functions Unit) EU az Nvidia Fermi100/110 GPU-kban.

A CU tényleges megvalósítása nem része a számítási erőforrások modelljének, mivel az az adott GPGPU mag

mikroarchitektúrájához tartozik.

3.3.1.2. 1. példa : Az AMD Evergreen sorozatába tartozó Cypress mag felépítése [16]

2.20. ábra -

3.3.1.3. Az AMD továbbfejlesztett VLIW5 Feldolgozó elemének (VLIW5 ALU) felépítése [17]

2.21. ábra -

Page 55: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

33 Created by XMLmind XSL-FO Converter.

Továbbfejlesztett VLIW5 kialakítás

RV770 mag/HD4870 kártya, (2008)

Evergreen vonal (RV870 mag/HD5870 kártya), (2009)

Óraciklusonként

• 5 FX32 vagy 5 FP32 művelet, vagy

• 1 FP64 művelet vagy

• 1 transzcendentális + 4 FX/FP 32 művelet

végrehajtására képes.

3.3.1.4. 2. példa: Az Nvidia GF100/GF110 magjainak felépítése a Fermi sorozatban [11], [18]

2.22. ábra -

Page 56: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

34 Created by XMLmind XSL-FO Converter.

3.3.1.5. A GF100 mag CU-jának felépítése [19]

2.23. ábra -

Megjegyzés

Az FX/FP32 EU-kat az Nvidia magnak (core) nevezi.

3.3.1.6. A Compute Unit (számítási egység - CU) különböző megnevezései

Streaming multiprocessor (SM/SMX) (Nvidia),

Page 57: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

35 Created by XMLmind XSL-FO Converter.

Superscalar shader processor, Compute Unit (CU) (AMD),

Wide SIMD processor, CPU core (Intel).

3.3.2. A memória modell

2.24. ábra -

A memória modell megadja a virtuális gép szintjén elérhető összes tárterületet a jellemzőivel együtt, mint pl. a

hozzáférési mód (olvasás, írás), adatszélesség stb.

A memória modell legfontosabb elemei a következők:

2.25. ábra - GPGPU-kon a virtuális gép szintjén elérhető tárterületek

3.3.2.1. b) Az OpenCL memória modelljének bemutatása [15]

2.26. ábra -

Page 58: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

36 Created by XMLmind XSL-FO Converter.

3.3.2.2. Memória tárhelyek hozzáférhetősége a host és a kernel számára az OpenCL-ben [15]

2.27. ábra -

Megjegyzések

1. Az AMD csak a 2008-ban megjelent RV770 alapú HD 4xxx termékvonalban vezette be a helyi memóriát,

amit Local Data Store-nak (Helyi adattárolónak) neveztek.

2. A korábbiakban tárgyalt memória tárhelyeken túl léteznek további, a virtuális gép szintjén meghatározott

tártípusok is, mint például az AMD Global Data Share eleme, ami az RV770 alapú HD 4xxx vonalban jelent

meg 2008-ban.

3. Az egyes tárhelyek maximális méretét a közbülső nyelv vonatkozó utasításainak formátuma határozza meg.

4. Egy adott tárhely tényleges mérete megvalósításfüggő.

5. A hagyományos gyorsítótárak nem láthatóak a virtuális gép szintjén, azok tipikusan transzparensek a program

futása közben.

Mindazonáltal a fejlettebb GPGPU-k lehetővé tesznek explicit cache menedzsmentet is a virtuális gép szintjén,

például előlehívás utasítást biztosítva.

Ilyen esetben a memória modellt ki kell egészíteni a rendelkezésre álló gyorsítótárakkal.

3.3.2.3. Példa 1: Az Nvidia PTX 3.1-ben alkalmazott memória modellje (2012) [20]

(Az állandó memória tárhely bár elérhető, az ábrán nem szerepel)

2.28. ábra -

Page 59: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

37 Created by XMLmind XSL-FO Converter.

3.3.2.4. Az Nvidia PTX 3.1-ben alkalmazott memória modell megvalósítása [20]

2.29. ábra -

3.3.2.5. Az Nvidia memória modellje és a vonatkozó CUDA valamint OpenCL terminológia összevetése [21]

2.30. ábra -

Page 60: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

38 Created by XMLmind XSL-FO Converter.

3.3.2.6. 2. Példa: Az AMD 2.0-ás verziójú IL-je alatt rendelkezésre álló tárhelyek (egyszerűsítve)

2.31. ábra - Az AMD IL v2.0 alatt rendelkezésre álló tárhelyek [22]

Megjegyzés

• A tárhelyek maximális méretét és az utasítás formátumot a köztes nyelv határozza meg.

• A tárhelyek aktuális mérete megvalósításfüggő.

3.3.2.7. Az AMD Cayman grafikus magjának memória modellje (Northern Islands/HD 69xx) [23]

2.32. ábra -

Page 61: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

39 Created by XMLmind XSL-FO Converter.

3.4. A végrehajtási modell

A SIMT számítási modell végrehajtási modelljét az alábbi 5 komponens együtteseként értelmezzük:

2.33. ábra - A végrehajtási modell fő komponensei

3.4.1. A SIMT végrehajtás elve

2.34. ábra - A végrehajtás modell fő fogalmai

A SIMT végrehajtás elve az alábbi három fő komponensből tevődik össze:

• a) masszív többszálúság a végrehajtás közbeni várakoztatások (stalls) elrejtésére

• b) SIMD-jellegű végrehajtás az adat párhuzamosság kihasználására és

• c) zéró-büntetésű többszálúság a hullámfrontok hatékony váltása érdekében.

3.4.1.1. a) Masszív többszálúság

Page 62: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

40 Created by XMLmind XSL-FO Converter.

A hullámfrontok feldolgozásakor a GPGPU hosszú várakozási idővel járó utasításai (mint például a memóriából

történő olvasás) hosszú, 100 óraciklus nagyságrendű várakoztatásokat okoznak.

Ezek a várakoztatások elrejthetőek úgy, hogy a várakozó hullámfront futását az ütemező felfüggeszti és helyére

pedig egy új, futásra kész hullámfrontot allokál.

2.35. ábra - Memóriaolvasás miatti várakozások elrejtését lehetővé tevő hullámfront

ütemezés [24]

A fent leírt működés megvalósítható példáúl úgy, hogy memória olvasás utasítás kiadásakor az ütemező minden

esetben egy másik futtatható hullámfrontra vált át.

Megjegyzés

A fent bemutatott ütemezést durva szemcsézettségű ütemezésnek nevezzük, mivel a hullámfrontok mindaddig

futhatnak, amíg egy esemény nem kényszerítí azokat várakozásra.

Ezzel ellentétben a finom szemcsézettségű ütemezésnél az ütemező minden óraciklusnál új hullámfrontot

jelölhet ki futásra.

Megjegyzés

Ha a rendszerben elegendő számú futatható hullámfront van, akkor masszív többszálúsággal a memória olvasás

miatti várakoztatások hatékonyan elfedhetőek.

Ennek eléréséhez az Nvidia Fermi alapú GPGPU-i CU-nként max. 48 hullámfrontot (warp-ot) képesek kezelni.

Masszív többszálúság esetén a gyorsítótárak iránti igény lecsökken, így a szilícium lapkán a cache által elfoglalt

hely felszabadul, és az a számítási teljesítmény növelésére fordítható, amint azt a lenti ábra szemlélteti.

2.36. ábra - CPUk és GPUk lapkaterületének eltérő kihasználtsága [10]

3.4.1.2. b) SIMD jellegű végrehajtás - 1

Page 63: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

41 Created by XMLmind XSL-FO Converter.

A masszív többszálúság SIMD utasítás végrehajtáson alapul, a használt platform modellnek megfelelően.

2.37. ábra - A használt platform modell [15]

3.4.1.3. A SIMD végrehajtás elve

SIMD végrehajtás esetén a PE-k SIMD regiszter fájlokat használnak, amelyekben adott számú széles regiszter

található (pl. 16 128 vagy 256 bit hosszúságú regiszter).

Egy SIMD utasítás végrehajtásához az egység a SIMD regiszter fájlból betölti a hivatkozott forrás

operandusokat (FX vagy FP adatvektorokat), a PE-k végrehajták az utasítást és visszaírják az eredményvektort a

SIMD regiszter fájl megadott címére (ld. ábra).

2.38. ábra - A SIMD végrehajtás elve

Page 64: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

42 Created by XMLmind XSL-FO Converter.

3.4.1.4. b) SIMD jellegű végrehajtás - 2

Ezzel szemben SIMT feldolgozás esetén minden szál saját regiszter fájllal bír (szálankénti RF). A rendelkezésre

álló PE-k SIMD jelleggel végrehajtják az adott kernel utasítást a tekintett hullámfronton.

A PE-k kiolvassák az aktuális kernel utasításhoz tartozó operandusokat a szálakhoz tartozó regiszter fájlokból,

végrehajtják a kívánt műveletet minden szál esetén majd pedig visszaírják az eredményt a szálakhoz tartozó

regiszter fájlokba (RF).

For each kernel instruction the operands are fetched from the actual Per thread Register Files (RF), the same

operation is performed by all PEs available for the execution of the wavefront and the results are written back

into the actual Per thread Register Files (RF).

2.39. ábra - SIMT végrehajtás elve

3.4.1.5. c) Zéró büntetésű többszálúság (Zero penalty multithreading)

Amennyiben minden szálhoz tartozik egy privát regiszter fájl, ami az adattér kontextusnak nevezett állapotát

nyilvántartja, akkor egy másik hullámfrontra történő váltáskor a kontextus váltás egyszerűen elvégezhető az

aktuális regiszter fájlra mutató pointer átírásával, amint ezt az alábbi ábra szemlélteti.

Ebben az esetben a kontextus váltás nem jár óraciklus veszteséggel.

2.40. ábra - A SIMT végrehajtás elve

Page 65: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

43 Created by XMLmind XSL-FO Converter.

3.4.1.6. A SIMD és a SIMT végrehajtás összevetése

2.41. ábra - A SIMD és a SIMT végrehajtás összevetése

3.4.2. A feladat szétosztása a PE-k felé

2.42. ábra - A végrehajtás modell fő fogalmai

A feladat szétosztása a PE-k felé

a) A programozó munkacsoportokra bontja a végrehajtási tartományt.

b) A globális ütemező a CU-khoz rendeli a munkacsoportokat.

Page 66: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

44 Created by XMLmind XSL-FO Converter.

c) A GPGPU globális útemezője a munkacsoportokat hullámfrontokra (warp-okra) bontja, melyek a SIMT

magok feldolgozó futószalagjaira kerülnek.

d) A Feldolgozó elem (PE) ütemezője a hullámfrontokat (warp-okat) végrehajtásra ütemezi.

Az első három lépés „a feladat szétosztása a PE-k-felé” a számítési modell része, ezzel szemben a negyedik

lépés (d) megvalósításfüggő, vagyis eltérő GPGPU családok azt eltérően hajtják végre a PE tényleges

megvalósításának megfelelően, így ez a lépés nem része a számítási modellnek.

3.4.2.1. a) A végrehajtási tartomány felbontása munkacsoportokra - 1

A programozó a végrehajtási tartományt azonos méretű szeletekre bontja, amelyeket munkacsoportoknak

(work-group) vagy szál blokkoknak (thread block), nevezzük. Ez lesz az az egységnyi feladat, amit a CU-knak

kell végrehajtaniuk.

2.43. ábra - A végrehajtási tartomány felbontása munkacsoportokra

512x512-es méretű végrehajtási tartomány felbontása négy 256x256-os méretű munkacsoporttá.

3.4.2.2. A végrehajtási tartomány felbontása munkacsoportokra - 2

2.44. ábra - A végrehajtási tartomány felbontása munkacsoportokra

• A munkacsoportokat a rendelkezésre álló CU-k párhuzamosan futtatják.

• A végrehajtási tartomány munkacsoportokra történő bontását a programozó vagy a HLL határozza meg, így

az implementáció függő.

3.4.2.3. b) Munkacsoportok hozzárendelése a CU-khoz

A munkacsoportokat a GPGPU/DPA ütemezője rendeli hozzá végrehajtási egységként az egyes CU-khoz.

Page 67: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

45 Created by XMLmind XSL-FO Converter.

3.4.2.4. Példa: Munkacsoportok hozzárendelése a CU-khoz az AMD Cayman GPGPU-kban (Northern Islands család) [16]

2.45. ábra -

3.4.2.5. Soros / párhuzamos kernel feldolgozás a CU-n

Ez a funkció megvalósítás függő és nem része a virtuális gép szinten definiált számítási modellnek, viszont a

végrehajtás hatékonyságát alapvetően befolyásolja, ezért itt röviden foglalkozunk vele.

2.46. ábra -

3.4.2.6. 1. Példa: Soros / párhuzamos kernel feldolgozás az Nvidia GPGPU-kban [25], [18]

• A Gigathread ütemezőnek nevezett globális ütemező jelöli ki a feladatokatt a CU-k számára.

• Az Nvidia Fermi előtti GPGPU generációiban (G80-, G92-, GT200-alapú GPGPU-k) a globális ütemező csak

egyetlen kernelből tudott a CU-khoz munkacsoportot hozzárendelni (soros kernel végrehajtás).

Page 68: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

46 Created by XMLmind XSL-FO Converter.

• Ezzel szemben a Fermi-alapú és a későbbi GPGPU-k globális ütemezője képes legfeljebb 16 kernelt

egyidőben futtatni - de minden CU-n legfeljebb egy kernel futtatható (párhuzamos kernel végrehajtás).

2.47. ábra -

3.4.2.7. 2. Példa: Soros / párhuzamos kernel feldolgozás az AMD GPGPU-kban

• A Cayman alapú rendszerek előtti (Northern Islands család) a GPGPU-k esetében egyetlen kernel futhatott a

GPGPU-n.

Ezekben a rendszerekben a feladat ütemező a munkacsoportokat szétosztja az összes rendelkezésre álló CU-

ra, annak érdekében, hogy a GPGPU minél nagyobb teljesítményt érjen el.

• A Cayman alapú rendszerek (Northern Islands család) (2010) és az azt követő családok viszont már több

kernel egyidejű futását teszik lehetővé a GPGPU-n. Az egyes kernelek ez esetben vagy egy, vagy több CU-n

futhatnak, lehetővé téve ily módon a hardver erőforrások jobb, több párhuzamosságot biztosító

kihasználtságát.

3.4.2.8. 2. Példa: Több kernel egyidejű hozzárendelése a CU-khoz a Cayman alapú magoknál (Northern Islands család)

2.48. ábra -

Page 69: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

47 Created by XMLmind XSL-FO Converter.

3.4.2.9. c) Munkacsoportok hullámfrontokká (warp-okká) történő szegmentálása

A GPGPU ütemezője a munkacsoportokat hullámfrontokká szegmentálja.

A hullámfrontokat ezután a CU egységként ütemezi végrehajtásra.

A munkacsoportok hullámfrontokká történő szegmentálása a számítási modell része, azonban a hullámfrontok

mérete és a szegmentálás mikéntje implementációfüggő, tehát nem része a számítási modellnek.

A hullámfrontok méretével kapcsolatban a 2.3-as fejezetre hivatkozva a következő megállapításokat tehetjük:

• Az Nvidia GPGPU-iban a (warp-nak nevezett) hullámfrontok 32 munka-elemet tartalmaznak.

• Az AMD GPGPU-i eltérő méretű hullámfrontokkal dolgoznak;

• a nagy teljesítményű GPGPU kártyák, amilyen például a Southern Islands család HD 7950/70 modelljei, a

hullámfrontok jellemzően 64 méretűek, míg az

• alacsonyabb teljesítményű kártyák 32, 24, vagy akár 16 munkaegységből álló hullámfrontokkal dolgoznak.

3.4.3. Az adatmegosztás elve

2.49. ábra - A végrehajtás modell fő fogalmai

• A szálak közötti kommunikáció mikéntjét az adatmegosztás elve határozza meg.

• Ez nem egy új keletű elv, hanem a következő példán bemutatott memória használatból következik.

Page 70: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

48 Created by XMLmind XSL-FO Converter.

3.4.3.1. Példa: Adatmegosztás az Nvidia PTX rendszerben

(Csak a fontosabb elemeket ábrázoljuk itt [13] alapján)

2.50. ábra -

Megjegyzések

1. A munkacsoportokat blokkok jelölik az ábrán.

2. Az állandó memória nincs jelölve.

Az adatmegosztás felépítése ugyanilyen, viszont az csak olvasható hozzáférést biztosít.

3.4.4. Az adatfüggő végrehajtás elve

2.51. ábra - A végrehajtás modell fő fogalmai

Page 71: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

49 Created by XMLmind XSL-FO Converter.

SIMT feldolgozás esetén minden szálnak alapvetően ugyanazt a műveletet kell végrehajtania, azonban lehetőség

van a szálak adatfüggő végrehajtására is az alábbiak szerint.

Elágazások esetében a PE egymás után az elágazás mindkét ágát végrehajtja a hullámfront minden elemén,

viszont ténylegesen csak azok a műveletek hajtódnak végre, melyekre a megadott feltétel teljesül (pl. xi > 0).

A következő példa ezt illusztrálja.

3.4.4.1. Példa adatfüggő elágazásfeldolgozásra - 1 [26]

2.52. ábra - Elágazások végrehajtása - 1 [26]

3.4.4.2. Példa adatfüggő elágazásfeldolgozásra - 2 [26]

2.53. ábra - Elágazások végrehajtása - 2 [26]

Page 72: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

50 Created by XMLmind XSL-FO Converter.

Először minden olyan ALU mely azt érzékeli, hogy a megadott feltétel teljesül, végrehajtja a megadott

műveleteket, míg azon ALUk melyeknél a megadott feltétel nem teljesül NOP utasítást hajtanak végre. majd a

CU áttér az elágazás másik ágának a végrehajtására.

3.4.4.3. Példa adatfüggő elágazásfeldolgozásra - 3 [26]

2.54. ábra - Utasítás folyam végrehajtásának folytatása elágazás után [26]

3.4.5. A szinkronizáció elve

2.55. ábra - A végrehajtás modell fő fogalmai

Page 73: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

51 Created by XMLmind XSL-FO Converter.

A GPGPU-k sorompó szinkronizációt (barrier synchronization) használnak, a hullámfront alapú működési

elvüknek megfelelően.

A sorompó szinkronizáció azonban vagv a szál futtatás szinkronizációjára vagy a memória írások és olvasások

szinkronizációjára vonatkozhat, a lenti ábra szerint.

2.56. ábra -

3.4.5.1. Szál végrehajtás sorompó szinkronizációja

Segítségével a munkacsoporton belüli hullámfrontok szinkronizációja oldható meg úgy, hogy egy

munkacsoporton belül minden munkaelemnek el kell érnie ugyanahhoz a szinkronizációs ponthoz (amit a

sorompó szinkronizációs utasítás jelöl ki), mielőtt a futtatás folytatódhat.

Megvalósítása:

• Az Nvidia PTX-ben a „bar” utasítással “bar” instruction [27] vagy

• az AMD IL-ben a “fence thread” utasítással [28].

3.4.5.2. Memória írások és olvasások sorompó szinkronizációja

• Ezzel az utasítással biztosítható az, hogy a memória írási és olvasási műveletek sorrendjét a GPGPU ne

módosítsa a sorompón keresztül a megadott adatterületen (Helyi adatterület /Globális memória/ Rendszer

memória).

• Ilyen esetben a szál végrehajtása akkor folytatódik, ha már minden korábbi memória írás befejeződött a

szálakban, és ezáltal az adat elérhetővé vált minden szál számára a megadott tárhelyen.

Megvalósítása:

• Az Nvidia PTX-ben a “membar” utasítással [27]vagy

• az AMD IL-ben a “fence lds”/”fence memory” utasításokkal [28].

4. GPGPU-k pseudo ISA szintű leírása

• A GPGPUk pseudo ISA szintű leírása határozza meg a virtuális gép szinten elérhető utasításkészletet.

• A pseudo ISA a valódi ISA-val együtt fejlődik egymást követő verziók formájában.

• A fejlődés mind a pseudo architektúra kvalitatív (funkcionális) mind pedig kvantitatív jellemzőire vonatkozik.

Page 74: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

52 Created by XMLmind XSL-FO Converter.

A GPGPU-k fejlesztésében élenjáró két világcég két eltérő pseudo ISA családot fejlesztett ki az alábbiak szerint:

2.57. ábra -

A pseudo ISA-k dinamikusan fejlődnek, követvén mind a HLL szoftver környezet, mind pedig az alatta

található hardver mikroarchitektúra evolúcióját.

A fejlődésük adott GPGPU családokhoz köthető fő verziókra bontható az alábbi ábra szerint.

2.58. ábra -

Megjegyzés

A két gyártóspecifikus pseudo ISA-n túl az OpenCL fejlesztéséért felelős szervezet (Khronos Group) 2012-ben

bemutatott egy szabványos (gyártófüggetlen) köztes leírónyelvet, ami OpenCL programok szabványos leírására

szolgál. A köztes nyelv elnevezése: OpenCL Standard Portable Intermediate Representation (SPIR - OpenCL

szabványos hordozható köztes leírás).

Az SPIR az OpenCL 1.2-n és az LLVM 3.1-en alapul [29].

(Az LLVM a fordító programok széles körben használt nyelvfüggetlen köztes formátuma.)

Jelenleg nem lehet előre látni azt, hogy a GPGPU technológia vezető gyártói milyen fogadtatásban fogják

részesíteni a SPIR-t.

4.1. Pseudo ISA-k leírása

Mivel a pseudo ISA-k egy adott GPGPU implementációhoz köthetőek, ezért célszerűbb azokat egy konkrét

példán keresztül bemutatni mintsem egy gyártó független általános leírást adni.

Az Nvida PTX teljesebb dokumentációval rendelkezik, mint az AMD IL, így a pseudo ISA-k rövid áttekintését

az Nvida PTX példáján keresztül fogjuk bemutatni, főbb jellemzőik fejlődésére fókuszálva.

4.2. Mintapélda: Az Nvidia PTX virtuális gép pseudo ISA szintű leírása

Page 75: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

53 Created by XMLmind XSL-FO Converter.

Gyakran rövidítik PTX pseudo ISA-ként.

4.3. Mintapélda: Az Nvidia PTX virtuális gép pseudo ISA szintű leírása

A GPGPU-k pseudo ISA szintű leírása

• közel van a „vashoz” (vagyis a GPGPU-k valódi ISA-jához), valamint

• hardverfüggletlen kódformátumot biztosít a CUDA, OpenCL fordítók számára.

2.59. ábra -

A PTX virtuális gép elve vezette be a kétfázisú fordítási eljárást.

1) Először az alkalmazást (pl. CUDA vagy OpenCL programot) pseudo kódra fordítja az adott fordító (ezt a

pseudo kódot nevezik PTX ISA vagy PTX kódnak is).

A PTX kód egy pseudo kód, mivel közvetlenül nem futtatható, hanem azt előbb le kell még fordítani az adott

GPGPU aktuális ISA-jára, hogy végrehajthatóvá váljon.

2.60. ábra -

Page 76: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

54 Created by XMLmind XSL-FO Converter.

2) Annak érdekében, hogy a PTX kód futtathatóvá váljon, azt előbb az adott GPGPU ISA-jának megfelelő

kódra, az ún. CUBIN fájlra le kell fordítani.

Ezt a fordítást a CUDA meghajtó végzi el a program betöltésekor (Just-In-Time).

2.61. ábra -

4.4. Nvidia számítási képesség (számítási képesség) elve [31], [1]

• Az Nvidia a számítási képességek meghatározásával tartja nyilván eszközeinek és programozási

környezeteinek a fejlődését. A számítási képesség verziószáma mind

Page 77: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

55 Created by XMLmind XSL-FO Converter.

• a köztes nyelv verziókra (PTX verziók) és

• a valódi architektúrákra (GPGPU ISA)

egyaránt vonatkozik.

• A számítási képesség verziók megjelölése

• GPGPU ISA-k egymás utáni verzióit sm_1x/sm_2x vagy sm_3x névvel jelölik.

• Az első számjegy (1, 2 vagy 3) a főverzió (major version) szám, a második jegy az alverzió (minor

version).

• Az 1.x (vagy 1x) főverziószámok a Fermi előtti , a 2.x (vagy 2x) jelőlésűek a Fermi alapú, a 3.x (vagy 3x)

jelőlésűek pedig a Kepler alapú implementációkra utalnak.

Megjegyzés [1]

A pseudo PTX ISA és a valódi GPGPU ISA számítási képesség verziói közötti összefüggés

Egészen mostanáig a pseudo PTX ISA és a valódi GPGPU ISA verziók között közvetlen megfeleltetés volt,

vagyis ugyanahhoz a fő és alverzióhoz tartozó ISA-k azonos számítási képességgel rendelkeztek.

A számítási képesség verziók jellemzőit a következő táblázatok foglalják össze.

4.5. a) A funkcionális jellemzők, vagyis a számítási képességek összehasonlítása egymást követő Nvidia pseudo ISA (PTX) verziókban [32]

2.62. ábra -

Page 78: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

56 Created by XMLmind XSL-FO Converter.

4.6. b) Az eszközjellemzők fejlődésének összehasonlítása egymást követő Nvidia pseudo ISA (PTX) számítási képességekben [32]

2.63. ábra -

4.7. c) Számítási képességhez kötött architektúra specifikációk az Nvidia PTX-ben [32]

2.64. ábra -

4.8. d) Natív aritmetikai utasítások végrehajtási sebessége az Nvidia PTX számítási képességeinek egymást követő verzióiban (utasítás / óraciklus/SM) [7]

2.65. ábra -

Page 79: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

57 Created by XMLmind XSL-FO Converter.

Bizonyos CUDA (és OpenCL) verziók egy adott PTX verzióra vonatkozó PTX kódot generálnak (PTXu.v)

amely egy adott számítási képesség verziót (smx.y) támogat a következő táblázat szerint.

4.9. Egymást követő CUDA SDK-kkal megjelent PTX ISA verziók, valamint az általuk támogatott számítási képesség verziók (sm[xx]) (A táblázatban ez Supported Targets néven szerepel) [20]

2.66. ábra -

Page 80: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

A GPGPU modell virtuális gép elve

58 Created by XMLmind XSL-FO Converter.

A számítási képesség verziószám meghatározza az Nvidia GPGPU magjai és kártyái által nyújtott számítási

képességeket, az alábbiak szerint.

4.10. Nvidia GPGPU magjai és kártyái által támogatott számítási képesség verziók [32]

2.67. ábra -

4.11. A PTX kód előre hordozhatósága [31]

A Fermi előtti GPGPU-kra fordított alkalmazások, amelyek tartalmazzák a kerneleik PTX verzióját, változtatás

nélkül futtathatók Fermi GPGPU-kon is.

4.12. Egy megadott GPGPU számítási képesség verzióra fordított objektum fájlra (CUBIN file) vonatkozó kompatibilitási szabályok [31]

Az alapvető szabály főverziókon belül az előre kompatibilitás (pl. az sm_1x vagy sm_2x verziókban) a

főverziók között azonban a kompatibilitás nem létezik.

Ezt a következőképpen kell értelmezni:

Egy megadott GPGPU számítási képesség verzióra fordított, CUBIN fájlnak nevezett objektum fájlokat minden

olyan eszköz támogatja, amely azonos főverzióval, és a célnál magasabb alverziószámmal rendelkezik.

Pl. a számítási képesség 1.0-ra fordított objektum kód minden 1.x eszközön fut, azonban nem támogatott a 2.0-

ás számítási képességgel rendelkező (Fermi) eszközökön.

További részleteket illetően lásd [31].

Page 81: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

59 Created by XMLmind XSL-FO Converter.

3. fejezet - GPGPU magok és kártyák áttekintése

1. Általános áttekintés

3.1. ábra - A SIMT végrehajtás megvalósítási alternatívái

1.1. GPGPU magok

A GPGPU kártyák és az adatpárhuzamos gyorsítók egyaránt GPGPU magokon alapulnak.

3.2. ábra - Az Nvidia és AMD/ATI GPGPU vonalainak áttekintése

Page 82: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

60 Created by XMLmind XSL-FO Converter.

3.3. ábra - GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése

(1)

3.4. ábra - GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése

(2)

Page 83: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

61 Created by XMLmind XSL-FO Converter.

3.5. ábra - GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése

(3)

Megjegyzés

1) A Northern Islands családdal kezdődően (HD 6xxx) az AMD megváltoztatta grafikus kártyáinak az

elnevezését az alábbiak szerint:

• az Evergreen családig (HD 5xxx) az AMD az ATI HD xxxx márkanevet használta,

Page 84: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

62 Created by XMLmind XSL-FO Converter.

• a Northern Islands családtól kezdve azonban áttértek az AMD HD xxxx márkanévre.

2) A fenti áttekintés nem tartalmazza a dual-GPU kártyákat. Ezeket a következő két táblázat mutatja be.

1.2. Az Nvidia duál-GPU grafikus kártyáinak főbb jellemzői

3.6. ábra - Main features of Nvidia’s dual-GPU graphics cards [33], [34]

1.3. Az AMD/ATI duál-GPU grafikus kártyáinak főbb jellemzői

3.7. ábra - Az AMD/ATI duál-GPU grafikus kártyáinak főbb jellemzői [35]

1.4. Megjegyzés az AMD alapú grafikus kártyákhoz [36], [37]

A Cypress alapú HD 5xxx sorozattal (Evergreen család) és a 2.0-ás SDK verzióval az AMD HLL programozási

nyelvét megváltoztatta Brook+-ról OpenCL-re.

3.8. ábra -

Page 85: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

63 Created by XMLmind XSL-FO Converter.

Ennek következtében az AMD megváltoztatta

• a GPGPU-ik mikroarchitektúráját (bevezetvén a helyi és globális adatmegosztó memóriát), valamint

• a terminológiáját, bevezetvén az 5.2-es fejezetben tárgyalt OpenCL előtti és OpenCL elnevezéseket.

2. Az Nvidia grafikus magok és kártyák főbb jellemzőinek áttekintése

2.1. Az Nvidia grafikus magok és kártyák főbb jellemzői

3.9. ábra - Az Nvidia Fermi előtti grafikus kártyái [33]

Megjegyzés

A publikációkban eltérő állítások szerepelnek arról, hogy a GT80 képes-e dupla kibocsájtára (pl. egy MAD és

egy Mul művelet kibocsájtására) négy shader ciklus alatt.

Page 86: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

64 Created by XMLmind XSL-FO Converter.

Hivatalos specifikációk [6] szerint a GT80 dupla kibocsájtású, más irodalmi források [38] vagy a részben a

GT80 egyik fő fejlesztője által írt tankönyv [39]) szerint viszont nem.

A helyzet tisztázását végül egy blog tette lehetővé [37], melyből kiderült, hogy az Nvidia specifikációjában

megadott magasabb kibocsájtási értékbe beleszámították a TPU-ban található ALU egységeket is (ld. a

következő oldalon lévő ábrát).

3.10. ábra - A MAD (Multiply-ADD - Szorzás-Összeadás) művelet értelmezése [51]

2.1.1. Egy SM felépítése a G80 architektúrában

3.11. ábra -

Textúra feldolgozó egységek (TPU)

tartalma:

Page 87: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

65 Created by XMLmind XSL-FO Converter.

• TA: Texture Address (textúra cím)

• TF: Texture Filter (textúra szűrő)

FP32 vagy FP16 számításra képesek [40]

Megjegyezzük, hogy a grafikai számításoktól eltekintve (mint például a textúra szűrés) a CUDA nem érheti el

közvetlenül a TPU-kat.

Ennek megfelelően a a maximális számítási teljesítmény megadásakor helyénvaló csupán a MAD utasításokra

vonatkozó számítási teljesítményt figyelembe venni.

3.12. ábra - Az Nvidia Fermi alapú grafikus kártyáinak főbb jellemzői [33]

Megjegyzés a Fermi alapú grafikus kártyákhoz [36], [37]

Az FP64 teljesítmény

• Tesla 20-as sorozatban az FP32 sebességének fele,

• GeForce GTX 470/480/570/580 kártyáknál az FP32 sebesség 1/8,

más GForce GTX4xx kártyák esetében a sebesség 1/12.

ECC

csak a Tesla 20-as sorozatában implementálták.

DMA motorok száma

A Tesla 20-as sorozat két DMA motorral (másoló motorral) rendelkezik. A GeForce kártyákban egy DMA

motor található. Ez azt jelenti, hogy CUDA alkalmazások esetében a számítás és a kommunikáció

párhuzamosan folyhat kétirányú PCI-e kapcsolaton keresztül.

Memória méret

A Tesla 20-as sorozat termékei nagyobb memóriával rendelkeznek (3GB és 6GB).

Page 88: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

66 Created by XMLmind XSL-FO Converter.

Megjegyzés a GDDR memóriákról

1) A GDDR3 memória az adatátvitelt az órajel kétszeresével hajtja végre.

Tényleges adatátviteli ráta = 2 x memória frekvencia

A GDDR5 memória az adatátvitelt az órajel négyszeresével hajtja végre.

Tényleges adatátviteli ráta = 4 x memória frekvencia

2) Mind a GDDR3, mind a GDDR5 32-bites eszköz.

Ennek ellenére a GPGPU-k memória vezérlőjét ki lehet alakítani úgy, hogy a memória csatornák vagy 32-bites

szélességűek, vagy pedig két-két 32-bites csatorna összefogásával 64-bit szélesek legyenek.

3.13. ábra - Az Nvidia Kepler alapú grafikus kártyáinak főbb jellemzői [33]

Page 89: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

67 Created by XMLmind XSL-FO Converter.

2.1.2. Az Nvidia GPGPU kártyáinak pozicionálása a termékspektrumukon belül [41]

3.14. ábra -

Page 90: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

68 Created by XMLmind XSL-FO Converter.

2.2. Példák az Nvidia grafikus kártyáira

2.2.1. Nvidia GeForce GTX 480 (GF 100 alapú) [42]

3.15. ábra -

2.2.2. Párba állított Nvidia GeForce GTX 480 kártyák [42] (GF100 alapú)

Page 91: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

69 Created by XMLmind XSL-FO Converter.

3.16. ábra -

2.2.3. Nvidia GeForce GTX 480 és 580 kártyák [44]

3.17. ábra -

Page 92: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

70 Created by XMLmind XSL-FO Converter.

2.2.4. Nvidia GTX 680 kártya [80] (GK104 alapú)

3.18. ábra -

2.2.5. Nvidia GTX Titan kártya [81] (GK110 alapú)

3.19. ábra -

Page 93: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

71 Created by XMLmind XSL-FO Converter.

3. Az AMD grafikus magok és kártyák főbb jellemzőinek áttekintése

3.1. Az AMD grafikus magok és kártyák főbb jellemzői

3.20. ábra - Az AMD/ATI korai grafikus kártyáinak főbb jellemzői -1 [35]

Page 94: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

72 Created by XMLmind XSL-FO Converter.

3.21. ábra - Az AMD/ATI korai grafikus kártyáinak főbb jellemzői - 2 [35]

3.22. ábra - Az AMD Southern Islands sorozatú grafikus kártyái [35]

Page 95: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

73 Created by XMLmind XSL-FO Converter.

3.23. ábra - Az AMD Northern Islands sorozatú grafikus kártyái [35]

Page 96: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

74 Created by XMLmind XSL-FO Converter.

3.24. ábra - AMD Southern Islands sorozatú (GCN) grafikus kártyái [35]

3.25. ábra - Az AMD Sea Islands sorozatú grafikus kártyáinak főbb jellemzői [45]

Page 97: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

75 Created by XMLmind XSL-FO Converter.

3.2. Példák AMD grafikus kártyákra

3.26. ábra - ATI HD 5870 (RV870 alapú) [43]

Page 98: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

76 Created by XMLmind XSL-FO Converter.

3.2.1. ATI HD 5970 (gyakorlatilag RV870 alapú) [46]

3.27. ábra - ATI HD 5970: 2 x ATI HD 5870 némileg csökkentett memória órajellel

3.2.2. ATI HD 5970 (RV870 alapú) [47]

3.28. ábra - ATI HD 5970: 2 x ATI HD 5870 valamelyest csökkentett memória órajellel

Page 99: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

77 Created by XMLmind XSL-FO Converter.

3.2.3. AMD HD 6990 (Cayman alapú) [48]

3.29. ábra - AMD HD 6990: 2 x ATI HD 6970 valamelyest csökkentett memória és

shader órajellel

3.2.4. AMD Radeon HD 7970 (Tahiti XT, Southern Islands alapú) - Első GCN megvalósítás [49]

3.30. ábra - AMD HD 7970

Page 100: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

78 Created by XMLmind XSL-FO Converter.

3.2.5. GPGPU árak 2012 nyarán [50]

3.31. ábra - GPU árak összehasonlítása 2012 nyarán

Page 101: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU magok és kártyák

áttekintése

79 Created by XMLmind XSL-FO Converter.

Page 102: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

80 Created by XMLmind XSL-FO Converter.

4. fejezet - Az Nvidia Fermi családhoz tartozó magok és kártyák

1. A Fermi család áttekintése

4.1. ábra - GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése

(2)

A Fermi bejelentése: 2009 09. 30. az Nvidia GTC (GPU Technology Conference) rendezvényén.

Elérhető: 2010 első negyedévében [18]

4.2. ábra -

Page 103: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

81 Created by XMLmind XSL-FO Converter.

1.1. A Fermi főbb alcsaládjai

A Fermihez négy alcsalád (magok) tartozik, amelyek a következő tulajdonságokkal bírnak:

4.3. ábra -

2. A Fermi PTX 2.0 legfontosabb újításai

2.1. A PTX 2.0 áttekintése

• A Fermi a második generációs PTX 2.x (Parallel Thread eXecution) ISA-ra alapoz, mely a Fermi

termékvonallal együtt került bevezetésre.

• A PTX 2.x a PTX 1.x ISA jelentős átdolgozásával született, és felépítésében az x86 helyett inkább RISC-

szerű load/store architektúrát valósít meg.

Page 104: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

82 Created by XMLmind XSL-FO Converter.

Az Nvidia állítása szerint a PTX 2.0 egy olyan hosszútávra tervezett ISA lesz a GPU-k tekintetében, mint

amilyen az x86 ISA a CPU-k esetében.

A PTX 2.0-ben bevezetett jelentős újdonságok alapján ill. a cég ezirányú kijelentéseinek figyelembevételével

várható az, hogy Nvidia GPGPU családja a PTX 2.0 megjelenésével egy relatív konszolidált fejlődési szakaszba

lépett.

2.2. A PTX 2.0 pseudo ISA főbb újításai

a) A változók és a pointerek számára biztosított egységesített címtér mely azonos load/store utasításkészlettel

érhető el.

b) 64 bites címzési lehetőség.

c) Új utasítások, amelyek támogatják az OpenCL és DirectCompute API-kat.

d) A predikáció teljeskörű támogatása.

e) A 32- és 64-bites lebegőpontos feldolgozás teljeskörű IEEE 754-3008 támogatása

A GPU-k programozhatósága, pontossága és teljesítménye jelentősen megnövekedik ezen újítások

bevezetésével.

2.2.1. a) A változók és a pointerek számára biztosított egységesített címtér mely azonos load/store utasításkészlettel érhető el - 1 [11]

• A PTX 1.0-ben három különálló címtér (a thread private local, block shared és global) van, melyek

mindegyikéhez saját load/store utasítás készlet tartozik.

• A programok mindhárom címtérben tárolhatják az adataikat (a load és store utasításokkal), olyan címeken,

melyek fordítási időben válnak ismertté.

A C és C++ nyelvekben használt mutatók implementálása komoly nehézségekbe ütközik, mivel azok csak futási

időben válnak ismertté.

4.4. ábra -

Page 105: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

83 Created by XMLmind XSL-FO Converter.

2.2.2. a) A változók és a pointerek számára biztosított egységesített címtér mely azonos load/store utasításkészlettel érhető el - 2 [11]

• A PTX 2.0 a fenti három címteret egy folyamatos címtérré egyesíti, melyet egyetlen load/store

utasításkészlettel lehet elérni.

• A PTX 2.0 lehetővé teszi az egységesített mutatók használatát is, amelyek bárhol elhelyezett objektumokra

mutathatnak, a Fermi pedig hardveresen a pointer referenciákat automatikusan a megfelelő memória területre

képezi le.

Az egységesített címtér miatt a Fermi támogatja a C++ programokat.

4.5. ábra -

Page 106: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

84 Created by XMLmind XSL-FO Converter.

2.2.3. b) 64-bites címzési lehetőség

• Az Nvidia korábbi GPGPU generációi (G80, G92, GT200) 32 bites címzést biztosítottak a load/store

utasításokhoz,

• a PTX 2.0 a címzést 64 bites lehetőséggel látja el a későbbi fejlődés érdekében, azonban a jelenlegi Fermi

megvalósítások csak 40 bites címzést használnak, így a címtér max. mérete 1 Terabyte.

2.2.4. c) Új utasítások, amelyek támogatják az OpenCL és DirectCompute API-kat

• Új utasítások, amelyek támogatják az OpenCL és DirectCompute API-kat

• Új utasításokat tartalmaz, amelyek ezen API-khoz hardveres támogatást biztosítanak.

2.2.5. d) A predikáció teljeskőrű támogatása [51]

• A PTX 2.0 minden utasítás esetében támogatja a predikációt.

• Ezeket az utasításokat a PE-k vagy végrehajtják vagy kihagyják a feltételkód aktuális értének megfelelően.

• A predikáció lehetővé teszi azt, hogy az egyes szálak eltérő utasításokat hajtsanak végre teljes sebességgel.

• A predikáció hatékonyabb megoldást jelent streaming jellegű alkalmazások futtatására mint a hagyományos

feltételes elágazás utasítások elágazásbecsléssel támogatva.

Megjegyzés

A predikáció elve

• A predikáció egy olyan program konstrukció, ami kiküszöböli a futószalag jellegű végrehajtás

hatékonyságának gátat szabó feltételes elágazásokat.

• A predikáció megvalósítása predikációs regisztereket igényel.

Page 107: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

85 Created by XMLmind XSL-FO Converter.

• A megcímzett predikációs regiszter tartalmát a PE attól függően állítja be, hogy a hozzárendelt feltétel igaz,

vagy hamis (pl. túlcsordulás fordult elő stb.).

• A predikált utasítás akkor kerül végrehajtásra, ha a predikátum értéke igaz.

2.2.6. e) A 32- és 64-bites lebegőpontos feldolgozás teljeskörű IEEE 754-3008 támogatása

• A Fermi FP32 utasítás szemantikája és utasítás feldolgozása a PTX 2.0-tól kezdve támogatja a

• szubnormális számokkal végzett számításokat (a szubnormális számok a nulla és a legkisebb normalizált

szám közötti számok), és

• mind a négy kerekítési módot (legközelebbi, nulla, pozitív végtelen, negatív végtelen).

• A Fermi FMA (Fused Multiply-Add azaz - együttes szorzás-összeadás) utasításokat bocsát aprogramozó

rendelkezésére mind szimpla, mind dupla pontos lebegőpontos számításokhoz, melyek a közbülső számítás

során megőrzik a teljes pontosságot.

A korábbi GPGPU-k MAD (Multiply-Add, azaz szorzás-összeadás) utasításaival szemben ilyenkor ugyanis a

szorzás és az összeadás között nem történik levágás.

2.2.7. A Fermi GPGPU-kra történő programfejlesztések megkönnyítése [11]

• Az Nvidia Nexus néven elérhetővé tett az alkalmazás fejlesztők számára egy programozási környezetet,

amely támogatja a párhuzamos CUDA C, OpenCL és DirectCompute alkalmazásokat.

• A Nexus segítségével közvetlenül a Microsoft Visual Studioban lehet hibajavítást és teljesítmény analizíst

végezni párhuzamos forráskódok esetén.

• A Visual Studiot használó alkalmazás fejlesztők ugyanazokat a hibakereső eszközöket és interfészeket

használhatják a GPU alkalmazások hibáinak feltárásához, amelyeket CPU-ra írott kódok esetében

megszoktak.

• Ezen túlmenően a Nexus kibővíti a Visual Studio funkcionalitását, lehetővé téve a masszív párhuzamosság

támogatását.

3. A Fermi mikroarchitektúrájának főbb újításai és továbbfejlesztései

3.1. Főbb újítások

a) Párhuzamos kernel futtatás

b) Valódi kétszintű cache hierarchia

c) SM-enként konfigurálható osztott memória és L1 cache

d) ECC támogatás

3.2. Főbb továbbfejlesztések

a) Jelentősen megnövelt FP64 teljesítmény

b) Jelentősen csökkentett kontextus váltási idők

c) 10-20-szorosára felgyorsított atomi memória műveletek

3.3. Főbb architekturális újdonságok a Fermiben

Page 108: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

86 Created by XMLmind XSL-FO Converter.

3.3.1. a) Párhuzamos kernel futtatás [52], [18]

• A korábbi generációkban (G80, G92, GT200) a globális ütemező csak egyetlen kernelből tudott feladatot

ütemezni az SM-ek számára (soros kernel futtatás).

• A Fermi globális ütemezője akár 16 eltérő kernelt is képes egyidőben futtatni SM-enként.

• Egy nagy méretű kernel az SM határain is túlnyúlhat.

4.6. ábra -

3.3.2. b) Valódi kétszintű cache hierarchia [11]

• Hagyományos GPU architektúrákban a textúra műveletekhez használt „betöltési útvonal” csak olvasható, a

képpont adatok kimenetének használt „kiírási útvonal” pedig csak írható.

Számítási feladatok esetében azonban ez a megoldás gátolja az írás és olvasási utasítások átrendezését,

mellyel a feldolgozás sebessége növelhető lenne.

• Ezen hiányosság megszüntetése érdekében a Fermi mind az betöltés, mind a kiírás művelethez egységes

hozzáférési útvonalat valósít meg.

• A Fermi mindezek mellett egységes L2 gyorsító tárat biztosít a betöltés, kiírás és textúra kérés sebességének

növelése érdekében.

4.7. ábra -

Page 109: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

87 Created by XMLmind XSL-FO Converter.

3.3.3. c) SM-enként konfigurálható osztott memória és L1 cache [11]

• A Fermiben ezen túlmenően SM-enként konfigurálható osztott memória/L1 gyorsítótár van.

Page 110: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

88 Created by XMLmind XSL-FO Converter.

• Az osztott memória/L1 gyorsítótár konfigurálható annak érdekében, hogy optimálisan támogassa mind az

osztott memóriát, mind pedig a lokális és globális memória műveletek sebességének növelését L1 gyorsítótár

segítségével.

Igy például választható 48 KB osztott memória 16 KB L1 gyorsító tárral, vagy fordítva.

• Az optimális konfiguráció az éppen futtatott alkalmazástól függ.

4.8. ábra -

3.3.4. d) ECC támogatás [11]

A Fermi hiba elleni védelemmel látja el a

• It protects

• DRAM memóriát,

• regiszter fájlokat,

• osztott memóriákat,

• L1 és L2 cacheket.

Megjegyzés

ECC támogatást csak a Tesla eszközök nyújtanak.

Page 111: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

89 Created by XMLmind XSL-FO Converter.

3.4. A Fermi főbb architektúrális továbbfejlesztései

3.4.1. a) Jelentősen megnövelt FP64 teljesítmény

A korábbi G80 és GT200 alapú generációkkal összehasonlítva a Fermi jelentős gyorsulást nyújt FP64

teljesítményben a korábbi, csúcssebességű GPGPU kártyákhoz képest.

3.4.1.1. Csúcs Tesla kártyák

4.9. ábra -

3.4.1.2. Csúcs GPGPU kártyák

4.10. ábra -

3.5. Aritmetikai műveletek átviteli sebessége óraciklusonként és SM-enként [13]

4.11. ábra -

3.5.1. b) Jelentősen csökkentett kontextus váltási idők [11]

Page 112: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

90 Created by XMLmind XSL-FO Converter.

• A Fermi az alkalmazások közötti kontextus váltást mintegy 25 µs alatt hajtja végre.

• Ez nagyságrendileg 10-szer gyorsabb, mint a korábbi GT200 esetén (200-250 µs).

3.5.2. c) 10-20-szorosára felgyorsított atomi memória műveletek [11]

• Párhuzamos programozásban igen gyakran használnak atomi műveleteket az osztott adatstruktúrákon végzett

olvasás-módosítás-írás műveletek megfelelő sorrendjének biztosítására.

• A megnövelt számú atomi művelet feldolgozó, valamint az L2 cache miatt a Fermi az atomi műveleteket

közelítőleg 20-szor gyorsabban hajtja végre, mint a GT200 alapú eszközök.

4. A Fermi GF100 mikroarchitektúrája

4.1. A Fermi GF100 felépítése [18], [11]

4.12. ábra -

Fermi: 16 Streaming Multiprocessor (SM)

Mindegyik SM-ben: 32 ALU

512 ALUs

Megjegyzés

A sorozat csúcskártyájában (GTX 480) Nvidia egy SM-et letiltott túlmelegedési problémák miatt. Így a

GTX480-as kártyában csak 15 SM és 480 ALU van [a]

6x Dual Channel GDDR5 (6x 64 = 384 bit)

4.2. A Fermi GT100 magasszintű mikroarchitektúrája

4.13. ábra - A Fermi rendszerarchitektúrája [52]

Page 113: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

91 Created by XMLmind XSL-FO Converter.

4.3. Az Nvidia GPGPU-k magasszintű mikroarchitektúrájának fejlődése [52]

4.14. ábra -

Page 114: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

92 Created by XMLmind XSL-FO Converter.

Megjegyzés

A Fermi magas szintű mikroarchitektúrája a korábbi, grafika orientált struktúráktól egy számításorientált

struktúra irányába fejlődött.

4.4. Cuda GF100 SM felépítése [19]

(SM: Streaming Multiprocessor)

4.15. ábra -

4.5. Az Nvidia GPGPU-iban található magok (SM) fejlődése - 1

Page 115: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

93 Created by XMLmind XSL-FO Converter.

GT80 SM [53]

4.16. ábra -

• 16 KB osztott memória

• 8 K regiszter x32-bit/SM

• legfeljebb 24 aktív warp/SM

legfeljebb 768 aktív szál/SM

átlagosan 10 regiszter/SM

GT200 SM [54]

4.17. ábra -

• 16 KB osztott memória

Page 116: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

94 Created by XMLmind XSL-FO Converter.

• 16 K regiszter x32-bit/SM

• legfeljebb 32 aktív warp/SM

legfeljebb 1024 aktív szál/SM

átlagosan 16 regiszter/szál

• 1 FMA FPU (nincs az ábrán)

Fermi GT100/GT110 SM [19]

4.18. ábra -

• 64 KB osztott memória/ L1 Cache

• legfeljebb 48 aktív warp/SM

• 32 szál /warp

legfeljebb 1536 aktív szál/SM

átlagosan 20 regiszter /szál

4.6. Az Nvidia GPGPU-iban található magok (SM) fejlődése - 2

GF104 [55]

Page 117: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

95 Created by XMLmind XSL-FO Converter.

Az elérhető specifikáció szerint:

• 64 KB osztott memória/L1 Cache,

• 32 Kx32-bit regiszter/SM,

• 32 szál/warp,

• Legfeljebb 48 aktív warp/SM,

• Legfeljebb 1536 szál/SM.

4.19. ábra -

4.7. A Fermi GF100 GPGPU felépítése és működése

4.7.1. A Cuda GF100 SM felépítése [19]

Page 118: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

96 Created by XMLmind XSL-FO Converter.

4.20. ábra -

4.7.2. Egy ALU („CUDA mag”)

4.21. ábra - A single ALU [57]

Megjegyzés

Page 119: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

97 Created by XMLmind XSL-FO Converter.

A korábbi generációk MAD (Multiply-Add, azaz szorzás - összeadás) művelete helyett a Fermi a az FMA

(Fused-Multiply-Add) műveletet használja, melynél a szorzás eredménye nem kerül csonkításra, hanem teljes

egészében figyelembe vevődik az összeadáshoz.

4.22. ábra - Multiply-Add (MAD) és Fused-Multiply-Add (FMA) műveletek összevetése

[51]

4.8. SIMT végrehajtás elve soros kernel végrehajtás esetén

4.23. ábra - szálak hierarchiája [58]

4.9. A Fermi GF100 GPGPU működési elve

A működés legfontosabb momentuma a feladat ütemezés.

4.10. Feladat ütemezés alfeladatai

Page 120: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

98 Created by XMLmind XSL-FO Converter.

• Kernelek ütemezése az SM-ekre.

• Azonos kernelhez tartozó szálblokkok ütemezése az SM-ekre.

• Szálblokkok warpokká szegmentálása.

• Warpok ütemezése végrehajtásra az SM-ekre.

4.11. Kernelek ütemezése az SM-ekre [25], [18]

• A Gigathread schedulernek nevezett globális ütemező osztja szét a munkát minden SM számára.

• Korábbi generációkban (G80, G92, GT200) a globális ütemező csak egyetlen kernelből volt képes az SM-ek

számára munkát adni (soros kernel végrehajtás).

• A Fermiben a globális ütemező legfeljebb 16 különböző kernelt tud futtatni, SM-enként egyet.

• Egy nagy kernel több SM-en is futhat egyszerre - a kernel átnyúlhat az SM határokon.

4.24. ábra -

A korábbi generációkkal összehasonlítva a kontextus váltás ideje drasztikusan lecsökkent, az addigi 250 µs

helyett jelenleg 20 µs (ennyi idő szükséges a TLB-k, cachek, regiszterek visszaírásához, ürítéséhez stb.) [52].

4.12. Azonos kernelhez tartozó szálblokkok SM-hez rendelése

• A Gigathread ütemező legfeljebb 8, azonos kernelhez tartozó szálblokkot képes hozzárendelni minden SM-

hez.

(Egy adott SM-hez rendelt szálblokkok azonos kernelhez kell, hogy tartozzanak.)

• Mindazonáltal a Gigathread ütemező különböző kerneleket különböző SM-ekhez képes rendelni, így

legfeljebb 16 kernel futhat 16 SM-en.

4.25. ábra -

Page 121: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

99 Created by XMLmind XSL-FO Converter.

4.13. A CUDA szál blokkok fogalma és jellemzői [53]

• A programozó szálblokkokat deklarál:

• blokkok kialakítása lehet: 1D, 2D, vagy 3D,

• blokkméret: 1 - 512 szál,

• blokkok mérete szálanként,

Page 122: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

100 Created by XMLmind XSL-FO Converter.

• a blokkok egymástól függetlenül tetszőleges sorrendben képesek futni.

• A blokk minden szála azonos kernel programot futtat (SPMD).

• A szálak a szál blokkon belül azonosítóval rendelkeznek (thread id).

• A szál program ezt az azonosítót használja a munka kiválasztásához és a közös használatú adatok

megcímzéséhez.

• Különböző blokkokba tartozó szálak nem oszthatják meg adataikat.

4.26. ábra -

4.14. Szál blokkok warp-okká történő szegmentálása [59]

• A szálakat warp-nak nevezett 32-es kötegekben ütemezik.

• Ebből kifolyólag minden szál blokkot tovább kell osztani warp-okká.

• Az SM ütemezője legfeljebb 48 warp-ot képes egyidejűleg nyilvántartani.

Megjegyzés

A warp-ot alkotó szálak száma implementációs döntés, nem része a CUDA programozási modellnek.

Pl. a G80-ban vagy a GT200-ban egy warp 32 szálat tartalmaz.

4.27. ábra -

Page 123: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

101 Created by XMLmind XSL-FO Converter.

4.15. Warpok ütemezése végrehajtásra az SM-ekre

Az Nvidia nem hozta nyilvánosságra a Fermi mikroarchitektúrájának részleteit, így a warp ütemezés bemutatása

a megadott forrásokban található feltételezéseken alapul [52], [11].

4.16. A Fermi GF100 mikroarchitektúra blokk diagrammja és működésének leírása

• [52] és [11] irodalmak alapján feltételezhetjük, hogy a Fermi front-endje a következőképpen épül fel:

• A front-end dupla feldolgozó futószalaggal rendelkezik, vagy másképen fogalmazva két szorosan csatolt

keskeny maggal, valamint megosztott erőforrásokkal.

• A vékony magok saját erőforrásokkal is rendelkeznek, ezek az alábbiak:

• warp utasítás várakozósor (Warp Instruction Queue),

• a függőségeket nyilvántartó (scoreboarded) warp ütemező és

• 16 FX32, valamint 16 FP32 ALU.

• A közösen használt erőforrások:

• az utasítás gyorsító tár (Instruction Cache),

Page 124: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

102 Created by XMLmind XSL-FO Converter.

• 128 KB (32 K regiszter x32-bit) regiszter fájl,

• a négy SFU és a

• 64 KB L1D közös használatú (osztott) memória.

4.28. ábra -

Megjegyzés

Page 125: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

103 Created by XMLmind XSL-FO Converter.

Az SM front-endje hasonló az AMD Bulldozer (2011) magjának felépítéséhez, ami szintúgy két szorosan csatolt

keskeny magot tartalmaz [60].

4.29. ábra - A Bulldozer mag felépítése [60]

4.17. Feltételezett működési elv - 1

• A két warp ütemező az ábrának megfelelően egy részleges keresztsínes kapcsolóhálózaton keresztük

csatlakozik az öt feldolgozó egység csoporthoz.

• A kettős utasítás várakozási sorban legfeljebb 48 warp utasítás várakozhat kibocsájtásra.

• A minden szükséges operandussal rendelkező warp utasítások kibocsájtásra kerülhetnek.

• A függőség nyilvántartó (scoreboard) tartja nyilván az operandusok meglétét a kibocsájtott utasítások előre

várható futásideje alapján, valamint kibocsájthatónak jelöli azokat, amelyeknél az az operandusok már

rendelkezésre állnak.

• A Fermi kettős warp ütemezői két megfelelő utasítást választanak ki kibocsájtásra minden második órajelnél

a megadott ütemezési politikának megfelelően.

• Mindegyik warp ütemező egy warp utasítást bocsájt ki egy 16 ALU-ból álló csoportnak (amibe beletartoznak

FP32 és FX32 egységek egyaránt), vagy 4 SFU-nak, vagy 16 load/store egységnek (ezek az ábrán nincsenek

jelölve).

4.30. ábra - A Fermi mag [52]

Page 126: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

104 Created by XMLmind XSL-FO Converter.

4.18. Feltételezett működési elv - 2

• A warp utasításokat a megfelelő feldolgozó egységek fogadják a következők szerint:

• Az FX és FP32 aritmetikai utasítások (ide értve az FP FMA utasításokat is) 16 darab 32 bites ALU-hoz

kerülnek, amelyeket egy FX32 ALU (ALU) és egy FP32 ALU (FPU) alkot.

Az FX utasításokat az FX32, az SP FP utasításokat pedig az SP FP egységek hajtják végre.

Page 127: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

105 Created by XMLmind XSL-FO Converter.

• Az FP64 aritmetikai műveleteket (ide értve a az FP64 FMA utasításokat is) mindkét 16-os FP32 csoport

megkapja egyidejűleg, így tehát a DP FMA műveletek egyszeres kibocsájtásúak.

• Az transzcecndentális FP32 utasításokat az ütemező a 4 SPU egységhez továbbítja.

4.31. ábra - A Fermi mag [52]

4.19. Feltételezett működési elv - 3

Page 128: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

106 Created by XMLmind XSL-FO Converter.

• A warp ütemező több shader ciklus alatt képes kibocsájtani a teljes warpot (32 szál) a rendelkezésre álló

feldolgozó egységeknek.

Az adott csoportban lévő feldolgozó egységek száma határozza meg azt, hogy hány shader óraciklusra van

szükség a végrehajtáshoz, pl:

FX vagy FP32 aritmetikai utasítások: 2 óraciklus

FP64 aritmetikai utasítások: 2 óraciklus

(viszont FP64 utasítások esetén nincs lehetőség dupla kibocsájtásra)

FP32 transzcendentális utasítások: 8 óraciklus

Load/store utasítások: 2 óraciklus.

A további utasítások által igényelt óraciklusok számáról a [13] irodalmi hely ad részletesebb felvilágosítást.

4.32. ábra - A Fermi mag [52]

Page 129: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

107 Created by XMLmind XSL-FO Converter.

4.20. Példa: Aritmetikai műveletek kibocsájtási sebessége (művelet/órajel) SM-enként [13]

4.33. ábra -

Page 130: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

108 Created by XMLmind XSL-FO Converter.

4.21. A Fermi GF100 SM warp ütemezési politikája - 1

A hivatalos dokumentációban csak az szerepel, hogy a GF100 többlet ciklusokat nem igénylő prioritásos

ütemezésű dupla kibocsájtású (dual issue zero overhead prioritized scheduling) [11]

4.34. ábra -

Page 131: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

109 Created by XMLmind XSL-FO Converter.

4.22. A Fermi GF100 SM warp ütemezési politikája - 2

Official documentation reveals only that Fermi GT100 has dual issue zero overhead prioritized scheduling [11]

További források alapján [61] valamint az Nvidia GPGPU-k egyik tervezőjének (D. Kirk) a GT80 warp

ütemezéséről tartott előadásának diái alapján (ECE 498AL Illinois, [59]) a következő feltételezéssel élhetünk a

Fermi-ben alkalmazott warp ütemezésről:

• Az ütemező azokat a warp-okat tekinti ütemezésre késznek, amelyeknek a következő utasítása futásra kész,

vagyis minden operandusa rendelkezésre áll.

• A végrehajtásra történő kijelölés egy nem publikált prioritásos ütemezésen alapul, ami feltételezhetően a warp

típusát (pl. képpont warp, számítási warp), a műveletek típusát és a warp korát veszi figyelembe.

• Azonos prioritású, futásra kész warp-ok valószínűleg körforgásos kiválasztással ütemeződnek.

• Ugyanakkor nem egyértelmű az, hogy a Fermi durva vagy finom szemcsézettségű ütemezést használ-e.

A GT80 warp ütemezőjét tárgyaló korai publikációk [59] arra engednek következtetni, hogy a GT80 durva

szemcsézettségű ütemezőt használ, ám ezzel szemben ugyanazon publikációban a warp ütemezőjét

szemléltető ábra finom szemcsézettségű ütemezésre utal, amint azt az alábbiakban részletezzük.

(Itt megjegyezzük, hogy durva szemcsézettségű ütemezésnek nevezzük azt az ütemezési politikát, melynél a

hullámfrontok mindaddig futhatnak, amíg azokat valamely esemény nem készteti várakozásra.

Ezzel szemben finom szemcsézettségű ütemezésnél az ütemező mindenóraciklusban újra kiválasztja a futtatandó

hullámfrontot.)

Megjegyzés

D. Kirk, az Nvidia GPGPU-inak egyik tervezője egyik előadásában [59] részletesen ismerteti a G80 warp

ütemezőjét. Azonban előadásában két ellentmondó ábra található, az egyik durva, a másik finom

szemcsézettségű ütemezésre utal, az alábbiak szerint:

a) A G80 SM-jének mikroarchitektúrája

Page 132: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

110 Created by XMLmind XSL-FO Converter.

• A G80 kibocsájtási ciklusonként egy warp utasítást hív le

• az L1 utasítás cache-ből

• bármelyik utasítás pufferbe.

• Kibocsájtási ciklusonként egy futásra kész warp utasítást bocsájt ki

• bármelyik utasítás pufferből.

• Függőség nyilvántartással (scoreboarding) kerüli el a hazárdokat.

• Egy utasítás akkor futásra kész, ha már minden operandusza rendelkezésre áll,

• Egy futásra kész utasítás kibocsájtható.

• A Kibocsájtás sorrendiségét körforgás vagy a warp kora határozza meg.

• Az SM ugyanazt az utasítást továbbítja végrehajtásra a warp mind a 32 szálának.

4.35. ábra - Warp ütemezés a G80-ban [59]

b) Scheduling policy of warps in an SM of the G80 indicating coarse grain warp scheduling

• A G80 külön (decoupled) memória / processzor futószalagokat használ.

Page 133: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

111 Created by XMLmind XSL-FO Converter.

• Az éppen futó szál egészen addig bocsájthat ki utasításokat, míg a függőség nyilvántartó rendszer

(scoreboarding) meg nem akadályozza ebben.

• Az ütemező háttér időben gondoskodik arról, hogy a következő kiválasztott warp végrehajtása azonnal

megkezdődjön, ha az előtte futó utasítás várakozni kényszerül.

4.36. ábra - Warp ütemezés a G80-ban [59]

Megjegyzés

A megadott ütemezési séma durva szemcsézettségre utal.

c) Finom szemcsézettségű warp ütemezésre utaló szövegrész ill. ábra ugyaneben a forrásban [59]

• Az SM mikroarchitektúrája többlet ciklusok nélküli warp ütemezést valósít meg az alábbiak szerint:

• Azok a warp-ok, melyeknek a soron következő utasítása már végrehajtható, futásra készek.

• A futásra kész warp-ok közül az ütemező prioritásos ütemezési politika alapján választja ki a következő

végrehajtandó warp-ot.

• A kiválasztott warp minden szála azonos utasítást hajt végre.

• A G80-ban az SM 4 órajel alatt képes egy warp összes szálának kiküldeni ugyanazt az utasítást, tekintve azt a

tényt, hogy csupán 8 feldolgozó egység áll a warp-ot alkotó 32 szál rendelkezésére.

Megjegyzés

Az előző ábrával szemben az itt megadott ütemezési séma finom szemcsézettségre utal.

4.37. ábra - Warp ütemezés a G80-ban [59]

Page 134: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

112 Created by XMLmind XSL-FO Converter.

4.23. A Fermi GF100 maximális teljesítményének becslése - 1

a) Egy SM maximális FP32 teljesítménye

A warp utasítások maximális száma/óraciklus:

• dupla kibocsájtás

• 2 óraciklus/kibocsájtás

2 x ½ = 1 warp utasítás/óraciklus

b) Egy GPGPU kártya maximális FP32 teljesítménye (P FP32) of a GPGPU card

• 1 warp utasítás/óraciklus

• 32 FMA/warp

• 2 művelet/FMA

• fs shader frekvenciával

Page 135: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

113 Created by XMLmind XSL-FO Converter.

• n SM egység

P FP32 = 1 x 32 x 2 x 2 x fs x n

Pl. a GTX580 esetén

• fs = 1 401 GHz

• n = 15

P FP32 = 2 x 32 X 1401 x 15 = 1344.96 GFLOPS

4.38. ábra - A Fermi magja [52]

Page 136: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

114 Created by XMLmind XSL-FO Converter.

4.24. A Fermi GF100 maximális teljesítményének becslése - 2

c) Egy SM maximális FP64 teljesítménye

A warp utasítások maximális száma/óraciklus:

• szimpla kibocsájtás

• 2 óraciklus/kibocsájtás

Page 137: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

115 Created by XMLmind XSL-FO Converter.

1 x 1/2 = 1/2 warp utasítás/óraciklus

d) Egy GPGPU kártya max. FP64 teljesítménye (P FP64) of a GPGPU card

• 1 warp utasítás/2 óraciklus

• 32 FMA/warp

2 művelet/FMA

• fs shader frekvenciával

• n SM egység

PFP64 = ½ x 32 x 2 x fs x n

Pl. a GTX480 esetén

• fs = 1 401 GHz

• n = 15, de az FP64 ALU-k mindössze 1/4-e aktivált

PFP64 = 32 x 1/4 x 1401 x 15 = 168.12 GFLOPS

(A teljes (4x) sebességet csak a Tesla eszközök nyújtják.)

4.39. ábra - A Fermi magja [52]

Page 138: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

116 Created by XMLmind XSL-FO Converter.

5. A Fermi GF104 mikroarchitektúrája

2010 júliusában vezették be, grafikai felhasználásra.

A fő különbség a GF104 és a GF100 között a magok száma (SM egységek), amíg a GF100 16 maggal (SM

egység) rendelkezik, addig a GF104-ben mindösszesen 8 mag található.

4.40. ábra - GF104 és GF100 felépítésének összehasonlítása [62]

Page 139: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

117 Created by XMLmind XSL-FO Converter.

Megjegyzés

Az Nvidia a GF104 alapú GTX 460-as csúcs-kártyájában az eszköz túlzott melegedése miatt a 8 SM közül csak

hetet aktivált.

5.1. SM-enként rendelkezésre álló feldolgozó egységek a GF104 és a GF100 esetében

4.41. ábra -

Megjegyzés

Page 140: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

118 Created by XMLmind XSL-FO Converter.

A GF104-ben a GF100-hoz képest bevezetett változtatások célja a magok (SM-ek) grafikai teljesítményének

növelése volt az FP64 teljesítményük rovására, egyúttal felezték a magok számát is az ár és a fogyasztás

csökkentése érdekében.

5.2. A GF 104/114 aritmetikai műveletvégzési sebessége (művelet/óraciklus) SM-enként [13]

4.42. ábra -

5.3. Warp kibocsájtás a Fermi GF104-ben

A GF104 SM-jei két keskeny maggal (feldolgozó futószalag) rendelkeznek, mindegyik dupla szélességű

szuperskalár kibocsájtással. [63]

Az Nvidia hivatalosan nem dokumentálta azt, hogy az egyes kibocsájtási pontokat (slot) (1a - 2b) hogyan

rendelik hozzá a feldolgozó egységek csoportjaihoz.

4.43. ábra -

Page 141: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

119 Created by XMLmind XSL-FO Converter.

5.4. A Fermi GF104 alapú GTX 460-as kártya maximális számítási teljesítmény adatai

A számítási teljesítmény adatok [13], és az előző ábrák alapján:

Maximális FP32 FMA teljesítmény SM-enként:

Shader ciklusonként 2 x 48 FMA művelet minden SM-en

A GTX 460 maximális teljesítménye FMA warp utasítás végrehajtása közben:

Page 142: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

120 Created by XMLmind XSL-FO Converter.

ahol:

• fs: shader frekvencia

• n: SM egységek száma

A GTX 460 esetében

• fs = 1350 MHz

• n = 7

P FP32 = 2 x 48 x 1350 x 7 = 907.2 MFLOPS

A GTX 460 maximális teljesítménye FMA utasítás végrehajtása közben:

PFP64 = 2 x 4 x 1350 x 7 = 75.6 MFLOPS

6. A Fermi GF110 mikroarchitektúrája

6.1. A Fermi GF110 mikroarchitektúrája [64]

• 2010 novemberében vezették be, általános célú felhasználásra.

• A GF110 a GF100 újratervezett változata alacsonyabb fogyasztással és nagyobb sebességgel.

Míg a GF100 alapú csúcs kártyában (GTX 480) túlmelegedés miatt csak 15 SM lehetett aktív, a GF110

kialakítása miatt az Nvidia az arra épülő csúcs kártyában (GTX 580) már mind a 16 SM-et aktiválta,

miközben az órajelet is megemelték.

A GF100 alapú GTX 480 és a GF110 alapú GTX 580 kártyák közötti legfontosabb különbségek

4.44. ábra -

• A megnövelt shader frekvencia és az SM-ek nagyobb száma miatt a GF110 alapú GTX 580-as kártya mintegy

10%-kal magasabb teljesítményt nyújt, mint a GF100-ra épülő GTX 480, valamivel alacsonyabb fogyasztás

mellett.

6.2. A Fermi GF110 felépítése [65]

Page 143: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

121 Created by XMLmind XSL-FO Converter.

4.45. ábra -

6.3. A Fermi négy alcsaládjának magjait (SM egységeit) ábrázoló blokkdiagramm [66]

4.46. ábra -

Page 144: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

122 Created by XMLmind XSL-FO Converter.

6.4. A GF 100/110 aritmetikai műveletvégzési sebessége (művelet/óraciklus) SM-enként [13]

4.47. ábra -

Page 145: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

123 Created by XMLmind XSL-FO Converter.

7. A Fermi GF114 mikroarchitektúrája

7.1. A Fermi GF114 magjának felépítése a GTX 560-as kártyában [67]

4.48. ábra -

Page 146: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

124 Created by XMLmind XSL-FO Converter.

7.2. A Fermi GF114 mikroarchitektúrája

• Az Nvidia 2011 januárjában vezette be a GTX 560Ti kártyával együtt, ezt követte az év májusában az

alacsonyabb teljesítményt kínáló, grafikai felhasználásra szánt GTX560.

A GF114 a GF104 újratervezett, alacsonyabb fogyasztás mellett gyorsabb változata.

Míg a GF104-alapú GTX 460 kártyában csak 7 aktivált SM volt, a GF114 kialakítása lehetővé tette mind a 8

SM engedélyezését a megnövelt teljesítményű GTX 560Ti kártya esetében, magasabb shader órajel mellett.

A GF104 alapú GTX 460 és a GF114 alapú GTX 560/560Ti közötti legfontosabb különbségek

4.49. ábra -

A magasabb shader frekvencia és az SM-ek megnövelt száma miatt a GF114 alapú GTX 560Ti kártya nagyjából

10%-kal magasabb csúcs teljesítménnyel rendelkezik, mint a GF104 alapú GTX 460 kártya, némileg

megnövekedett energia fogyasztás mellett [68].

Page 147: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

125 Created by XMLmind XSL-FO Converter.

7.3. A Fermi négy alcsaládjának magjait (SM egységeit) ábrázoló blokkdiagramm [66]

4.50. ábra -

7.4. A GF 104/114 aritmetikai műveletvégzési sebessége (művelet/óraciklus) SM-enként [13]

4.51. ábra -

Page 148: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Fermi családhoz tartozó

magok és kártyák

126 Created by XMLmind XSL-FO Converter.

Page 149: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

127 Created by XMLmind XSL-FO Converter.

5. fejezet - Az Nvidia Kepler családhoz tartozó magok és kártyák

1. Az Nvidia Kepler családjának áttekintése

5.1. ábra - GPGPU magok, kártyák és az azokat támogató szoftverek áttekintése (3)

1.1. A Kepler alcsaládjai

A Kepler sorozat az alábbi jellemzőkkel bíró két alcsaládra osztható:

5.2. ábra -

1.2. A GK104 Kepler mag [76]

5.3. ábra - A GK104 Kepler magjának blokkdiagrammja

Page 150: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

128 Created by XMLmind XSL-FO Converter.

1.3. A GK110 Kepler mag [70]

5.4. ábra - A GK110 Kepler magjának blokkdiagrammja

1.4. Az Nvidia Kepler GK104 és GK110 magjainak főbb tulajdonságai [70]

5.5. ábra -

Page 151: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

129 Created by XMLmind XSL-FO Converter.

2. A Kepler PTX 3.x főbb újításai

A PTX 2.0-val az Nvidia több fontos újítást vezetett be egyúttal azt ígérve, hogy ezzel a verzióval a pseudo ISA

relatíve állandósulni fog.

A PTX 3.0 megfelelt ennek az ígéretnek, mivel e verzió egyetlen fontos változtatása az, hogy ez a verzió

támogatja a kapcsolódó Kepler GK104 grafikus magokat (amelyeket hivatalos dokumentációkban sm_30 target

architektúrának neveznek) [71].

Az ezt követő PTX 3.1 ezen felül támogatja még [20]:

• a kapcsolódó Kepler GK110 magokat (amelyeket cégen belül sm_35 target architektúrának neveznek) és a

• dinamikus párhuzamosságot [20], amit a következő részben mutatunk be.

3. A Kepler mikroarchitektúrájának főbb újításai

a) Dinamikus párhuzamosság

b) A Hyper-Q ütemezési modell

c) A Grid Management Unit

d) A GPU Direct

Megjegyzés

Ezek az újdonságok csak a GK110 alapú eszközökön érhetőek el.

3.1. a) Dinamikus párhuzamosság [70]

• A Fermiben minden feladatot a CPU indít el, ezt követően a folyamatok a GPU-n lefutnak, az eredmény

pedig visszakerül a CPU-ra.

A CPU elemzi a köztes eredményeket, és amennyiben szükséges, az adatok visszakerülnek a GPU-ba további

feldolgozásra.

Page 152: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

130 Created by XMLmind XSL-FO Converter.

• A Keplerben alkalmazott dinamikus párhuzamosság jelentősen leegyszerűsíti ezt az eljárást, felgyorsítva

ezzel a feldolgozást.

• A dinamikus párhuzamosság lehetővé teszi a Kepler GPUn futó minden kernel számára azt, hogy új kernelt

indítson, és szükség szerint folyamatokat, eseményeket hozzon létre, illetőleg azt, hogy a CPU segítsége

nélkül is lekezelhesse a függőségeket, ahogyan azt a következő ábra szemlélteti.

3.1.1. A Kepler GPU-kban használt dinamikus párhuzamosság elve

5.6. ábra - A Kepler GPU-kban használt dinamikus párhuzamosság elve

3.1.2. Dinamikus párhuzamosság előnyei [70]

A dinamikus párhuzamosság lehetővé teszi, hogy program fejlesztők optimalizálják párhuzamos futásra

készített programjaikat, ez főképp rekurzív és adatfüggő alkalmazásokban eredményezhet komoly gyorsulást.

Dinamikus párhuzamosság használata esetén a programok nagyobb része fog a GPU-n futni így a CPU több

munkát tud elvégezni, vagy más nézőpontból értékelve ugyanahhoz a feladathoz egy gyengébb CPU is

elegendővé válik.

3.2. b) A Hyper-Q ütemezési mechanizmus

A Fermi architektúra legfeljebb 16 kernel egyidejű futtatására képes, amelyek eltérő utasításfolyamokból

származhatnak, ahogyan az a következő ábra jobb oldalán látható.

5.7. ábra - Soros és párhuzamos kernel futtatási modell a Fermiben és a Fermi előtti

eszközökben [25], [18]

Page 153: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

131 Created by XMLmind XSL-FO Converter.

Megjegyzés

1) A CUDA esetében az utasításfolyam (stream) alatt azt a parancssorozatot értjük (pl. kernel indítások),

amelyeket egymás után, sorosan kell végrehajtani [72].

2) A Fermi párhuzamos kernel futtatási képessége hatalmas előrelépés volt a Fermi előtti eszközökhöz (pl. a

G80, G92, G200) képest, mivel a Fermi előtti eszközök lobális ütemezője (amelyett Gigathread ütemezőnek

hívnak) csak sorosan képes feladatokat kiosztani az SM-ek számára, vagyis egyetlen kernel futhat egy adott

pillanatban (soros kernel végrehajtás). Az alábbi ábra bal oldala ezt illusztrálja.

5.8. ábra - Soros és párhuzamos kernel futtatási modell a Fermiben és a Fermi előtti

eszközökben [25], [18]

A Fermi végrehajtási modelljének a hátulütője az volt, hogy végeredményben az összes utasításfolyam

ugyanabba a feladatokat feldolgozó hardver munkasorba kerül, amint azt a következő ábra szemlélteti.

5.9. ábra - Egyetlen hardver munkasor használata több kernelfolyam esetén [70]

Page 154: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

132 Created by XMLmind XSL-FO Converter.

Ez a végrehajtási modell az egyes utasításfolyamok között hamis függőségeket vezet be, ami azt eredményezi,

hogy a ténylegesen független utasításfolyamatok kerneleinek meg kell várnia, míg az előttük lévő kernelek

futása befejeződik. [70].

5.10. ábra - Fermi párhuzamos végrehajtási modellje [70]

Page 155: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

133 Created by XMLmind XSL-FO Converter.

A fenti ábra szerint egyetlen hardveres munkasoron csak a (C,P) és az (R,X) futhat egyidejűleg, mivel a szálak

közötti függőség soros végrehajtást kényszerít ki a folyamon belül [70].

Ezzel ellentétben a Kepler Hyper-Q ütemező eljárása legfeljebb 32 hardveresen kezelt munkasor létrehozását

teszi lehetővé a CPU és a CUDA Munkaelosztó között (Work Distributior Logic - WLD) (a Fermiben

megvalósított egyetlen munkasorral), amint ez a lenti ábrán látható.

5.11. ábra - A Hyper-Q ütemezési modell működési elve [70]

Page 156: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

134 Created by XMLmind XSL-FO Converter.

Több hardveres munkasorral minden kernel munkafolyam párhuzamosan futhat az összes többi

munkafolyammal, az alábbi ábra szerint.

5.12. ábra - A Hyper-Q működési modell elve [70]

Page 157: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

135 Created by XMLmind XSL-FO Converter.

A Hyper-Q használata komoly előnyt jelent az MPI alapú párhuzamos számítások esetében, mivel egyidejűleg

32 hardveresen kezelt folyam (MPI feladat) futhat, nem pedig egyetlen MPI feladat, mint a Fermi ütemezője

esetén. Az alábbi ábra ezt szemlélteti.

5.13. ábra - A Kepler Hyper-Q ütemező mechanizmusa, mely egyidejűle több MPI

feladat kiküldédére képes, szemben a Fermi egyetlen MPI feladat kibocsájtási

képességével [73]

MPI: Message Passing Interface, párhuzamos programozás esetén használt szabványos program interfész.

3.2.1. A Hyper-Q ütemező mechanizmus lehetséges gyorsító hatása

Page 158: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

136 Created by XMLmind XSL-FO Converter.

A GPU teljesítményt visszafogó feladatok közötti hamis függőséget elszenvedő alkalmazások a Hyper-Q

használatával 32-szeres sebességgel képesek futni a jelenlegi kód megváltoztatása nélkül [70].

3.3. c) Grid Management Unit

A korábbiakban említettek szerint a Kepler GPU architektúrája két újdonságot hozott, amivel a kernelek

ütemezésének hatékonysága megnövekedhet:

• Egy Kepler GPU-ban bármelyik futó kernel indíthat új kernelt, és létrehozhatja a szükséges utasításfolyamot

(ezt nevezik dinamikus párhuzamosságnak) és

• emellett több hardveres munkasor érhető el (Hyper-Q ütemezési eljárás).

Ezek a fejlesztések a Fermi architektúra ütemezőjének teljes újratervezését tették szükségessé.

Az új kialakítás fontos eleme a Grid kezelő egység (Grid Management Unit), ami a fenti folyamatok kezeléséért

felel.

A következő oldal mutatja be ennek az új, összetett ütemező alrendszernek a blokkdiagrammját.

A részletes működés ismertetése helyett inkább a vonatkozó szakirodalmi hivatkozásokat adjuk meg [70].

5.14. ábra - A Fermi és a Kepler architektúriák ütemező alrendszereinek

összehasonlítása [70]

3.4. d) A GPU Direct

Külső fejlesztők eszközmeghajtói (pl. hálózati kártyák meghajtói) számára teszi lehetővé a közvetlen

hozzáférést a GPU memóriájához, megkönnyítve ezáltal a GPU-k közötti közvetlen adatátvitelt a lenti ábra

szerint.

Page 159: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

137 Created by XMLmind XSL-FO Converter.

5.15. ábra - GPU Direct a Keplerben [70]

Ez a tulajdonság nagyon hasznos GPGPU alapú DPA-kból (adatpárhuzamos gyorsítókból) épített

szuperszámítógépek esetében, amilyen pl. a Titan szuperszámítógép.

Az Oak Ridge National Laboratory-ban (USA) épített Titan szuperszámítógép (Cray XK7) 16 888 csomópontot

tartalmaz, mindegyikben 16 magos AMD Opteron 6274 (Bulldozer alapú Interlagos) szerver processzor

található, valamint egy Tesla K20X adat gyorsító.

A Titan szuperszámítógép 17.59 PetaFLOPS-os teljesítmény rekordot ért el a LINPACK mérőcsomaggal, ezzel

ez a gép lett a világ leggyorsabb szuperszámítógépe 2012 novemberében. [74], [75].

5.16. ábra - Titan (Cray XK7) szuperszámítógép [75]

3.5. A Kepler mikroarchitektúrájának főbb továbbfejlesztései

Page 160: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

138 Created by XMLmind XSL-FO Converter.

a) A feldolgozó egységek működési frekvenciáját (shader frequency) a mag működési frekvenciájára

csökkentették.

b) A hardveres függőség ellenőrzést egyszerűsítették azáltal, hogy a fordító a programban az ütemező számára

értelmezhető kulcsszavakat (ún. compiler hinteket) helyezhet el.

c) SMX-enként négyszeres kibocsájtású warp ütemezőt vezettek be.

d) A szálanként elérhető regiszterek számát megnégyszerezték.

e) Bevezettek egy általános célra használható 48 KB-os, csak olvasható adat gyorsítótárat.

f) A Fermihez képest megduplázták az L2 cache méretét és sávszélességét.

3.5.1. a) A feldolgozó egységek működési frekvenciájának (shader frequency) lecsökkentése a mag frekvenciájára - 1

Általánosságban elmondható, hogy a teljesítmény duplázására két alapvető elv létezik:

• megduplázhatjuk a feldolgozó egységek órajelét az eredeti kétszeresére vagy

• megduplázhatjuk az elérhető feldolgozó egységek számát, és azokat az eredeti órajellel működtetjük.

Az első lehetőséghez a korábbiakkal nagyjából azonos lapkaterület szükséges, azonban a teljesítmény felvétel

megnő. A második esetben a feldolgozáshoz kétszer akkora lapkaterületre van szükség, azonban a fogyasztás

alacsonyabb lesz, mint az első esetben.

Megjegyzés

• Magasabb órajel frekvenciához (fc) magasabb működési feszültség szükséges (V).

• A processzorok dinamikus disszipációja a következőképpen számolható: D = konstans x fc x V2. vagyis a

magasabb frekveciához magasabb fogyasztás tartozik.

• Másrészről a nagyobb lapkaméret magasabb előállítási költséggel jár, tehát a tényleges kompromisszum az

alacsonyabb fogyasztás és a magasabb előállítási költség között van.

3.5.2. a) A feldolgozó egységek működési frekvenciájának (shader frequency) lecsökkentése a mag frekvenciájára - 2

A G80-as Fermi család tervezői a feldolgozó egységek órajel frekvenciájának (vagyis a shader frekvenciának)

duplázása mellett döntöttek a teljesítmény növelése érdekében, amint az az ábrán látszik.

5.17. ábra - Mag és shader frekvenciák összehasonlítása az Nvidia fontosabb GPU

családjaiban

A választott megoldás előnye a kisebb lapkaméret, ami csökkenti a gyártási költségeket, a hátránya azonban a

másik megoldáshoz képest a megnövekedett fogyasztás.

Page 161: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

139 Created by XMLmind XSL-FO Converter.

3.5.3. a) A feldolgozó egységek működési frekvenciájának (shader frequency) lecsökkentése a mag frekvenciájára - 3

Ezzel ellentétben a Keplerrel kezdődően az Nvidia a fogyasztás csökkentésére helyezte a hangsúlyt, és a nyers

számítási teljesítmény helyett a lehető legjobb fogyasztás/teljesítmény arány elérésére törekedett.

Ennek megfelelően tervezéskor áttértek a másik alapvető lehetőségre, vagyis a feldolgozó egységek számát

növelték meg jelentősen, a shader frekvenciát pedig lecsökkentették a működési frekvenciával megegyező

értékre, a lenti táblázatok szerint.

5.18. ábra - Rendelkezésre álló feldolgozási erőforrások a Kepler SMX és a Fermi SM

esetén

3.5.4. a) A feldolgozó egységek működési frekvenciájának (shader frequency) lecsökkentése a mag frekvenciájára - 4

5.19. ábra - Magok és shaderek órajel frekvenciái az Nvidia főbb GPU családjaiban

3.5.5. A Fermi és Kepler feldolgozó egységei lapkaméretének és energia fogyasztásának összehasonlítása [76]

5.20. ábra -

Page 162: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

140 Created by XMLmind XSL-FO Converter.

Megjegyzés

Az AMD a GPU-iban a feldolgozó egységek órajelét az alap órajelen tartotta, amint azt a következő táblázat

szemlélteti.

5.21. ábra - Nvidia és AMD GPU kártyák főbb jellemzőinek összevetése [77]

3.5.5.1. A Kepler energia hatékonysága a Fermihez képest

Nvidia a Kepler tervezésekor a wattonkénti teljesítményre optimalizált, így a Fermihez képest jelentősen

nagyobb energia hatékonyságot értek el, ahogyan az az alábbi ábrán látható [76].

Page 163: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

141 Created by XMLmind XSL-FO Converter.

5.22. ábra - Fermi és Kepler kártyák teljesítményhatékonyságának összevetése [76]

3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler hints) segítségével

A Fermi mikroarchitektúrájának része egy összetett hardveres ütemező, ami a warp ütemezéshez végez

függőség ellenőrzést az alábbi ábra szerint.

5.23. ábra - A Fermi hardveres függőség ellenőrzője [76]

A Kepler termékvonalban az Nvidia nagyban leegyszerűsítette a hardveres függőség vizsgálatot azáltal, hogy a

fordító kulcsszavakat helyezhet el a programban, melyek az ütemezőnek megadják pl. azt, hogy az utasítások

mikor lesznek futásra készek.

Ez az információ a feldolgozó futószalagok rögzített késleltetései alapján számítható ki, és lényegesen

leegyszerűsítheti az ütemező felépítését (amint az az ábrán látható).

5.24. ábra - A Kepler hardveres függőség ellenőrzésének blokkdiagrammja [76]

3.5.7. c) SMX-enként négyszeres warp ütemező bevezetése

Ahogy azt már korábban említettük, Nvidia a Kepler architektúrában töbszörözte a rendelkezésre álló számítási

erőforrásokat az előző Fermi architektúrához képest, az alábbiak szerint.

Page 164: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

142 Created by XMLmind XSL-FO Converter.

3.5.8. Rendelkezésre álló számítási erőforrások a Kepler SMX és a Fermi SM esetében

5.25. ábra -

A jelentősen megnövekedett számú erőforrás kihasználásához (ld. táblázat) az Nvidia négyszeres kibocsátású

warp ütemezőt vezetett be minden SMX egységhez.

5.26. ábra -

Az SMX négy warp ütemezőjének mindegyike minden óraciklusban kiválaszt kiküldésre egy olyan warp-ot,

melyben két egymástól független utasítás van (ld. lent) [70].

5.27. ábra -

Page 165: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

143 Created by XMLmind XSL-FO Converter.

3.5.9. d) A szálanként elérhető regiszterek számának megnégyszerezése

A GKxxx Kepler magjainak szálai 255 regiszterhez férhetnek hozzá, ez négyszer annyi, mint amennyivel a

Fermi magok szálai rendelkeznek (ld. a lenti táblázatot).

5.28. ábra - Számítási verziók főbb eszköz jellemzői [32]

3.5.10. A Kepler magokban bevezetett szálanként elérhető regiszterszám négyszerezésének hatása

A regisztereket erőteljesebben használó programkódokra jótékony hatással lehet a regiszterek megnövelt száma

[70].

3.5.11. e) Egy általános célra használható 48 KB-os, csak olvasható adat gyorsítótár bevezetése

Page 166: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

144 Created by XMLmind XSL-FO Converter.

A GPGPU-k Fermi generációjában már bevezettek egy 48 KB-os csak olvasható gyorsító tárat. Tapasztalt

programozók gyakran használták ezt a gyorsító tárat annak ellenére, hogy ez csak a textúra egységből elérhető.

A Keplerben ez a csak olvasható gyorsító tár már elérhetővé vált általános felhasználásra is (ld. lent)

5.29. ábra - A Kepler cache architektúrája [70]

3.5.12. f) Az L2 cache méret és sávszélesség megduplázása a Fermihez képest

A GK110-ben az Nvidia megduplázta az L2 cache méretét, így a Fermi magokban (GF100/GF110) elérhető

korábbi 768 KB-os L2 gyorsító tárhoz képest itt már 1.5 MB használható [70]. [70].

Megjegyzés

A GK104 továbbra is 512 KB L2 cache-t tartalmaz, ami ugyanannyi, amennyi a korábbi Fermi GF104/GF114

magokban található.

4. Az Nvidia GK104 Kepler magja, és a hozzá tartozó kártyák

4.1. A Kepler alcsaládjai

A Keplerhez két alcsalád tartozik, ezek a következő jellemzőkkel bírnak:

Page 167: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

145 Created by XMLmind XSL-FO Converter.

5.30. ábra -

4.2. GK104 Kepler mag [76]

5.31. ábra - A GK104 Kepler magjának blokkdiagrammja

4.3. Az Nvidia GK104 mag lapkájának képe [78]

5.32. ábra -

Page 168: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

146 Created by XMLmind XSL-FO Converter.

4.4. A Kepler GK104 mag SMX-ének blokkdiagrammja [76]

5.33. ábra -

Page 169: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

147 Created by XMLmind XSL-FO Converter.

Mind a GeForce GTX 680, mind pedig a K10 8 SMX egységgel rendelkezik.

5.34. ábra - Az Nvidia Kepler-alapú GTX 680 GPGPU kártya [33]

4.5. A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP32 és FP64 teljesítménye

4.5.1. a) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP32 teljesítménye - 1

A GeForce GTX 680 grafikus kártya minden SMX egysége 192 FX/FP32 ALU-val rendelkezik (ld. a következő

ábrát).

4.5.2. a) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP32 teljesítménye - 2 [70]

5.35. ábra -

Page 170: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

148 Created by XMLmind XSL-FO Converter.

A K20-ban az Nvidia lekapcsolt két, a K20X-ben pedig egy SMX egységet.

4.5.3. a) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP32 teljesítménye - 3

Az ALU-k az FMA utasításokat az fSH shader frekvencián futószalag elven hajtják végre. Ebből következően

egy SMX egység maximális FP32 teljesítménye

PFP32: 2 x nFP32 x fSH

ahol

nFP32: Az SMX-ben található FP32 ALU-k száma

fSH: Shader frekvencia.

A tényleges értékek alapján

FP32= 192 és

fSH= 1006 MHz

Az SMX maximális FP32 teljesítménye

PFP32:= 2 x 192 x 1006 = 386.3 GFLOPS

A GeForce GTX 680 8 SMX egységgel rendelkezik, így egy ilyen kártya maximális FP32 teljesítménye

PFP32:= 2 x 192 x 1006 x 8 = 3090 GFLOPS

4.5.4. b) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP64 teljesítménye - 1

Minden SMX egység a GeForce GTX 680-ban 8 FP64-es ALU-val rendelkezik (ld. ábra).

Page 171: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

149 Created by XMLmind XSL-FO Converter.

4.5.5. b) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP64 teljesítménye - 2 [70]

5.36. ábra -

A K20-ban az Nvidia lekapcsolt két, a K20X-ben pedig egy SMX egységet.

4.5.6. b) A GK104 alapú GeForce GTX 680 grafikus kártya maximális FP64 teljesítménye - 3

A GTX 680 grafikus kártya minden SMX egysége 192 FX/FP32 és 8 FP64 ALU-val rendelkezik, így az FP64

teljesítmény 8/192 = 1/24-ed része ugyanezen kártya FP32-es teljesítményének.

Ebből kiszámítható, hogy a GTX 680 kártya FP64 teljesítménye

PFP64:= 3090 GFLOPS/24 = 128.75 GFLOPS

5. Az Nvidia GK110 Kepler magja, és a hozzá tartozó kártyák

5.1. A Kepler alcsaládjai

A Keplernek két alcsaládja van, a következő jellemzőkkel:

5.37. ábra -

Page 172: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

150 Created by XMLmind XSL-FO Converter.

5.2. A GK110 mag

Erre a magra épül a a GTX Titan grafikus kártya és a K20, K20X gyorsító kártya.

Bár a GK110 mag 15 SMX egységgel bír, ahogyan azt korábban már említettük

a GK110 alapú K20-as Tesla esetében az Nvidia két SMX egységet lekapcsolt, így a K20-ban csupán 13 SMX

található, illetőleg 13x192 = 2496 FX/FP32 EU [69],

a GK110 alapú K20X-es Tesla és a GTX Titan esetében az Nvidia egy SMX egységet lekapcsolt, így

mindkettőben csupán 14 SMX található, illetőleg 14x192 = 2688 FX/FP32 EU

5.3. A GK110 Kepler mag [70]

5.38. ábra - A GK110 Kepler magjának blokkdiagrammja

5.3.1. Az Nvidia Kepler GK110 magjának fotója [70]

Page 173: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

151 Created by XMLmind XSL-FO Converter.

5.39. ábra -

5.3.2. Az Nvidia Kepler GK110 magjának felépítése [79]

5.40. ábra -

Page 174: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

152 Created by XMLmind XSL-FO Converter.

5.3.3. Az Nvidia GK110 és GK104 magjainak összehasonlítása [79]

5.41. ábra -

Page 175: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

153 Created by XMLmind XSL-FO Converter.

5.3.4. A Kepler GK110 SMX-ének blokkdiagrammja [70]

5.42. ábra -

Page 176: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

154 Created by XMLmind XSL-FO Converter.

A K20-ban az Nvidia lekapcsolt két, a K20X-ben pedig egy SMX egységet.

5.3.5. a) A GK110 alapú GeForce GTX Titan grafikus kártya maximális FP32 teljesítménye

Az ALU-k az FMA utasításokat az fSH shader frekvencián futószalag elven hajtják végre. Ebből következően

egy SMX egység maximális FP32 teljesítménye:

PFP32: 2 x nFP32 x fSH

ahol

nFP32: Az SMX 32 bites ALU-inak száma

fSH: Shader frekvencia

A tényleges értékek alapján

nFP32= 192 és

fSH= 836 MHz

Így egy SMX maximális FP32 teljesítménye

PFP32:= 2 x 192 x 836 = 321 GFLOPS

A GeForce GTX Titan 14 SMX egységgel rendelkezik, így ezen kártyák maximális FP32 teljesítménye

PFP32:= 2 x 192 x 836 x 14 = 4494 GFLOPS

5.3.6. b) A GK110 alapú GeForce GTX Titan grafikus kártya maximális FP64 teljesítménye

A GTX Titan grafikus kártyában minden SMX egységhez 192 FX/FP32 és 64 FP64 ALU tartozik.

Így tehát az FP64 teljesítménye: 64/192 = 1/3 az FP32 teljesítményéhez képest.

Page 177: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

155 Created by XMLmind XSL-FO Converter.

Ebből adódóan a GTX Titan FP64 teljesítménye:

PFP64:= 4494 GFLOPS/3 = 1498 GFLOPS

Itt jegyezzük meg, hogy a fenti számítással ellentétben a GTX Titan kártyák technológiai dokumentációiban

publikált hivatalos FP64 teljesítménye (PFP64) 1300 GFLOPS.

Az eltérés egyik lehetséges magyarázata az, hogy a GK110 alapú KX20 számítási egység magfrekvenciája

csupán 732 MHz, ebből adódik az 1300 GFLOPS FP64 teljesítmény, viszont a KX20 kártya ára feltételezhetően

sokkal magasabb, mint a GTX Titan kártya ára (≈ 1000 $), ezért Nvidia mesterségesen lecsökkentette a GTX

Titan kártya PFP64 teljesítményét.

6. Az Nvidia mikroarchitektúráinak fejlődése

6.1. a) Az Nvidia Fermi előtti GPGPU-inak FP32 warp kibocsájtási hatékonysága

5.43. ábra -

6.2. b) Az Nvidia Fermi és Kepler GPGPU-inak FP32 warp kibocsájtási hatékonysága

5.44. ábra -

Page 178: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

156 Created by XMLmind XSL-FO Converter.

6.3. c) Az Nvidia Fermi előtti GPGPU-inak FP64 teljesítmény növekedése

A teljesítményt a meglévő FP64 feldolgozó egységek száma és jellemzői határozzák meg.

5.45. ábra -

6.4. d) Az Nvidia Tesla GPGPU-inak FP64 teljesítmény növekedése

A teljesítményt az elérhető DP FP feldolgozó egységek száma korlátozza.

Page 179: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az Nvidia Kepler családhoz tartozó

magok és kártyák

157 Created by XMLmind XSL-FO Converter.

5.46. ábra -

Page 180: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

158 Created by XMLmind XSL-FO Converter.

6. fejezet - Az AMD heterogén rendszerarchitektúrája

1. A HSA elve

Az AMD a Fusion Developer Summit rendezvényén 2011 júniusában mutatta be az FSA (Fusion Systems

Architecture) architektúra működési elvét. Az FSA elnevezést az AMD 2012 januárjában HSA-ra

(Heterogeneous Systems Architecture) módosította, a következő ábra szerint [82], [83].

1.1. A HSA elv első nyivános bemutatása (6/2011) [84], [85]

6.1. ábra -

Megjegyzés

1) 2012 januárjában az AMD a Fusion terméknevet (melyet 2008-ban vezettek be) Heterogeneous Systems

Architecture terméknévre cserélte.

Az AMD terminológiájában a Fusion név jelölte az azonos lapkán CPU-t és GPU-t tartalmazó processzorokat,

mint például az APU vonalba (Accelerated Processing Units) tartozó AMD Llano-alapú A4-A8 processzorok

(2011).

2) AMD-nek a Fusion márkanevet egy bírósági per miatt kellett lecserélnie [86], amelyet az Arctic nevű svájci

alkatrész gyártó cég indított az AMD ellen, mivel e cég bejegyzett védjegye volt a „Fusion”, amit 2006 óta

használtak tápegységeik megnevezésére.

A konfliktus megoldása érdekében az AMD licence használati díjat ajánlott fel, valamint 2012 januárjában

kivezette a Fusion elnevezést.

1.2. A HSA (Heterogeneous Systems Architecture) céljai

Page 181: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD heterogén

rendszerarchitektúrája

159 Created by XMLmind XSL-FO Converter.

6.2. ábra - Az AMD összefoglaló ábrája a processzorok teljesítményének fejlődédéről a

mikroarchitektúra egymást követő fejlődési szakaszaiban (6/2011) [84]

1.2.1. AMD’s view of the evolution path to heterogeneous computing (6/2011) [84]

6.3. ábra - AMD’s view of the evolution to heterogeneous computing [84]

2. A HSA célkitűzései [85], [87]

• A HSA egy heterogén többmagos processzorokhoz kifejlesztett nyílt architektúra, amellyel a hagyományos

programozási modellek esetén elérhető teljesítménynél magasabb érhető el.

• Egységes számítási keretrendszert biztosít a CPU-k és a GPU-k számára, azonos elvek használatával.

• OpenCL-re optimalizált platform.

• Hardverre és szoftverre vonatkozó részeket is tartalmaz.

A HSA főbb komponensei

Page 182: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD heterogén

rendszerarchitektúrája

160 Created by XMLmind XSL-FO Converter.

a) A CPU és a GPU számára közös címteret biztosító memória model, mely feleslegessé teszi a külön címterek

esetén a címterek között szükségessé váló adatmásolásokat.

b) Felhasználói szintű parancs várakozósor, a kommunikációs többlet terhelés minimalizálása érdekében.

c) A HAS IL virtuális ISA (HAS IL vagyis HSA Intermediate Language).

d) Az alkalmazásfeldolgozás modellje.

A HSA specifikációit a 2012 júniusában alapított HSA alapítvány gondozza.

2.1. a) A CPU és a GPU számára közös címteret biztosító memória model [87]

• A HSA legfontosabb architektúrális jellemzője a közös címterű (egységes) memória modell, mely mind a

CPU és mind a GPU számára közösen használható virtuális címteret definiál.

A HSA által elérhető összes memória terület erre a virtuális címtérre van leképezve.

• A CPU-k és a GPU által közösen használt memória koherens.

Ez egyszerűsíti az alkalmazásfejlesztést, mivel nincs szükség explicit gyorsítótár koherencia kezelésre.

• Az egységes címtér legfontosabb előnye, hogy nincs szükség explicit adatmozgatásra.

2.2. b) Felhasználói szintű parancs várakozósor [87]

A HSA alkalmazásonkénti parancs kiküldési várakozósort használ, amin keresztül a GPU-nak parancsok

küldhetők ki. Ebbe a parancs várakozósorba közvetlenül is beírhatók utasítások az operációs rendszer kernel

szolgáltatásainak igénybevétele nélkül (ezért nevezzük felhasználói szintű parancs várakoztató soroknak).

Így a GPU számára szóló parancsok kiküldésekor nem kell várakozni az OS kernel szolgáltatásaira, ezáltal

jelentősen lecsökken a GPU parancsok kiküldési ideje.

2.3. c) A HAS IL virtuális ISA (HSA köztes réteg - HSA Intermediate Layer) [87]. [88]

• A HSA IL egy a heterogén rendszerek számára kifejlesztett virtuális ISA.

Ez esetben a feldolgozás két fázisú. Az első fázisban a fordító egy köztes kódot generál (HAS IL), majd a

második fáziban a JIT fordító (Finalizer) ezt a köztes kódot alakítja a GPU vagy a CPU ISA-nak megfelelő

natív kóddá. Ez meggyorsítja a natív GPU architektúrára írt programok fejlesztését.

• A HSA IL kizárólag a számításokra fókuszál, nem tartalmaz grafikus utasításokat [88].

• A HSA IL várhatóan nem fog módosulni egymást követő GPU implementációk során.

2.4. d) Az alkalmazásfeldolgozás modellje [88]

6.4. ábra -

Page 183: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD heterogén

rendszerarchitektúrája

161 Created by XMLmind XSL-FO Converter.

2.5. Az alkalmazásfeldolgozás elve a HSA-ban [87]

Áttekintés

• A HSA szoftver platfom többféle magas szintű párhuzamos nyelvet támogat, mint például az OpenCL,

C++AMP, C++, C#, OpenMP, Python stb.

• A HSA alkalmazásfeldolgozás két fázisból áll:

• egy fordítási és

• egy futtatási fázisból.

A fordítási fázis

Két komponenst tartalmaz

• a fordító front-endje és

• a fordító back-endje.

A fordító front-endje a magas szintű nyelvet konvertálja a széles körben használt köztes reprezentációs nyelvre,

az LLVM IR-re.

A fordító back-endje alakítja át az LLVM IR-t HSAIL-lé.

LLVM: Low Level Virtual Machine Intermediate Representation, vagyis alacsony szintű virtuális gép köztes

réteg

6.5. ábra - A fordítási fázis

Page 184: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD heterogén

rendszerarchitektúrája

162 Created by XMLmind XSL-FO Converter.

2.6. A futtatási fázis [87]

• A HSA futtató (HSA Runtime) az aktuális környezet részeként működik.

Pl. a HSA futtatót hívja meg az OpenCL Language Runtime.

• A HSA Runtime küldi a feladatot a HSA CPU és GPU eszközök számára.

Kiküldéskor a Finalizer futásidőben átfordítja a HSAIL kódot olyan nyelvre, melyet a GPU ISA értelmezni

képes.

A HSA Runtime küldhet feladatot a HSA CPU-ra is, ilyenkor az operációs rendszer szolgáltatásai hívódnak

meg.

6.6. ábra - A futtatási fázis

Page 185: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD heterogén

rendszerarchitektúrája

163 Created by XMLmind XSL-FO Converter.

Megjegyzés az LLVM IL-hez [89]

Egy klasszikus három fázisú moduláris fordító felépítése az alábbi ábrán látható.

6.7. ábra - Klasszikus három fázisú moduláris fordító felépítése [89]

Page 186: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD heterogén

rendszerarchitektúrája

164 Created by XMLmind XSL-FO Converter.

Példa: A GCC fordító (jelenlegi nevén “GNU Compiler Collection”)

Több nyelvi front-end-et és architektúrára szabott back-end-et tartalmaz, valamint széleskörű közösségi

támogatással rendelkezik.

Az LLVM fordító szintén három fázisú kialakítású, a jól specifikált köztes reprezentációs formátumot pedig

LLVM IR-nek nevezik.

6.8. ábra -

Az LLVM IR egy alacsony szintű RISC szerű virtuális utasítás készlet, amelybe olyan egyszerű utasítások

tartoznak, mint az összeadás, kivonás, összehasonlítás és elágazás.

Az LLVM másik fontos jellemzője az, hogy a GCC-re jellemző monolitikus parancssoros fordító helyett ezt

könyvtár gyűjteménynek tervezték.

Adaptálhatósága és teljesítménye miatt az utóbbi néhány évben az LLVM egy akadémiai projektből (a

fejlesztést az Urbana-Champaign-i University of Illinois kezdte) kinőtte magát és C, C++ valamint Objective C

fordítók univerzális back-end-jévé vált.

2.7. Heterogeneous Sytem Architecture Foundation (HSAF - Heterogén Rendszer architektúra alapítvány)

Az AMD 2012 júniusában hozta létre HSAF-et, ami egy nonprofit szervezet az Egyesült Államokban.

A HSAF céljai

A szervezet célja nyílt szabványok és eszközök definiálása és kidolgozása hardverek és szoftverek számára,

amelyekkel a nagy teljesítményű párhuzamos számítási eszközök (mint például a GPGPU-k) a lehető legkisebb

energia felhasználásával hatékonyan használhatóak.

Alapító tagok

AMD, ARM, Imagination Technologies, MediaTek, Qualcomm, Samsung, és a Texas Instruments.

2.8. Az AMD útiterve a HSA implementációjára [90]

6.9. ábra -

Page 187: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD heterogén

rendszerarchitektúrája

165 Created by XMLmind XSL-FO Converter.

2.9. Az AMD útiterve a HSA implementációjára - részletezés [85]

6.10. ábra -

Page 188: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

166 Created by XMLmind XSL-FO Converter.

7. fejezet - Az AMD Southern Islands családhoz tartozó magok és kártyák

1. Az AMD Southern Islands családjának áttekintése

1.1. Az AMD útiterve a HSA implementációjára (Financial Analyst Day 2012 február) [90]

7.1. ábra -

Megjegyzés

Az AMD útiterve alapján már a 2012-es Southern Islands család GPU-inak hozzá kellett volna férnie a CPU

memóriájához.

Ugyanez a tervezési cél szerepel, az „AMD Graphics Cores Next (GCN) Architecture” című dokumentumában

is [91].

Mindezek ellenére a Southern Islands család (vagyis a GCN) elsőként debütáló kártyája, az AMD HD 7970

specifikációjában, semmiféle említés nincs erről.

Ezzel kapcsolatban különböző internetes forrásokból [pl. 93] arról lehet értesülni, hogy AMD a virtuális

memória támogatást először csak a 2013-ban bejelentett Sea Islands családban fogja megvalósítani.

1.2. Az AMD új GPU mikroarchitektúrája: a Graphics Core Next (GCN) Következő Grafikus Mag)

A GCN mikroarchitektúrát az AMD a Fusion Developer Summit rendezvényén jelentette be 2011 júniusában.

AMD eddig a GCN mikroarchitektúrát a

Page 189: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

167 Created by XMLmind XSL-FO Converter.

• Southern Islands családban (Tahiti magok/7950/7970 GPGPU kártyák) és a

• Sea Islands családban (Venus magok/8950/8970 GPGPU kártyák)

implementálta (ld. a következő ábrát).

1.3. A GCN mikroarchitektúra bejelentése és megvalósítása

7.2. ábra - GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése

(3)

1.4. Az AMD útiterve, mely a GCN mikroarchitektúra megjelenését jelzi a Southern Islands grafikai családban (2012 február) [94]

7.3. ábra -

2. A Southern Islands mikroarchitektúra főbb újításai

• Az AMD az eddigi VLIW4 alapú GPU kialakítás helyett e családdal kezdődően SIMD alapú GPU-kat

vezetett be.

• Az AMD egyúttal bevezette a ZeroCore Power technológiát is.

2.1. VLIW4 alapú GPU-k helyett SIMD alapú GPU bevezetése

Page 190: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

168 Created by XMLmind XSL-FO Converter.

7.4. ábra - Az ATI és az AMD GPU-k mikroarchitektúra fejlődésének főbb állomásai

[95]

2.1.1. Az ATI (melyet AMD 2006-ban felvásárolt) és az AMD GPU-k mikroarchitektúra fejlődésének főbb állomásai [95]

Amint azt a fenti ábra szemlélteti, az AMD GPU-it hagyományosan VLIW alapú ALU-kra alapozta, eleinte

VLIW5-ös, majd VLIW4-es ALU-kat használva.

2.1.2. VLIW alapú ALU-k használata GPU-kban

Az Nvidia-val ellentétben AMD a GPU-it VLIW5 ALU-kra alapozta. Ezekben 5 feldolgozó egység (EU) és egy

elágazás kezelő (Branch Unit) van, szemben az Nvidia által használt SIMD alapú ALU-kkal.

7.5. ábra - Egy VLIW5 ALU blokkdiagrammja [17]

Page 191: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

169 Created by XMLmind XSL-FO Converter.

2.1.3. VLIW-alapú ALU-k

• A fenti ábrán láthatóan AMD a VLIW5-ös ALU-t 6-szoros kibocsájtású VLIW utasításokkal vezérli, melyek

mindegyik EU számára meghatározzák az elvégzendő műveletet.

• A VLIW utasításban egyidejűleg kibocsájtott múveleteknek viszont függőségektől mentesnek kell lennie.

• A fordító feladata olyan VLIW utasítás folyam generálása, amelyben minél több függőségektől mentes

művelet van (statikus függőség feloldás).

2.1.4. Hullámfront sorozat átkódolása VLIW4 utasításokká [96]

Tegyük fel, hogy a fordítónak az alábbi hullámfront sorozatot kell átkódolnia VLIW4 utasításokká.

Mindegyik hullámfrontban 64 munkaelem van, a hullámfrontok között fennálló függőségeket az ábra jelzi.

7.6. ábra -

VLIW4 utasítások használatakor a fordító 4 különböző hullámfrontból helyez végrehajtandó müveleteket a

VLIW4 utasítás 4 kibocsájtási helyére (slot).

A 4 kibocsájtási helyen specifikált műveletet egy 16-széles SIMD egyik feldolgozó egysége fogja végrehajtani.

7.7. ábra - VLIW4 ALU blokkdiagrammja (a Northern Islands család (HD6900-as

kártyájában)) [17]

Page 192: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

170 Created by XMLmind XSL-FO Converter.

7.8. ábra - 16-széles SIMD egység egyszerűsített blokkdiagrammja ([95])

2.1.5. Hullámfrontok ütemezése VLIW4 kódolást feltételezve [96]

7.9. ábra -

Page 193: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

171 Created by XMLmind XSL-FO Converter.

Létező függőségek meggátolják a fordítót abban, hogy minden ciklusban mind a négy helyet betöltse (ld. ábra).

A hullámfront sorozat VLIW4 utasításokká történt átkódolásának eredményét az ábra szemlélteti.

Vegyük észre, hogy a hullámfront 64 munka-elemének ütemezése a 16-széles futószalagot tartalmazó SIMD

egységen 4 óraciklust vesz igénybe.

Összességében a teljes hullámfront sorozat ütemezése 6x4 ciklust igényel.

2.1.6. Grafikus feldolgozás és VLIW alapú ALU-k

Ahogyan azt már említettük, a korai GPU-k a grafikai feldolgozásra helyezték a hangsúlyt.

A grafikai feldolgozás lényegében fix algoritmusok végrehajtását jelenti, így a fordítók jó eséllyel voltak

képesek a rendelkezésre álló kibocsájtási helyek nagy arányú feltöltésére, azaz magas hatásfokot értek el.

Másképp fogalmazva a grafikai alkalmazások nagyon jól illeszkednek a VLIW alapú GPU architektúrákhoz

[95].

2.1.7. Az AMD motivációja a korábbi GPU-kban használt VLIW alapú ALU-k használatára

• A VLIW alapú, statikus függőség feloldást használó GPU architektúra alacsonyabb komplexitású, mint egy

hardveres dinamikus függőség feloldást használó tradicionális SIMD alapú GPU architektúra, emiatt AMD

korábban ezt a megoldást preferálta.

• A gyakorlatban ez annyit jelent, hogy azonos mennyiségű tranzisztor esetén a VLIW alapú GPU-k több

tranzisztort használhatnak feldolgozó egységként, mint a dinamikus függőség feloldást használó SIMD alapú

GPU-k, tehát VLIW alapú GPU-kban jellemzően több EU található, mint a SIMD alapú GPU-kban.

A következő táblázatban az Nvidia dinamikus függőség feloldást használó SIMD alapú GPU-it és az AMD

statikus függőség feloldást használó VLIW-alapú GPU-it hasonlítjuk össze.

Page 194: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

172 Created by XMLmind XSL-FO Converter.

2.1.8. Feldolgozó egységek (EU) száma Nvidia és AMD GPU-k esetében

7.10. ábra -

2.1.9. Az AMD motivációja első GPU-iban VLIW5 alapú ALU-k használatára [97]

Az AMD eredetileg VLIW5 kialakítást választott a feldolgozó egységei számára.

Döntésük a DX9-hez kapcsolódott, ugyanis ott a VLIW5 ALU lehetővé tette a 4 tényezős skalár szorzás (pl.

RGBA szín reprezentáció) mellett egy további skaláris komponens (pl. megvilágítás) párhuzamos kiszámítását,

ami a DX9-ben a vertex shaderek esetén szükséges volt.

2.1.10. Az AMD VILW5 ALU-jának kialakítása

Az AMD a 2007-ben bevezetett R600 GPU magban már a VLIW5 kialakítást használta, bár egy kicsit más

formában, mint a későbbi GPU megvalósításokban (ld. ábra).

7.11. ábra - Feldolgozó egységek (EU) száma Nvidia és AMD GPU-k esetében

Page 195: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

173 Created by XMLmind XSL-FO Converter.

Megjegyzés

A VLIW5 kialakítást egészen az ATI első DX9-et támogató 2002-ben megjelent GPU kártyájáig, az R300

magra épülő Radeon 9700-ig lehet visszavezetni [101].

Az R300 a programozható vertex shader futószalagnál használta ki a VLIW5 előnyeit [102].

7.12. ábra - A vertex shader futószalag az ATI első DX 9.0 támogatású GPU-jában (az

R300 magban) (2002) [102]

Page 196: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

174 Created by XMLmind XSL-FO Converter.

2.1.11. A továbbfejlesztett VLIW5 ALU bevezetése

A 2008-ban bevezetett RV770 GPU magban (Evergreen vonal) az AMD leváltotta a VLIW5 kialakítást egy

továbbfejlesztett VLIW5 kialakításra, ami már támogatta az FP64 MAD utasítást.

7.13. ábra - Az AMD VLIW alapú shader ALU-inak fejlődési lépései

2.1.12. A VLIW4 bevezetése a továbbfejlesztett VLIW5 kialakítás helyett - 1

7.14. ábra - Az AMD VLIW alapú shader ALU-inak fejlődési lépései

A 2010-ben megjelenő Cayman GPU magokban (Northern Islands vonal) az AMD lecserélte a továbbfejlesztett

VLIW5 felépítést VLIW4 felépítésre.

2.1.13. A VLIW4 bevezetése a továbbfejlesztett VLIW5 kialakítás helyett - 2

Page 197: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

175 Created by XMLmind XSL-FO Converter.

A váltás okát az AMD a Cayman (HD 6900/Northern Islands vonal) 2010 decemberi bevezetésekor indokolta. E

szerint VLIW5 architektúrájuk átlagos kihasználtsága DX10/11-es játékok shadereinek futásakor csupán 3.4

volt az ötből, vagyis az 5. EU többnyire kihasználatlan volt [17].

Az új VLIW4 kialakításban az AMD

• eltávolította a T-egységet (Transzcendentális egység),

• az EU-k közül hármat úgy fejlesztett tovább, hogy azok közösen képesekké váltak órajel ciklusonként 1

transzcendentális utasítás végrehajtására és

• mind a 4 EU-t továbbfejlesztette annak érdekében, hogy közösen órajel ciklusonként képesek legyenek egy

FP64 művelet elvégzésére.

7.15. ábra - A Northern Islands vonalban (HD6900) bevezetett VLIW4 ALU

blokkdiagrammja [17]

2.1.14. Az AMD továbbfejlesztett VLIW5 és VLIW4 megvalósításainak összehasonlítása [17]

7.16. ábra -

Page 198: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

176 Created by XMLmind XSL-FO Converter.

Megjegyzés

A VLIW4 ALU előnyei a VLIW5-tel szemben - 1 [103]

Amint azt az előbbiekben már tárgyaltuk, az új VLIW4 kialakításban az AMD

• eltávolította a T-egységet (Transzcendentális egység),

• az EU-k kózül továbbfejlesztett közül hármat úgy, hogy azok közösen képesekké váltak óraciklusonként 1

transzcendentális utasítás végrehajtására és

• mind a 4 EU-t továbbfejlesztette, hogy közösen órajel ciklusonként képesek legyenek egy FP64 művelet

elvégzésére.

Az új felépítésű ALU által óraciklusonként elvégezhető műveletek:

• 4 FX32 vagy 4 FP32 művelet vagy

• 1 FP64 művelet vagy

• 1 transzcendentális + 1 FX32 vagy 1 FP32 művelet,

míg

a korábbi kialakítás képességei:

• 5 FX32 vagy 5 FP32 művelet vagy

• 1 FP64 művelet vagy

• 1 transzcendentális + 4 FX/FP 32 művelet

órajelciklusonként.

A VLIW4 ALU előnyei a VLIW5-tel szemben - 2 [103]

• A korábbi generációkhoz szükséges lapkaméretnek nagyjából a 10%-át sikerült megtakarítani azzal, hogy a

T-egységet AMD eltávolította, miközben a feldolgozó egységek közül hármat alkalmassá tett

Page 199: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

177 Created by XMLmind XSL-FO Converter.

transzcendentális függvények végrehajtására, ill. a 4 feldolgozó egységet együttesen arra, hogy órajel

ciklusonként képes legyen egy FP64 utasítást feldolgozni.

• A szimmetrikus ALU kialakítás egyúttal nagyban leegyszerűsíti a VLIW fordító ütemezési feladatait is.

• A VLIW4 ALU további előnye az, hogy FP64 számításokat az FP32 számítások sebességének ¼-edével

képes elvégezni, a korábbi 1/5-ös aránnyal szemben.

2.1.15. A numerikus számítások fontosságának növekedése és ezzel összefüggésben a GCN microarchitektúra bevezetése

• Amint azt korábban már említettük, az AMD első GPU-i esetében a fő cél a grafikai alkalmazások támogatása

volt.

• Mivel a fix grafikai algoritmusokhoz a VLIW architektúra igen jól illeszkedik, ezért AMD eleinte VLIW-

alapú ALU-kat használt (ami a korábbi ATI megvalósításokon alapult).

• Az idő múlásával azonban a számításigényes alkalmazások (HPC) egyre nagyobb teret nyertek, és a GPU-k,

valamint az adatpárhuzamos gyorsítók egyre több alkalmazási területen váltak fontossá, mint pl. a fizikai

alkalmazások, pénzügyi és üzleti alkalmazások, bányászat stb.

• Ezen túlmenően, a numerikus számítást végző grafikus kártyák és gyorsítók jelentősen nagyobb haszonnal

voltak forgalmazhatók és lényegesen nagyobb fejlődési potenciállal rendelkeznek, mint a hagyományos

grafikai kártyák [95].

• A fentiek miatt Nvidia, AMD és az Intel egyre nagyobb hangsúlyt fektet számításorientált eszközeinek

fejlesztésére, így például Nvidia a Tesla vonalára, AMD a FireStream/FirePro családjaira, vagy Intel a

Larrabee projektjére (melyet időközben leállított), majd később MIC ill. Xeon Phi családként megújítva a

piacra hozott.

• Mindeközben világossá vált, hogy a VLIW-alapú GPU-k kevésbé alkalmasak számítási feladatok

elvégzésére, mivel a fordítók igen eltérő jellegű algoritmusok esetén általában nem képesek a VLIW

kibocsájtási helyeket megfelelő mértékben feltölteni végrehajtandó műveletekkel [95], ezért az AMD

következő lépésként a GPU-iban használt VLIW4 ALU-kat lecserélte az új GCN architektúrájú ALU-kra (a

South Islands családjában), amint ezt a következő ábra szemlélteti.

2.1.16. A VLIW4 alapú ALU-k leváltása SIMD alapú GCN architektúrájú ALU-kra [91]

2.1.16.1. Az AMD GPU mikroarchitektúráinak fejlődése

7.17. ábra -

2.2. Az AMD ZeroCore technológiája [49]

Page 200: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

178 Created by XMLmind XSL-FO Converter.

• a processzorok tervezői jelentős erőfeszítéseket tesznek a processzorok mind aktív mind passzív (idle)

állapotban megjelenő fogyasztásának csökkentésére.

Az aktív fogyasztás csökkentésére több széles körben elterjedt eljárás szolgál, mint pl. az órajel kapuzás

(clock gating), funkcionális egységek kapuzása (power gating) vagy a frame buffer tömörítés.

• A passzív (idle) állapot rövid vagy hosszú ideig maradhat fent.

Az előzetesen beállított értéknél hosszabb passzív állapotokban (long idle periods) a képernyőt kikapcsolják.

Ebben az állapotban viszont a teljes grafikai kártya általában nem kapcsolható le, mivel az operációs

rendszernek és a BIOS-nak érzékelni kell tudnia a kártya jelenlétét.

• Az AMD ezt a problémát orvosolja a ZeroCore technológiával.

A ZeroCore technológia segítségével az AMD táplálási szigeteket (power islands) vezetett be, melyek

egymástól függetlenül kapnak tápfeszültséget.

Hosszú passzív állapot esetén egy olyan táplálásí szigeten kívül, mely a kártyát mind az operációs rendszer,

mind a BIOS számára továbbra is elérhetővé teszi, a teljes GPU lekapcsolható.

2.2.1. A ZeroCore technológia segítségével elérhető passzív állapotú energia fogyasztás [104]

7.18. ábra -

Megjegyzés

Az AMD ZeroCore technológiája mellett a Southern Islands családban az AMD PowerTune technológiát is

használ, melyet a Northern Islands családban vezetett be (a HD 6000/Cayman grafikai kártyákban).

2.2.2. Az AMD PowerTune technológiája

• Azok az alkalmazások, amelyek a GPU-t teljes terheléssel üzemeltetik, könnyedén előidézhetik a kártya

túlmelegedését. Ilyen alkalmazások például a terhelés tesztelésre szolgáló célszoftverek, mint pl. a Futurmark

vagy az OCCT SC8.

A PowerTune nélküli kártyák esetében a túlmelegedést úgy kerülik el, hogy jelentős teljesítmény tartalékot

hagynak a kártyában, így az eszköz nem melegszik túl, és nem károsodik.

Ez a megoldás végeredményben csökkentett órajelet jelent.

Page 201: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

179 Created by XMLmind XSL-FO Converter.

• A PowerTune technológia használata esetén egy mikrovezérlő (microcontroller) folyamatosan ellenőrzi a

lapka hőmérsékletét és az energia fogyasztást.

• Amennyiben a hőmérséklet túlságosan megemelkedik, akkor a megfelelő algoritmus lecsökkenti az órajelet,

így lecsökken a lapka hőmérséklete is, és a károsodás elkerülhető (ld. a következő ábrát).

Következésképpen, a PowerTune technológia alkalmazásával a maximális órafrekvencia magasabb lehet,

mint anélkül.

2.2.3. A Northern Islands családban bevezetett PowerTune technológia (HD 6900/Cayman), 2010 december) [106]

7.19. ábra -

2.2.4. A PowerTune technológia használatának előnye [105]

7.20. ábra -

Page 202: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

180 Created by XMLmind XSL-FO Converter.

3. Az AMD Southern Islands kártyacsaládja

3.1. A Southern Islands család áttekintése

E család alternatív elnevezése a GCN (Graphics Core Next) család.

• A Southern Islands család az AMD első HSA felé mutató GPU családja

• 2011 júniusában jelentették be

• 2011 novemberében vezették be

3.1.1. Az AMD GCN bejelentése és megvalósítása

7.21. ábra - GPGPU magok, kártyák, valamint az azokat támogató szoftverek

áttekintése (4)

Page 203: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

181 Created by XMLmind XSL-FO Converter.

Megjegyzés

Az első kártyák után (HD 7950/70) az AMD bevezetett magasabb órajelen üzemelő verziókat is HD7970 GE

(Gigahertz Edition), valamint HD 7950 Boost néven.

3.1.2. A Southern Islands család főbb jellemzői

• Új alap architektúra (GCN)

• Ehhez kapcsolódó új ISA (GCN ISA)

• AMD ZeroCore energia csökkentő technológia

• Az első 28 nm-es technológiával készített GPU

• Windows 8 támogatás

• PCIe 3.0 első hivatalos támogatása

• DX11.1 első hivatalos támogatása

• OpenCL 1.2 támogatás

• Három eltérő teljesítményű alcsalád

3.1.3. Southern Islands család alcsaládjai - 1 [107]

7.22. ábra - Southern Islands család alcsaládjai [107]

Page 204: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

182 Created by XMLmind XSL-FO Converter.

3.1.4. A Southern Islands család alcsaládjai - 2 [108]

7.23. ábra -

3.1.5. Az AMD és Nvidia grafikus magjai lapkaméreteinek összehasonlítása [95]

7.24. ábra -

Page 205: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

183 Created by XMLmind XSL-FO Converter.

Megjegyzés

A Southern Islands család bemutatásakor csak a legnagyobb teljesítményű alcsaládra koncentrálunk (Tahiti/HD

79xx vonal).

3.1.6. AMD GCN bejelentése és megvalósítása

7.25. ábra - GPGPU magok, kártyák, valamint az azokat támogató szoftverek

áttekintése (3)

3.2. A Radeon HD7970 grafikus kártya Tahiti XT magjának mikroarchitektúrája

3.2.1. A Tahiti XT mag mikroarchitektúrájának áttekintése [95]

7.26. ábra -

Page 206: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

184 Created by XMLmind XSL-FO Converter.

3.2.2. A 7950 (Tahiti Pro) és a 7970 (Tahiti XT) magokat használó kártyák közötti különbségek

A HD 7970 32 számítási egységgel (CU - Compute Units) rendelkezik (az ábrán ez GCN néven szerepel), míg a

HD 7950 magjában AMD négy CU-t letiltott.

7.27. ábra - HD 5950 (Tahiti Pro) blokkdiagrammja [109]

Page 207: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

185 Created by XMLmind XSL-FO Converter.

3.2.3. A számítási egységek (CU - Compute Unit) architekturális áttekintése - egyszerűsített blokkdiagramm [95]

7.28. ábra -

3.2.4. Egy számítási egység (CU) részletes blokkdiagrammja [108]

7.29. ábra -

3.2.5. Egy számítási egység (CU) fő egységei

Amint azt az előző ábrán látható részletes blokkdiagram szemlélteti, a CU-k a következő egységeket

tartalmazzák:

• Előfeldolgozó egység, mely az utasítások lehívására és dekódolására szolgál

• négy 16-széles SIMD egység

• egy skalár egység

• 16 KB L1 utasítás cache, amelyen 4 CU osztozik

• 16 KB L1 adat cache minden CU-n

• 64 KB LDS (Local Data Share - Közös használatú Lokális Tár) CU-nként, melyet mind a négy SIMD egység

közösen használ

• 32 KB skaláris csak olvasható állandó cache, amelyet mind a négy CU közösen használ

Page 208: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

186 Created by XMLmind XSL-FO Converter.

3.2.6. A CU négy 16-széles SIMD egysége [110] (nagymértékben egyszerűsített leírás)

Elsődlegesen kernelek végrehajtására szolgál.

Az előző ábra szerint mind a négy 16-széles SIMD egység (SIMD0 - SIMD3) tartalmaz egy-egy 64 KB register

fájlt és egy Vector MP ALU-t, melyhez 16 feldolgozó egység (EU) tartozik.

7.30. ábra - A 16-széles SIMD egység egyszerűsített blokkdiagrammja ([95] alapján)

• Minden EU futószalag elven működik és 32- vagy 64-bites műveleteket képes elvégezni FX, FP vagy boolean

adattípusokon.

• Minden EU általában a hozzá tartozó 64 KB méretű regiszter fájlból veszi az operandusokat.

• Minden EU képes új 32-bites FX, FP (akár MAD) ill. boolean művelet fogadására minden óraciklusban.

• Minden EU képes egy új 64-bites FP művelet (akár FP MAD művelet) fogadására minden 4. óraciklusban.

• A futószalag elven működő EU-k négy óraciklus késleltetéssel szolgáltatnak eredményt.

3.2.7. A CU skalár egysége [110]

• A skalár egység integer műveleteket hajt végre, és elsődleges feladata a program végrehajtása.

• Óraciklusonként egyetlen műveletet végez el.

• A skalár egység az operandusait jellemzően a hozzá tartozó 8 KB méretű regiszter fájlból veszi.

Megjegyzés

A SIMD és a skalár egységek működésének részletes leírása a [110] hivatkozásban található.

3.2.8. A HD 7970 (Tahiti XT) grafikai kártya maximális FP32 és FP64 teljesítménye

3.2.8.1. a) A maximális FP32 teljesítmény

CU-nként 4 SIMD egységgel, SIMD egységenként 16 EU-val a GPU-ban 32 CU-val számolva egy GPU-ban

összesen 2048 EU van.

925 MHz-es mag frekvenciát alapul véve az elérhető csúcs teljesítmény:

Page 209: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

187 Created by XMLmind XSL-FO Converter.

925 x 106 x 2048 = 1.8944 x 1012 MAD utasítás/sec

MAD utasításonkénti 2 művelettel számolva a maximális FP32 teljesítmény:

Maximális FP32 teljesítmény: 2x 1.8944 x 1012 = 3.7888 TFLOPS

A maximális FP64 teljesítmény

3.2.8.2. b) A maximális FP64 teljesítmény

A maximális FP64 teljesítmény a maximális FP32 teljesítmény negyede, azaz

Maximális FP64 teljesítmény: 3.7888 TFLOPS/4 = 0.9472 TFLOPS

3.2.9. A HD 7970 (Tahiti XT) cache hierarchiája [95]

7.31. ábra -

3.2.10. CPU-nkénti és GPU-nkénti elérhető tárhelyek a HD 7970-ben (Tahiti XT) [110]

7.32. ábra -

Page 210: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

188 Created by XMLmind XSL-FO Converter.

Megjegyzés

Az OpenCL négy memória tartományt definiál: ezek a private, local, global és constant memóriák. Ezen

túlmenően a GPU-k elérik még a host (CPU) memóriáját is a következők szerint [16]:

private memory: egy munkaelemhez tartozik, más munkaelemek nem érhetik el,

local memory: egy munkacsoporthoz tartozik, az adott munkacsoportba tartozó munkaelemek érik el,

global memory: egy adott kontextusban futó összes munkaelem, valamint a host számára is elérhető,

constant memory: csak olvasható régió a host által allokált és inicializált objektumok számára, amelyek a kernel

végrehajtása közben nem változnak,

host (CPU) memory: a gazdagép számára elérhető régió az alkalmazás adatstruktúráinak és programjának

tárolására.

3.2.11. A HD 7970 (Tahiti XT) magban található memóriák méretei, valamint azok olvasási sebessége [16]

7.33. ábra -

Page 211: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

189 Created by XMLmind XSL-FO Converter.

A Stream mag itt EU-t jelent.

Minden méret KByte-ban van megadva (amit itt k-val jelölnek, vagyis pl. a 64k jelentése 64 KB)!

3.3. Működési elvük (Ismétlés a 3.2-es fejezetből)

3.3.1. Számítási feladatok

A GPU esetében a számítási feladat egy párhuzamos adatfolyamot feldolgozó program futtatását (kernelt) jelenti

legfeljebb három dimenziós adastruktúrán - vagyis az egy N dimenziós tartományon (amit végrehajtási

tartománynak is neveznek) végzett számításokat jelent, amint azt a lenti ábra szemlélteti.

7.34. ábra - Az N dimenziós végrehajtási tartomány értelmezése [12]

Page 212: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

190 Created by XMLmind XSL-FO Converter.

3.3.2. Munkaelemek

A munkaelemek a számítás alap egységei. Jellemzően az adattér index értékkel rendelkező elemeit értjük alatta.

A munkaelem, vagy pontosabban a munkaelem feldolgozása az utasítás folyamban meghatározott sorrendben

szálként is értelmezhető.

7.35. ábra - A munkaelem értelmezése ([12] alapján)

Page 213: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

191 Created by XMLmind XSL-FO Converter.

3.3.3. A kernel

A kernel az N-dimenziós tartományon végrehajtandó adatpárhuzamos program. Különféle utasításokat

tartalmazhat, például

• vektor utasításokat, amelyek egy SIMD egység mind a 16 EU-ját vezérlik,

• skalár utasításokat, amelyek a skalár egységeket vezérlik,

• vektor memória utasításokat, amelyek adatátvitelt hajtanak végre (adat olvasását vagy írását) a GPU memória

és a SIMD egység vektor regiszter fájlja (VGPR) között.

Megjegyzés

A számítás orientált adatpárhuzamos programokként értelmezett kernelekkel ellentétben a shaderek grafikai célú

programok, amelyeket a GPU hajt végre.

3.3.4. Munkacsoportok

Az N-dimenziós tartományokat a programozó munkacsoportokra bontja fel a hatékony végrehajtás érdekében.

(ld. a lenti ábrát).

Egy munkacsoport végrehajtását az ütemező egy CU-ra allokálja.

7.36. ábra - A munkacsoport értelmezése [12]

Page 214: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

192 Created by XMLmind XSL-FO Converter.

3.3.5. Hullámfrontok - 1

A hatékony feldolgozás érdekében a munkacsoportokat az Ultra-Threaded Dispatcher hullámfrontokra bontja,

amelyek azonos CU-n lesznek végrehajtva.

7.37. ábra - A hullámfrontok értelmezése [12]

Az azonos munkacsoporthoz tartozó hullámfrontok egymás közt adatokat oszthatnak meg, és a futásuk

szinkronizálható az S_BARRIER utasítással, amely az összes hullámfrontot arra kényszeríti, hogy várják meg,

míg a többi hullámfront is eljut ugyanaddig az utasításig.

3.3.6. Hullámfrontok - 2

• A hullámfront jelenti a legkisebb, CU-n végrehajtásra ütemezhető egységnyi feladatot.

• A hullámfrontok mérete az adott hardver megvalósításától függ.

Page 215: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

193 Created by XMLmind XSL-FO Converter.

A Southern Islands család nagy teljesítményű modelljei, például a HD 7950/70 (Tahiti Pro/XT), valamint

néhány újabb modell esetében a hullámfront mérete 64 munkaelem, míg az alacsonyabb kategóriás, vagy

régebbi modellek, például a HD 54xx 32 munkaelemből álló hullámfrontokat futtatnak.

• Minden hullámfront egy önálló utasítás számlálóval (Program Counter (PC)) rendelkezik, amelyik a

következőként végrehajtandó utasítás memória címét tartalmazza.

Amikor a hullámfront létre jön, a PC a program első utasítására mutat.

3.3.7. Működési elv

A HD 7970 (Tahiti XT) működési elvét a következő, South Islands sorozatú processzor blokkdiagrammját

tartalmazó ábra mutatja be.

7.38. ábra - Southern Islands sorozatú processzor blokkdiagrammja [110]

3.3.8. Számítási feladatok elindítása a GPU-n

• Mielőtt egy alkalmazás kiküldi a GPU-ra a számítási feladatot, először le kell fordítania a kernelt, és be kell

töltenie azt a memóriába.

• A forrás és az eredmény adatokhoz puffereket kell hozzárendelnie.

• Végül létre kell hoznia egy parancs várakozási sort a parancs pufferben, ami leírja a GPU számára a számítási

feladat végrehajtásának módját.

• Az alkalmazások ezt jellemzően API hívások segítségével oldják meg.

3.3.9. Számítási feladatok végrehajtása - 1

• Az utasítás feldolgozó (Command Processor) a végrehajtás indítására szolgáló utasítás beérkezése után

elkezdi egymás után értelmezni a parancs várakozási sorban található utasításokat.

• Az összetartozó parancsokat továbbküldi az Ultra-Threaded Dispatch Processor (többszálú parancskiküldő

processzor) részére.

Page 216: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

194 Created by XMLmind XSL-FO Converter.

• Az Ultra-Threaded Dispatch Processor lefoglalja a kernel futtatásához szükséges erőforrásokat, az N

dimenziós tartományt 64 munkaelemet tartalmazó hullámfrontokra bontja (a HD 7970 esetében), és kiküldi a

CU egységre a munkacsoportokat és a hullámfrontokat.

• A kernel bekerül a feladat megoldására kiválasztott CU, vagy CU-k utasítás gyorsítótáraiba. (Jegyezzük meg,

hogy 4 CU közösen használ egy 16 KB-os utasítás gyorsítótárat.)

• Ezt követően az CU-k megkezdik az utasítások lehívását az utasítás gyorsítótárból az utasítás pufferükbe,

ahonnan az utasításokat kiküldik a megfelelő feldolgozó egységek számára (SIMD egységek, skaláris

egységek, memória rendszer).

3.3.10. Számítási feladatok végrehajtása - 2

Egy CU mind a négy SIMD egysége képes párhuzamosan több, azonos munkacsoportba tartozó hullámfront

feldolgozására.

Ebből következően minden CU négy aktív program számlálóval (PC) rendelkezik (ld. ábra).

7.39. ábra - CU blokkdiagrammja [110]

Összességében a CU 4x10 utasítás puffert biztosít, az ábrának megfelelően.

3.3.11. Számítási feladatok végrehajtása - 3

A 16 EU-t tartalmazó SIMD egységnek nyilvánvalóan négy óraciklusra van szüksége, hogy a hullámfront mind

a 64 munkaelemét fogadja.

A 16 EU-t tartalmazó SIMD egységnek nyilvánvalóan négy óraciklusra van szüksége, hogy a hullámfront mind

a 64 munkaelemét fogadja.

Új FX32 vagy FP32 típusú művelet minden óraciklusban küldhető az EU futószalagjára, míg az EU FP64 típusú

adatokat csak minden 4. ciklusben képes fogadni.

A hullámfrontok végrehajtása mindaddig folytatódik, míg a végrehajtás el nem ér a kernel végére, ekkor annak

végehajtása befejeződik és a CU egy új hullámfront végrehajtását kezdi el.

3.4. A HD 7970 (Tahiti XT) teljesítmény adatai és fogyasztása [110]

Page 217: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

195 Created by XMLmind XSL-FO Converter.

3.4.1. a) A kártya teljesítménye játékokban

2012 végén az AMD és az Nvidia legerősebb grafikus kártyáinak (Southern Islands/GCN az AMD esetében és a

Kepler-alapú GTX 680 az Nvidia-nál) teljesítménye játékok futtatásakor közel azonos, amint azt a következő

két ábra szemlélteti.

3.4.2. a) Nagy teljesítményű grafikus kártyák teljesítménye játékokban - 1 [50]

7.40. ábra -

A GE jelzés nagyjából 15%-kal megemelt órajel frekvenciát jelent.

3.4.3. a) Nagy teljesítményű grafikus kártyák teljesítménye játékokban - 2 [50]

7.41. ábra -

Page 218: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

196 Created by XMLmind XSL-FO Converter.

3.4.4. b) Nagy teljesítményű grafikus kártyák teljesítménye számítási feladatokon mérve [50]

7.42. ábra -

Page 219: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

197 Created by XMLmind XSL-FO Converter.

Ahogyan az az ábrán is látszik, 2012 végén az AMD és az Nvidia legerősebb grafikus kártyái közel egyenlő

számítási teljesítményre voltak képesek.

3.4.5. c) Terhelés alatti energia fogyasztás (teljes terhelésen) [50]

7.43. ábra -

Page 220: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

198 Created by XMLmind XSL-FO Converter.

Az ábrából látszik, hogy az Nvidia GTX 680 kevesebbet fogyaszt teljes terhelésen, mint az AMD HD 7970.

3.4.6. d) Üresjárati fogyasztás [50]

A bevezetett AMD ZeroCore Power technológiának köszönhetően az AMD HD 7970 passzív fogyasztása

lecsökkent nagyjából az Nvidia GTX 680 fogyasztásának szintjére.

7.44. ábra -

Page 221: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Southern Islands családhoz

tartozó magok és kártyák

199 Created by XMLmind XSL-FO Converter.

Page 222: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

200 Created by XMLmind XSL-FO Converter.

8. fejezet - Az AMD Sea Islands családja

• Ez az AMD második HSA-t használó architektúrája.

1. A Sea Islands család helye az AMD 2013-as útitervében [111]

8.1. ábra -

2. A Sea Islands család fő jellemzői

Az útitervek 2012 februári közzétételekor az AMD nem jelezte egyértelműen, hogy a Sea Islands család a HSA

mely jellemzőit támogatja [112].

8.2. ábra -

Page 223: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Az AMD Sea Islands családja

201 Created by XMLmind XSL-FO Converter.

3. Az AMD 2. generációs GCN-jének, a Sea Islands családnak a tervezett bevezetése

8.3. ábra - GPGPU magok, kártyák, valamint az azokat támogató szoftverek áttekintése

(4)

Megjegyzés

Az AMD az első megvalósított 2. generációs GCN kártyát (HD 7950/70) követően bevezette a magasabb

órajelű változatokat, a HD7970 GE-t (Gigahertz Edition) és a HD 7950 Boost-ot.

4. A HD 8950/70 grafikus kártyák fő paraméterei

Az AMD által eddig publikált főbb paramétereket a 3.3-as fejezetben már összefoglaltuk.

Page 224: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

202 Created by XMLmind XSL-FO Converter.

9. fejezet - Kitekintés

A GPGPU-k ismertetésének e részében az AMD és az Nvidia grafikai vonalainak jövőbeli fejlesztési útiterveit

mutatjuk be, valamint áttekintést nyújtunk az Intel újonnan bevezetett Xeon Phi családjáról (ezt korábban MIC-

nek (Many Integrated Cores) nevezték, és kifejezetten HPC alkalmazások futtatására tervezték).

1. Nvidia útiterve 2014-re és tovább

9.1. ábra -

1.1. A Maxwell CPU + GPU

Az Nvidia 2014-re ütemezi.

Fő jellemzői [115]:

• A Maxwell nem csupán egy GPU, hanem egy GPU és egy CPU integrált együttese egy lapkán.

A CPU egy ARM v8-kompatibilis 64-bites mag (Denvernek hívják), ennél többet azonban nem árultak el

róla.

• A Maxwell egységes virtuális memória támogatással rendelkezik.

Mind a GPU, mind a CPU elérheti a rendszer memóriát.

A megoldás hasonlít az AMD HSA (Heterogeneous System Archtecture - heterogén rendszer architektúra)

mikroarchitektúrájában bevezetett egységes memóriához és nagyban megkönnyíti a GPU programozását.

Ahogyan azt a 6. fejezetben tárgyaltuk, az AMD az egységes virtuális memóriát 2013-ban tervezi bevezetni.

Az Nvidia szerint a Maxwell processzor három fontos szempontból nyújt előrelépést:

• Megnövelt grafikus teljesítmény,

• egyszerűsített programozás és

• energia hatékonyság.

Page 225: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

203 Created by XMLmind XSL-FO Converter.

1.2. A Volta CPU + GPU

A hivatkozott útiterv szerint Nvidia a következő processzorát Volta-nak fogja nevezni, és rétegezett (stacked)

DRAM-mal fogja ellátni, a következő ábra szerint.

1.3. Volta processzor rétegezett DRAM-mal [113]

9.2. ábra -

Megjegyzés

1) Itt jegyeznénk meg, hogy az AMD már 2011-ben bemutatott egy rétegezett memóriájú prototípust, a

kereskedelmi bevezetésre alkalmas változatról azonban eddig még nem érkezett semmilyen információ. [114].

2) Másrészről az Intel az Atom termékcsaládjában rétegezett memóriát használt, először a 2012 decemberében

bemutatott Clover Trail tábla platformjukon, ahol ezt a megoldást PoP (Package-on-Package) memóriának

nevezték. [116].

E platform esetén Intel az LPDDR2 memória chipet az SoC lapka következő rétegeként valósította meg,

ahogyan az a lenti ábrán látható.

A memória chipet a SoC tetejére helyezték, egy köztes rétegre forrasztva.

Ezáltal lerövidítették az elérési időt, és megnövelték a sávszélességet.

9.3. ábra - Az Intel Package-on-Package memória rétegezett megoldása a Clover Trail

tábla platformon [116]

2. AMD grafikai útiterve 2013-ra

Page 226: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

204 Created by XMLmind XSL-FO Converter.

A diasor készítésekor az interneten nem volt fellelhető 2014-re vonatkozó grafikai útiterv.

A legkésőbbi terv 2013-ról szól, és a Sea Islands (HD 8000) grafikai kártya családon túl nem tartalmaz újabb

grafikai kártya családot, a lenti ábrának megfelelően.

9.4. ábra - Az AMD asztali gépekbe szánt grafikai kártyáinak 2013-as útiterve [117]

3. Az AMD asztali gépekbe szánt grafikai kártyáinak 2013-as útiterve

9.5. ábra -

4. Az Intel Xeon Phi családja

Az Intel 2010 májusában vezette be MIC (Many Integrated Core) DPA (Data Parallel Accelerator) néven [118].

Főképp az Intel nem túl sikeres Larrabee projektjén alapul, figyelembe vették az SCC (Single Cloud Computer)

fejlesztésük tapasztalatait is.

9.6. ábra -

Page 227: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

205 Created by XMLmind XSL-FO Converter.

A termékcsaládot Intel kizárólag HPC alkalmazások futtatására tervezte, és PCIe add-on kártyaként

implementálta.

4.1. A Knights Ferry protípusa

Az Intel 2010 májusában mutatta be MIC családjának prototípusát, melyet Knight Ferry társprocesszornak

neveztek el, és elérhetővé tették fejlesztők számára [119].

9.7. ábra -

4.2. Az MIC elnevezés módosítása Xeon Phi-re, és a nyílt forráskódú szoftverek támogatása

2012 júniusában az Intel a DPA társprocesszor jelleget hangsúlyozandó MIC családját átnevezte Xeon Phi-re,

ezzel egyben világossá téve azt is, hogy milyen típusú processzor társaként tervezték azt.

Ugyanekkor az Intel nyílt forráskódú szoftver támogatást biztosított a Xeon Phi családjához, amint azt a

következő ábra szemlélteti.

Page 228: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

206 Created by XMLmind XSL-FO Converter.

9.8. ábra - Az Intel Xeon Phi család áttekintése (a korábbi MIC család)

4.3. A Knights Corner processzor

2010 májusában az Intel bejelentette a Knights Corner otthoni felhasználásra szánt processzorát, amit végül

2012 novemberében dobott piacra [119]

9.9. ábra -

4.4. A Xeon Phi család főbb jellemzői [120]

Megcélzott alkalmazási terület

Masszívan párhuzamos HPC alkalmazások

Programozási környezet

Általános célú programozási környezet

Page 229: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

207 Created by XMLmind XSL-FO Converter.

• Linux alatt fut

• Képes futtatni Fortranban, C-ben, C++-ban, OpenCL 1.2-ben (2013 februári beta verzió) készített

alkalmazásokat.

• Támogatja az x86 memória modellt.

• Rendelkezésre állnak az x86-on megszokott fejlesztői eszközök (programkönyvtárak, fordítók, Intel VTune,

debuggerek stb.).

4.5. A Xeon Phi társprocesszor család elsőként megjelenő tagjai és főbb jellemzőik [121]

9.10. ábra -

Megjegyzés

Az Intel az SE10P/X alcsaládot egyedi megoldások alapjául szánja, amilyenek például a szuperszámítógépek.

Az egyik első ilyen megoldás a TACC Stampede, built in Texas Advanced Computing Center (2012).

9.11. ábra - Intel Xeon Phi családjának fő jellemzői [122], [123]

Page 230: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

208 Created by XMLmind XSL-FO Converter.

4.6. A Knights Corner (KCN) DPA felépítése [120]

9.12. ábra -

4.7. A Knights Corner mikroarchitektúrája [120]

A Knights Corner az elődeinek számító Larrabee és Knights Ferry kialakításához hasonlatosan egy kétirányú,

gyűrű topológián alapuló architektúra, amelyben a korábbiakhoz képest megemelt számú (60/61), jelentősen

továbbfejlesztett Pentium mag található, valamint minden maghoz tartozik egy saját 256 kB méretű koherens L2

gyorsítótár.

Page 231: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

209 Created by XMLmind XSL-FO Converter.

9.13. ábra - A Knights Corner mikroarchitektúrája [120]

4.8. A lapka dupla gyűrűs összeköttetéseinek kialakítása [122]

9.14. ábra -

4.9. A Knights Corner magjának blokk diagrammja [120]

9.15. ábra -

Page 232: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

210 Created by XMLmind XSL-FO Converter.

4.10. A vektor feldolgozó egység blokkvázlata és futószalag alapú működése [120]

9.16. ábra -

EMU: Extended Math Unit - Kiterjesztett matematikai egység

Transzcendentális műveletek (pl. reciprok, négyzetgyök és log) műveletek végrehajtására alkalmas, így ezek a

műveletek vektoros formában is végrehajthatóvá váltak [120]

4.11. A Xeon Phi társprocesszor rendszer-architektúrája [122]

9.17. ábra -

Page 233: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

211 Created by XMLmind XSL-FO Converter.

Megjegyzés

A System Management Controller (SMC - Rendszer Management Vezérlő) egység három I2C interfésszel

rendelkezik, ezekkel látja el a hőmérséklet vezérlést, valamint a státusz információ továbbítását.

Ennek részletei a vonatkozó adatlapban megtalálhatóak [122].

4.12. The Xeon Phi 5110P társprocesszor [124]

9.18. ábra -

Page 234: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

212 Created by XMLmind XSL-FO Converter.

4.13. A Xeon Phi társprocesszor nyáklap (hátoldal) [122]

9.19. ábra -

4.14. Az aktív hűtéssel ellátott Xeon Phi 3100 szerelési ábrája [122]

9.20. ábra -

Page 235: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

213 Created by XMLmind XSL-FO Converter.

4.15. Az Intel többmagos, sokmagos és cluster architektúráinak közös fejlesztési platformja [125]

9.21. ábra -

4.16. Az Intel Knight Corner és a versenytársai teljesítmény hatékonyságának összehasonlítása [120]

9.22. ábra -

Page 236: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

214 Created by XMLmind XSL-FO Converter.

4.17. A Xeon Phi 5110P, SE10P/X és a 2-processzoros Intel Xeon szerver maximális teljesítményének összehasonlítása [126]

9.23. ábra -

A referencia rendszer egy 2-processzoros Xeon server, melyben két Intel Xeon E5-2670 processzor van (8 mag,

20 MB L3 cache, 2.6 GHz órajel, 8.0 GT/s QPI sebesség, DDR3 - 1600 MT/s).

4.18. Xeon 5110P és egy 2-processzoros Sandy Bridge alapú Xeon szerver teljesítményének [126]

9.24. ábra -

Page 237: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

215 Created by XMLmind XSL-FO Converter.

4.19. A Xeon Phi 5110P sebességének összehasonlítása egy 2-processzoros Xeon szerverrel

A fenti ábrán látható átlagos 2 - 4-szeres gyorsulás HPC esetében nem túlságosan meggyőző.

Megjegyzés

A referencia rendszer egy 2-processzoros Xeon server, amiben két Intel Xeon E5-2670 processzor van (8 mag,

20 MB L3 cache, 2.6 GHz órajel, 8.0 GT/s QPI sebesség, DDR3 - 1600 MT/s).

4.20. Az Intel Xeon Phi családjának útiterve [127]

9.25. ábra -

Page 238: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

216 Created by XMLmind XSL-FO Converter.

4.21. Assessing the peak FP64 performance of the Knights Corner coprocessor with that of Nvidia’s and AMD’s recent devices

A Knights Corner társprocesszor és az AMD, valamint az Nvidia legfrissebb modelljei FP64 teljesítményének

összehasonlítása

4.22. a) Intel Knights Corner családjának FP64 teljesítménye [126]

9.26. ábra -

Page 239: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

217 Created by XMLmind XSL-FO Converter.

4.23. b) Az Nvidia Tesla GPGPU-inak FP64 teljesítménye

9.27. ábra -

Page 240: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Kitekintés

218 Created by XMLmind XSL-FO Converter.

4.24. c) AMD csúcskategóriás GPU-inak FP64 teljesítménye

9.28. ábra -

Ahogy azt az összehasonlító ábrák mutatják, mindhárom gyártó csúcskategóriás kártyája egyaránt közel

1TFLOP FP64-es teljesítményt nyújt, így jelenleg aligha indokolt egy teljesítménysorrendet megállapítani

közöttük.

Page 241: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

219 Created by XMLmind XSL-FO Converter.

10. fejezet - Hivatkozások

[1] Wikipedia: Dolphin triangle mesh, http://en.wikipedia.org/wiki/File:Dolphin_triangle_mesh.png

[2] Wikipedia, DirectX, http://en.wikipedia.org/wiki/DirectX

[3] Patidar S. & al., Exploiting the Shader Model 4.0 Architecture, Center for Visual Information Technology,

IIIT Hyderabad, March 2007, http://research.iiit.ac.in/~shiben/docs/SM4_Skp-Shiben-Jag-

PJN_draft.pdf

[4] Dietrich S., Shader Model 3.0, April 2004, Nvidia, http://www.cs.umbc.edu/~olano/s2004c01/ch15.pdf

[5] Microsoft DirectX 10: The Next-Generation Graphics API, Technical Brief, Nov. 2006, Nvidia,

http://www.nvidia.com/page/8800_tech_briefs.html

[6] Nvidia GeForce 8800 GPU Architecture Overview, Vers. 0.1, Nov. 2006, Nvidia,

http://www.nvidia.com/page/8800_tech_briefs.html

[7] CUDA C Programming Guide, Nvidia.com, http://docs.nvidia.com/cuda/cuda-c-programming-

guide/index.html

[8] Chu M. M., GPU Computing: Past, Present and Future with ATI Stream Technology, AMD, March 9 2010,

http://developer.amd.com/gpu_assets/GPU%20Computing%20-

%20Past%20Present%20and%20Future%20with%20ATI%20Stream%20Technology.pdf

[9] Hwu W., Kirk D., Nvidia, Advanced Algorithmic Techniques for GPUs, Berkeley, Jan. 24-25 2011,

http://iccs.lbl.gov/assets/docs/2011-01-24/lecture1_computational_thinking_Berkeley_2011.pdf

[10] Nvidia CUDA Compute Unified Device Architecture Programming Guide, Version 2.0, June 2008, Nvidia,

http://developer.download.nvidia.com/compute/cuda/2_0/docs/NVIDIA_CUDA_Programming_Guide

_2.0.pdf

[11] Whitepaper, NVIDIA’s Next Generation CUDA Compute Architecture: Fermi, V1.1, 2009,

http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Architecture_Whi

tepaper.pdf

[12] Rubin N., HSAIL, AMD Fusion Developer Summit, 2012 Nvidia CUDA C Programming Guide, Version

3.2, October 22 2010,

http://developer.download.nvidia.com/compute/cuda/3_2/toolkit/docs/CUDA_C_Programming_Guide.

pdf

[13] Nvidia CUDA C Programming Guide, Version 3.2, October 22 2010,

http://developer.download.nvidia.com/compute/cuda/3_2/toolkit/docs/CUDA_C_Programming_Guide.

pdf

[14] OpenCL Introduction and Overview, Chronos Group, June 2010,

http://www.khronos.org/developers/library/overview/opencl_overview.pdf

[15] The OpenCL Specification, V1.1, Document Revision: 44, Jan. 6 2011,

http://developer.amd.com/wordpress/media/2012/10/opencl-1.1.pdf

[16] AMD Accelerated Parallel Processing OpenCL Programming Guide, Rev. 1.2, AMD, Jan. 2011,

http://developer.amd.com/gpu/amdappsdk/assets/AMD_Accelerated_Parallel_Processing_OpenCL_Pr

ogramming_Guide.pdf

[17] Goto H., AMD GPU VLIW Evolution, 2010,

http://pc.watch.impress.co.jp/video/pcw/docs/532/796/p17.pdf

[18] Next Gen CUDA GPU Architecture, Code-Named “Fermi”, Press Presentation at Nvidia’s 2009 GPU

Technology Conference, (GTC), Sept. 30 2009,

http://www.nvidia.com/object/gpu_tech_conf_press_room.html

Page 242: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Hivatkozások

220 Created by XMLmind XSL-FO Converter.

[19] Kirsch N., NVIDIA GF100 Fermi Architecture and Performance Preview, Legit Reviews, Jan 20 2010,

http://www.legitreviews.com/article/1193/2/

[20] Parallel Thread Execution, ISA Version 3.1, Nvidia Compute, Sept. 13 2012, Stich T., OpenCL on

NVIDIA GPUs, Nvidia, http://sa09.idav.ucdavis.edu/docs/SA09_NVIDIA_IHV_talk.pdf

[21] Stich T., OpenCL on NVIDIA GPUs, Nvidia,

http://sa09.idav.ucdavis.edu/docs/SA09_NVIDIA_IHV_talk.pdf

[22] Hensley J., Yang J., Compute Abstraction Layer, AMD, Febr. 1 2008,

http://coachk.cs.ucf.edu/courses/CDA6938/s08/UCF-2008-02-01a.pdf

[23] Reference Guide: AMD HD 6900 Series Instruction Set Architecture, Revision 1.0, Febr. 2011,

http://developer.amd.com/gpu/AMDAPPSDK/assets/AMD_HD_6900_Series_Instruction_Set_Archite

cture.pdf

[24] Balfour J., CUDA Threads and Atomics, April 25 2011, http://mc.stanford.edu/cgi-

bin/images/3/34/Darve_cme343_cuda_3.pdf

[25] Kogo H., RV770 Overview, PC Watch, July 02 2008,

http://pc.watch.impress.co.jp/docs/2008/0702/kaigai_09.pdf

[26] Fatahalian K., “From Shader Code to a Teraflop: How Shader Cores Work,”Workshop: Beyond

Programmable Shading: Fundamentals, SIGGRAPH 2008 Nvidia Compute PTX: Parallel Thread

Execution, ISA, Version 2.3, March 2011,

http://developer.download.nvidia.com/compute/cuda/4_0_rc2/toolkit/docs/ptx_isa_2.3.pdf

[27] Nvidia Compute PTX: Parallel Thread Execution, ISA, Version 2.3, March 2011,

http://developer.download.nvidia.com/compute/cuda/4_0_rc2/toolkit/docs/ptx_isa_2.3.pdf

[28] Compute Abstraction Layer (CAL) Technology – Intermediate Language (IL), Version 2.0, AMD, Oct.

2008 SPIR 1.0 Specification for OpenCL, Aug. 24 2012,

http://www.khronos.org/registry/cl/specs/spir_spec-1.0-provisional.pdf

[29] SPIR 1.0 Specification for OpenCL, Aug. 24 2012, http://www.khronos.org/registry/cl/specs/spir_spec-1.0-

provisional.pdf

[30] Nvidia OpenCL Overview, 2009 http://gpgpu.org/wp/wp-content/uploads/2009/06/05-

OpenCLIntroduction.pdf

[31] Nvidia CUDA TM Fermi TM Compatibility Guide for CUDA Applications, Version 1.0, February 2010,

http://developer.download.nvidia.com/compute/cuda/3_0/docs/NVIDIA_FermiCompatibilityGuide.pdf

[32] Wikipedia, CUDA, http://en.wikipedia.org/wiki/CUDA http://en.wikipedia.org/wiki/CUDA

[33] Wikipedia, Comparison of Nvidia graphics processing units,

http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units

[34] SLI Minimum System Requirements, Geforce.com,

http://www.geforce.com/hardware/technology/sli/system-requirements

[35] Wikipedia, Comparison of AMD graphics processing units,

http://en.wikipedia.org/wiki/Comparison_of_AMD_graphics_processing_units

[36] Wasson S., Nvidia's GeForce GTX 580 graphics processor Tech Report, Nov 9 2010,

http://techreport.com/articles.x/19934/1

[37] NVIDIA Forums: General CUDA GPU Computing Discussion, 2008

http://forums.nvidia.com/index.php?showtopic=73056

[38] NVIDIA G80: Architecture and GPU Analysis, Beyond3D, Nov. 8 2006,

http://www.beyond3d.com/content/reviews/1/11

Page 243: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Hivatkozások

221 Created by XMLmind XSL-FO Converter.

[39] D. Kirk and W. Hwu, Programming Massively Parallel Processors, 2008 Chapter 3: CUDA Threads,

http://courses.engr.illinois.edu/ece498/al/textbook/Chapter3-CudaThreadingModel.pdf

[40] Shrout R., Nvidia GeForce 8800 GTX Review – DX10 and Unified Architecture, PC Perspective, Nov 8

2006 http://swfan.com/reviews/graphics-cards/nvidia-geforce-8800-gtx-review-dx10-and-unified-

architecture/g80-architecture

[41] GeForce Graphics Processors, Nvidia, http://www.nvidia.com/object/geforce_family.html

[42] Wasson S., Nvidia's GeForce GTX 480 and 470 graphics processors Tech Report, March 31 2010,

http://techreport.com/articles.x/18682

[43] Wasson S., AMD's Radeon HD 5870 graphics processor, Tech Report, Sept 23 2009,

http://techreport.com/articles.x/17618/1

[44] Hoenig M., Nvidia GeForce 580 Review, HardwareCanucks, Nov. 8, 2010,

http://www.hardwarecanucks.com/forum/hardware-canucks-reviews/37789-nvidia-geforce-gtx-580-

review-5.html

[45] Wikipedia, Radeon HD 8000 Series, http://en.wikipedia.org/wiki/Sea_Islands_%28GPU_family%29

[46] Tom’s Hardware Gallery, http://www.tomshardware.com/gallery/Bare-Radeon-HD-5970,0101-230349-

7179-0-0-0-jpg-.html

[47] Tom’s Hardware Gallery, http://www.tomshardware.com/gallery/two-cypress-gpus,0101-230369-7179-0-

0-0-jpg-.html

[48] Angelini C., AMD Radeon HD 6990 4 GB Review, Tom’s Hardware, March 8, 2011,

http://www.tomshardware.com/reviews/radeon-hd-6990-antilles-crossfire,2878.html

[49] Walton S., AMD Radeon HD 7970 Review, Techspot, Dec. 27 2011, http://www.techspot.com/review/481-

amd-radeon-7970/page2.html

[50] Smith R., AMD Radeon HD 7970 GHz Edition Review: Battling For The Performance Crown,

AnandTech, June 22 2012, http://www.anandtech.com/show/6025/radeon-hd-7970-ghz-edition-review-

catching-up-to-gtx-680

[51] Glaskowsky P. N., Nvidia’s Fermi: The First Complete GPU Computing Architecture Sept 2009,

http://www.nvidia.com/content/PDF/fermi_white_papers/P.Glaskowsky_NVIDIA's_Fermi-

The_First_Complete_GPU_Architecture.pdf

[52] Kanter D., Inside Fermi: Nvidia's HPC Push, Real World Technologies Sept 30 2009,

http://www.realworldtech.com/includes/templates/articles.cfm?ArticleID=RWT093009110932&mode

=print

[53] Kirk D. & Hwu W. W., ECE498AL Lectures 4: CUDA Threads – Part 2, 2007-2009, University of Illinois,

Urbana-Champaign,

http://courses.engr.illinois.edu/ece498/al/lectures/lecture4%20cuda%20threads%20part2%20spring%2

02009.ppt

[54] Tom’s Hardware Gallery, http://www.tomshardware.com/gallery/SM,0101-110801-0-14-15-1-jpg-.html

[55] Hoenig M., NVIDIA GeForce GTX 460 SE 1GB Review, Hardware Canucks, Nov 21 2010,

http://www.hardwarecanucks.com/forum/hardware-canucks-reviews/38178-nvidia-geforce-gtx-460-se-

1gb-review-2.html

[56] NVIDIA GF100 Architecture Details, Geeks3D, 2008-2010, http://www.geeks3d.com/20100118/nvidia-

gf100-architecture-details/

[57] Wasson S., Inside Fermi: Nvidia's 'Fermi' GPU architecture revealed, Tech Report, Sept 30 2009,

http://techreport.com/articles.x/17670/1

Page 244: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Hivatkozások

222 Created by XMLmind XSL-FO Converter.

[58] Kanter D., “NVIDIA’s GT200: Inside a Parallel Processor,” Real World Technologies, Sept. 8 2008,

http://www.realworldtech.com/page.cfm?ArticleID=RWT090808195242

[59] Kirk D. & Hwu W. W., ECE498AL Lectures 7: Threading Hardware in G80, 2007, University of Illinois,

Urbana-Champaign, http://courses.ece.uiuc.edu/ece498/al1/ectures/lecture7-threading%20hardware.ppt

[60] Butler, M., Bulldozer, a new approach to multithreaded compute performance, Hot Chips 22, Aug. 24 2010

http://www.hotchips.org/index.php?page=hot-chips-22

[61] Voicu A., NVIDIA Fermi GPU and Architecture Analysis, Beyond 3D, 23rd Oct 2010,

http://www.beyond3d.com/content/reviews/55/1

[62] Chester E., Nvidia GeForce GTX 460 1GB Fermi Review, Trusted Reviews, July 13 2010,

http://www.trustedreviews.com/graphics/review/2010/07/13/Nvidia-GeForce-GTX-460-1GB-Fermi/p1

[63] Smith R., NVIDIA’s GeForce GTX 460: The $200 King, AnandTech, July 11 2010,

http://www.anandtech.com/show/3809/nvidias-geforce-gtx-460-the-200-king/2

[64] Angelini C., GeForce GTX 580 And GF110: The Way Nvidia Meant It To Be Played, Tom’s Hardware,

Nov 9 2010, http://www.tomshardware.com/reviews/geforce-gtx-580-gf110-geforce-gtx-

480,2781.html

[65] Angelini C., GF110: Nvidia Gives Fermi A Facelift, Tom’s Hardware, Nov. 9 2010,

http://www.tomshardware.com/reviews/geforce-gtx-580-gf110-geforce-gtx-480,2781-2.html

[66] Angelini C., Nvidia GeForce GTX 560 Ti Review: GF114 Rises, GF100 Rides Off, Tom’s Hardware, Jan.

25 2011, http://www.tomshardware.com/reviews/nvidia-geforce-gtx-560-ti-gf114,2845.html

[67] Woligroski D., The Nvidia GeForce GTX 560 Review: Take Off Your Ti, Tom’s Hardware, May 17 2011,

http://www.tomshardware.com/reviews/geforce-gtx-560-amp-edition-gtx-560-directcu-ii-

top,2944.html

[68] Wasson S., Nvidia's GeForce GTX 560 Ti graphics processor, Tech Report, Jan. 25 2011,

http://techreport.com/review/20293/nvidia-geforce-gtx-560-ti-graphics-processor

[69] Demerjian C., Nvidia Tesla K20 specs gives hints about 28nm yields, Semi Accurate, Nov. 2 2012,

http://semiaccurate.com/2012/11/02/nvidia-tesla-k20-specs-gives-hints-about-28nm-

yields/#.UTCRPK7Qgcs

[70] Whitepaper, NVIDIA’s Next Generation CUDA Compute Architecture: Kepler GK110, V1.0, 2012,

http://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.pdf

[71] Parallel Thread Execution, ISA Version 3.0, Nvidia Compute, Febr. 8 2012, http://hpc.oit.uci.edu/nvidia-

doc/sdk-cuda-doc/C/doc/ptx_isa_3.0.pdf

[72] NVIDIA CUDA Programming Guide, Version 3.0, Febr. 9 2010,

http://zega.web.elte.hu/jegyz/gpu_prog/NVIDIA_CUDA_Programming_Guide_3.0.PDF

[73] NVIDIA Kepler GK110 Next-Generation CUDA Compute Architecture, May 12,

http://www.nvidia.com/content/PDF/kepler/NV_DS_Tesla_KCompute_Arch_May_2012_LR.pdf

[74] NVIDIA Unveils World's Fastest, Most Efficient Accelerators, Powers World's No.1 Supercomputer,

Nvidia.com, Nov. 12 2012, http://nvidianews.nvidia.com/Releases/NVIDIA-Unveils-World-s-Fastest-

Most-Efficient-Accelerators-Powers-World-s-No-1-Supercomputer-8b6.aspx

[75] ORNL Debuts Titan Supercomputer, OLCF, http://www.olcf.ornl.gov/wp-

content/themes/olcf/titan/Titan_Debuts.pdf

[76] Whitepaper, NVIDIA GeForce GTX 680. V1.0, 2012,

http://www.geforce.com/Active/en_US/en_US/pdf/GeForce-GTX-680-Whitepaper-FINAL.pdf

Page 245: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Hivatkozások

223 Created by XMLmind XSL-FO Converter.

[77] Geforce GTX 480 and GTX 470 reviewed: Fermi performance benchmarks, PC Games Hardware, March

27 2010, http://www.pcgameshardware.com/aid,743498/Geforce-GTX-480-and-GTX-470-reviewed-

Fermi-performance-benchmarks/Reviews/

[78] Smith R., NVIDIA GeForce GTX 680 Review: Retaking The Performance Crown, AnandTech, March 22

2012, http://www.anandtech.com/show/5699/nvidia-geforce-gtx-680-review

[79] Paul D., More details of NVIDIA Tesla cGPU K20 “GK110″, TechNews, May 17 2012,

http://technewspedia.com/more-details-of-nvidia-tesla-cgpu-k20-gk110/

[80] More Trot, Less Slot: ASUS GeForce GTX 680 DirectCU II 4GB Two-Slot Revision!, Nov. 9 2012,

http://rog.asus.com/177262012/graphics-cards-2/more-trot-less-slot-asus-geforce-gtx-680-directcu-ii-

4gb-two-slot-revision/

[81] Norem J., Nvidia Unleashes the Titan, Maximum PC, Febr. 19 2013,

http://www.maximumpc.com/article/news/nvidia_unleashes_titan2013

[82] AMD Fusion System Architecture is now Heterogeneous Systems Architecture, Jan. 18 2012,

http://blogs.amd.com/fusion/2012/01/18/amd-fusion-system-architecture-is-now-heterogeneous-

systems-architecture/

[83] Halfacree G., AMD ditches Fusion branding, Bit-Tech, Jan. 19 2012, http://www.bit-

tech.net/news/hardware/2012/01/19/amd-ditches-fusion-branding/1

[84] Rogers P., The Programmer’s Guide to the APU Galaxy, AMD Fusion Developer Summit, June 2011,

http://amddevcentral.com/afds/assets/keynotes/Phil%20Rogers%20Keynote-FINAL.pdf

[85] Rogers P., Heterogenenous System Architecture and the Software Ecosystem, AMD 2012 Financial

Analyst Day, Febr. 2 2012

[86] Halfacree G., AMD targeted by Arctic over Fusion brand, Bit-Tech, Jan. 23 2012, http://www.bit-

tech.net/news/bits/2012/01/23/amd-arctic-fusion-brand/1

[87] Kyriazis G., Heterogeneous System Architecture: A Technical Review, Rev. 1.0, Aug. 30 2012,

http://developer.amd.com/wordpress/media/2012/10/hsa10.pdf

[88] Heterogeneous System Architecture and the HSA Foundation, AMD Fusion Developer, Summit, June 2012

[89] Lattner C., The Design of LLVM, Dr. Dobb’s, May 29 2012, http://www.drdobbs.com/architecture-and-

design/the-design-of-llvm/240001128?pgno=1

[90] Shimpi A.L., AMD Outlines HSA Roadmap: Unified Memory for CPU/GPU in 2013, HSA GPUs in 2014,

AnandTech, Febr. 2 2012, http://www.anandtech.com/show/5493/amd-outlines-hsa-roadmap-unified-

memory-for-cpugpu-in-2013-hsa-gpus-in-2014

[91] White Paper, AMD Graphics Cores Next (GCN) Architecture, June 2012,

http://www.amd.com/jp/Documents/GCN_Architecture_whitepaper.pdf

[92] Wikipedia, Radeon HD 7000 Series, http://en.wikipedia.org/wiki/Southern_Islands_%28GPU_family%29

[93] Valich T., AMD Next-Generation Roadmap Revealed: 2013 APUs, CPUs, GPUs, BSN, Febr. 2 2012,

http://www.brightsideofnews.com/news/2012/2/2/amd-next-generation-roadmap-revealed-2013-

apus2c-cpus2c-gpus.aspx

[94] Lowe A., AMD's 2012-2013 roadmap, 2013 is all about 28nm, Hexus, Febr. 3 2012,

http://hexus.net/tech/news/industry/34769-amds-2012-2013-roadmap-2013-28nm/

[95] Smith R., AMD Radeon HD 7970 Review: 28nm And Graphics Core Next, Together As One, AnandTech,

Dec. 22 2011, http://www.anandtech.com/show/5261/amd-radeon-hd-7970-review/2

[96] Woligroski D., Wallossek I., Graphics Core Next: The Southern Islands Architecture, Tom’s Hardware,

Dec. 22 2011, http://www.tomshardware.com/reviews/radeon-hd-7970-benchmark-tahiti-gcn,3104-

2.html

Page 246: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Hivatkozások

224 Created by XMLmind XSL-FO Converter.

[97] Smith R., AMD's Radeon HD 6970 & Radeon HD 6950: Paving The Future For AMD, AnandTech, Dec.

15 2010, http://www.anandtech.com/show/4061/amds-radeon-hd-6970-radeon-hd-6950/4

[98] Doggett M., Radeon HD 2900, Graphics Hardware Conf., Aug. 2007,

http://www.graphicshardware.org/previous/www_2007/presentations/doggett-radeon2900-gh07.pdf

[99] Smalley T., ATI Radeon HD 5870 Architecture Analysis, Bit-tech, Sept 30 2009, http://www.bit-

tech.net/hardware/graphics/2009/09/30/ati-radeon-hd-5870-architecture-analysis/8

[100] Hoenig M., AMD Radeon HD 6970 and HD 6950 Review, Hardware Canucks, Dec. 14 2010,

http://www.hardwarecanucks.com/forum/hardware-canucks-reviews/38899-amd-radeon-hd-6970-hd-

6950-review-3.html

[101] Smith R., AMD's Graphics Core Next Preview: AMD's New GPU, Architected For Compute, AnandTech,

Dec. 21 2011, http://www.anandtech.com/show/4455/amds-graphics-core-next-preview-amd-

architects-for-compute/2

[102] Smipi A.L., ATI’s Radeon 9700 (R300) – Crowning the New King, AnandTech, July 18 2002,

http://www.anandtech.com/show/947/6

[103] Kanter D., AMD's Cayman GPU Architecture, Real World Technologies, Dec. 14 2010,

http://www.realworldtech.com/page.cfm?ArticleID=RWT121410213827&p=3

[104] Kirsch N., AMD Radeon HD 7970 3GB Video Card Review, Legit Reviews, Dec. 21 2011,

http://www.legitreviews.com/article/1805/13/

[105] Shrout R., AMD Radeon HD 7970 3GB Graphics Card Review - Tahiti at 28nm, PC Perspective, Dec. 22

2011, http://www.pcper.com/reviews/Graphics-Cards/AMD-Radeon-HD-7970-3GB-Graphics-Card-

Review-Tahiti-28nm/Power-Management-Eyef

[106] AMD Radeon HD 6900 Series Graphics, Dec. 2010, Hot Hardware,

http://hothardware.com/image_popup.aspx?image=big_powertune.jpg&articleid=1602&t=a

[107] Chiappetta M., AMD Radeon HD 7970: 28nm Tahiti GPU Review, Hot Hardware, Dec. 22 2011,

http://hothardware.com/Reviews/AMD-Radeon-HD-7970-28nm-Tahiti-GPU-Review/

[108] Mantor M., AMD Radeon HD 7970 with Graphics Core Next (GCN) Architecture, Aug. 28 2012

[109] Tahiti Pro, Radeon HD 7950 Benchmark Crossfire, http://www.tomshardware.com/gallery/tahiti-

pro,0101-324491-0-2-3-1-jpg-.html

[110] Reference Guide: Southern Islands Series Instruction Set Architecture, Rev. 1.0, Aug. 2012,

http://developer.amd.com/wordpress/media/2012/10/AMD_Southern_Islands_Instruction_Set_Archite

cture.pdf

[111] Vilches J., AMD Radeon HD 8000 series could be delayed until Q2 2013, TechSpot, Dec. 3 2012,

http://www.techspot.com/news/50975-amd-radeon-hd-8000-series-could-be-delayed-until-q2-

2013.html

[112] Shimpi A.L., AMD's 2012 - 2013 Client CPU/GPU/APU Roadmap Revealed, AnandTech, Febr. 2 2012,

http://www.anandtech.com/show/5491/amds-2012-2013-client-cpugpuapu-roadmap-revealed

[113] Urbach J., Trank J., Connecting People With Ideas, Nvidia GPU Technology Conference,

http://nvidianews.nvidia.com/imagelibrary/downloadmedia.ashx?MediaDetailsID=2211&SizeId=-

1&SizeID=-1

[114] Demerjian C., Nvidia GPU roadmaps aren’t an improvement with Volta, Semi Accurate, May 20 2013,

http://semiaccurate.com/2013/05/20/nvidias-volta-gpu-raises-serious-red-flags-for-the-company/

[115] Shilov A., Nvidia: Denver Is Custom ARMv8 64-Bit Processor with Secret Sauce, Xbit Labs, Nov. 8

2012,

http://www.xbitlabs.com/news/cpu/display/20121108215621_Nvidia_Denver_Is_Custom_ARMv8_64

_Bit_Processor_with_Secret_Sauce.html

Page 247: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Hivatkozások

225 Created by XMLmind XSL-FO Converter.

[116] Zahir R., Ewert M., Seshadri H., The Medfield Smartphone: Intel Architecture in a Handheld Form

Factor, IEEE Micro, March 11 2013

[117] AMD Product and Technology Roadmaps, 2013

[118] Skaugen K., Petascale to Exascale, Extending Intel’s HPC Commitment, ISC 2010,

http://download.intel.com/pressroom/archive/reference/ISC_2010_Skaugen_keynote.pdf

[119] Timeline of Many-Core at Intel, intel.com, http://download.intel.com/newsroom/kits/xeon/phi/pdfs/Many-

Core-Timeline.pdf

[120] Chrysos G., Intel Xeon Phi coprocessor (codename Knights Corner), Hot Chips, Aug. 28 2012,

http://www.hotchips.org/wp-content/uploads/hc_archives/hc24/HC24-3-ManyCore/HC24.28.335-

XeonPhi-Chrysos-Intel.pdf

[121] Intel Xeon Phi Coprocessor: Pushing the Limits of Discovery, 2012,

http://download.intel.com/newsroom/kits/xeon/phi/pdfs/Intel-Xeon-Phi_Factsheet.pdf

[122] Intel Xeon Phi Coprocessor Datasheet, Nov. 2012,

http://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/xeon-phi-datasheet.pdf

[123] The Intel Xeon Phi Coprocessor 5110P, Highly-parallel Processing for Unparalleled Discovery, Product

Brief, 2012

[124] Hruska J., Intel’s 50-core champion: In-depth on Xeon Phi, ExtremeTech, July 30 2012,

http://www.extremetech.com/extreme/133541-intels-64-core-champion-in-depth-on-xeon-phi/2

[125] Reinders J., An Overview of Programming for Intel Xeon processors and Intel Xeon Phi, coprocessors,

2012, http://software.intel.com/sites/default/files/article/330164/an-overview-of-programming-for-

intel-xeon-processors-and-intel-xeon-phi-coprocessors.pdf

[126] Intel Xeon Phi Product Family Performance, Rev. 1.1, Febr. 15 2013,

http://www.intel.com/content/dam/www/public/us/en/documents/performance-briefs/xeon-phi-product-

family-performance-brief.pdf

[127] Wee W.C., Leaked Roadmap Reveals Intel's 14nm Skylake Platform and Knights Landing Chip,

Hardware Zone, July 5 2013, http://www.hardwarezone.com.sg/tech-news-leaked-roadmap-reveals-

intels-14nm-skylake-platform-and-knights-landing-chip

[128] Rattner J., „Single-chip Cloud Computer”, An experimental many-core processor from Intel Labs, 2009,

http://download.intel.com/pressroom/pdf/rockcreek/SCC_Announcement_JustinRattner.pdf

Page 248: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Created by XMLmind XSL-FO Converter.

II. rész - GPGPU-k és programozásuk

Page 249: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

227 Created by XMLmind XSL-FO Converter.

Tartalom

1. Bevezetés ................................................................................................................................... 231 1. Bevezetés (1) .................................................................................................................... 231

1.1. GPU-k számítási kapacitása ................................................................................ 231 2. Bevezetés (2) .................................................................................................................... 231

2.1. Valós alkalmazások ............................................................................................. 231 2.2. Grafikus Feldolgozó Egységek ............................................................................ 232

2.2.1. Shaderek .................................................................................................. 232 2.3. Unified Shader Model ......................................................................................... 232 2.4. GPGPU fogalom megjelenése ............................................................................. 233 2.5. GPGPU helye és szerepe ...................................................................................... 234 2.6. CPU-GPGPU összehasonlítás ............................................................................. 234 2.7. Memória szerkezete ............................................................................................. 235 2.8. SIMT végrehajtás ................................................................................................ 236

2. Programozási modell ................................................................................................................. 238 1. CUDA környezet alapjai .................................................................................................. 238

1.1. CUDA környezet ................................................................................................. 238 1.2. Szükséges komponensek ..................................................................................... 238 1.3. CUDA környezet áttekintése ............................................................................... 239 1.4. CUDA környezet részei ....................................................................................... 240 1.5. CUDA szoftver rétegek ....................................................................................... 240 1.6. CUDA alapú fejlesztés lépései ............................................................................ 241

2. Fordítás és szerkesztés ..................................................................................................... 242 2.1. CUDA fordítás lépései ......................................................................................... 242

2.1.1. Bemenet .................................................................................................. 242 2.1.2. Kimenet ................................................................................................... 243

2.2. nvcc fordító alapvető paraméterei ........................................................................ 244 2.2.1. Fordítás céljának meghatározása ............................................................. 244

2.3. nvcc fordító alapvető paraméterei (2) .................................................................. 244 2.4. nvcc fordító alapvető paraméterei (3) .................................................................. 245 2.5. nvcc fordító alapvető paraméterei (4) .................................................................. 245 2.6. Példa parancssori fordításra ................................................................................. 245 2.7. Fordítás áttekintése .............................................................................................. 246

3. Platform modell ................................................................................................................ 246 3.1. CUDA platform modell ....................................................................................... 246 3.2. CUDA platform modell (2) ................................................................................. 249 3.3. Hozzáférés az eszközökhöz ................................................................................. 250

3.3.1. CUDA eszköz kiválasztása ..................................................................... 251 3.4. Eszközök adatai ................................................................................................... 251 3.5. Eszközök adatainak lekérdezése .......................................................................... 251

3.5.1. Feladat 2.3.1 ............................................................................................ 252 4. Memória modell ............................................................................................................... 252

4.1. CUDA memória modell ....................................................................................... 252 4.1.1. Kapcsolat a hoszttal ................................................................................. 252

4.2. CUDA memória modell – globális memória ....................................................... 253 4.3. CUDA memória modell – konstans memória ...................................................... 254 4.4. CUDA memória modell – textúra memória ......................................................... 255 4.5. CUDA memória modell – megosztott memória .................................................. 256 4.6. CUDA memória modell – regiszterek ................................................................. 257 4.7. CUDA memória modell – lokális memória ......................................................... 258

4.7.1. Deklaráció .............................................................................................. 258 4.8. Memória modell fizikai leképezése ..................................................................... 259 4.9. Memory handling ................................................................................................ 261 4.10. Memória területek elérhetőség szerint ............................................................... 261 4.11. Dinamikus memóriakezelés – foglalás .............................................................. 262

4.11.1. Memória felszabadítás .......................................................................... 262 4.12. Memória területek közötti másolás .................................................................... 262

Page 250: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

228 Created by XMLmind XSL-FO Converter.

4.13. Rögzített memória (pinned memory) ................................................................. 263 4.14. Másolás nélküli memória (zero-copy memory) ................................................. 264

5. Végrehajtási modell ......................................................................................................... 264 5.1. CUDA végrehajtási modell - szálak .................................................................... 264 5.2. CUDA blokkok .................................................................................................... 265 5.3. Blokkok azonosítása ............................................................................................ 265 5.4. Globális – lokális index ....................................................................................... 266

5.4.1. Lokális azonosító .................................................................................... 266 5.4.2. Globális azonosító ................................................................................... 267

5.5. Néhány alapvető összefüggés .............................................................................. 267 5.6. CUDA végrehajtási modell – kernel .................................................................... 267 5.7. CUDA végrehajtási modell – kernel indítása ...................................................... 268 5.8. Kernel indítással kapcsolatos típusok .................................................................. 268 5.9. Kernel implementálása ........................................................................................ 269 5.10. Kernel elindítás példa ........................................................................................ 269 5.11. Blokkokat kezelő kernel implementálása .......................................................... 270 5.12. Blokkokat kezelő kernel indítás példa ............................................................... 270 5.13. Teljes alkalmazás elkészítése ............................................................................. 270

5.13.1. Feladat 2.5.1 .......................................................................................... 271 3. Programozási környezet ............................................................................................................. 272

1. Visual Studio használata .................................................................................................. 272 1.1. Visual Studio lehetőségek .................................................................................... 272

1.1.1. New project wizard ................................................................................. 272 1.2. New project wizard .............................................................................................. 272 1.3. Custom build rules ............................................................................................... 273 1.4. CUDA-val kapcsolatos project beállítások .......................................................... 274

2. Számítási képességek ....................................................................................................... 275 2.1. Számítási képességek (1) ..................................................................................... 275 2.2. Számítási képességek (2) ..................................................................................... 276 2.3. Számítási képességek (3) ..................................................................................... 276 2.4. Compute capability (4) ......................................................................................... 277 2.5. Néhány Nvidia GPU számítási képessége ........................................................... 277 2.6. Néhány Nvidia GPU számítási képessége ........................................................... 277

3. CUDA nyelvi kiterjesztés ................................................................................................ 278 3.1. CUDA language extensions ................................................................................. 278 3.2. Mindkét oldalon elérhető típusok ........................................................................ 278

3.2.1. dim3 típus ............................................................................................... 278 3.3. Mindkét oldalon elérhető függvények ................................................................. 278 3.4. Csak eszköz oldalon elérhető változók ................................................................ 279 3.5. Csak eszköz oldalon elérhető függvények ........................................................... 279 3.6. Csak hoszt oldalon elérhető függvények ............................................................. 280

4. Aszinkron konkurens végrehajtás .................................................................................... 281 4.1. Stream-ek ............................................................................................................. 281 4.2. Stream-ek létrehozás és megszüntetése ............................................................... 281 4.3. Stream-ek használata ........................................................................................... 282 4.4. Példa a stream-ek használatára ............................................................................ 283 4.5. Stream szinkronizáció .......................................................................................... 283 4.6. Szinkronizációt magukba foglaló műveletek ....................................................... 283 4.7. Stream időzítés [12] ............................................................................................. 284 4.8. Konkurens végrehajtás támogatása ...................................................................... 284 4.9. Példa blokkolt sorra ............................................................................................. 285 4.10. Példa blokkolt sorra (2) ..................................................................................... 285

5. CUDA események ............................................................................................................ 286 5.1. Események létrehozása és megszüntetése ........................................................... 286 5.2. Esemény rögzítése ............................................................................................... 286 5.3. Esemény szinkronizálása ..................................................................................... 287 5.4. Esemény ellenőrzése ............................................................................................ 287 5.5. Szinkronizáció eseményekkel .............................................................................. 288 5.6. Szinkronizáció eseményekkel (példa) ................................................................. 288 5.7. Események között eltelt idő számítása ................................................................ 289

Page 251: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

229 Created by XMLmind XSL-FO Converter.

5.8. Eltelt idő számítása (példa) .................................................................................. 289 6. Egyesített Virtuális Címtér ............................................................................................... 289

6.1. CUDA Unified Virtual Address Management ..................................................... 289 6.2. Egyesített Virtuális Címtér (UVA) ...................................................................... 290 6.3. Egyesített Virtuális Címtér – elérhetőség ............................................................ 290 6.4. Peer to peer kommunikáció az eszközök között .................................................. 291 6.5. UVA és a P2P átvitel ........................................................................................... 292 6.6. P2P memória átvitel GPU-k között ..................................................................... 292 6.7. P2P memória másolás GPU-k között ................................................................... 293 6.8. P2P memória hozzáférést bemutató kernel .......................................................... 293 6.9. CUDA UVA összegzés ........................................................................................ 294

4. Optimalizációs technikák ........................................................................................................... 295 1. Megosztott memória használata ....................................................................................... 295

1.1. Optimalizációs stratégiák ..................................................................................... 295 1.2. Mátrix szorzó alkalmazás elkészítése .................................................................. 295

1.2.1. Feladat 4.1.1 ............................................................................................ 295 1.3. Többdimenziós mátrix a memóriában ................................................................. 296 1.4. Többdimenziós mátrix a memóriában ................................................................. 297 1.5. Több dimenziós mátrix a GPU memóriában ........................................................ 297 1.6. Igazított elhelyezés .............................................................................................. 298 1.7. Igazított memóriakezelés ..................................................................................... 299 1.8. Igazított memória másolása ................................................................................. 299 1.9. Mátrix szorzó alkalmazás elkészítése igazított memóriával ................................ 300

1.9.1. Feladat 4.1.2 ............................................................................................ 300 1.10. Kernel igazított memóriakezeléssel ................................................................... 300 1.11. Kernel hívása igazított tömbök esetén ............................................................... 301 1.12. Megosztott memória kezelése ............................................................................ 301 1.13. Ötlet a mátrix szorzás gyorsítására (csempe technika) ...................................... 302 1.14. Mátrix szorzó alkalmazás elkészítése (megosztott memóriával) ....................... 302

1.14.1. Feladat 4.1.3 .......................................................................................... 302 1.15. Mátrix szorzás gyorsítása .................................................................................. 303 1.16. Mátrix szorzás gyorsítása (2) ............................................................................. 303 1.17. Mátrix szorzás gyorsítása (3) ............................................................................. 304 1.18. Mátrix szorzás gyorsítása (4) ............................................................................. 305 1.19. Mátrix szorzás gyorsítása (5) ............................................................................. 306 1.20. Optimalizált mátrix szorzás kernel .................................................................... 307 1.21. Összehasonlító vizsgálat .................................................................................... 308

2. Atomi műveletek használata ............................................................................................ 308 2.1. Atomi műveletek szükségessége ......................................................................... 308 2.2. CUDA atomi műveletek ...................................................................................... 308 2.3. CUDA atomi műveletek - aritmetika ................................................................... 309 2.4. CUDA atomi műveletek – aritmetika (2) ............................................................. 309 2.5. CUDA atomi műveletek – logikai függvények ................................................... 310

2.5.1. Feladat 4.2.1 ............................................................................................ 310 2.6. Vektor legkisebb elemének értéke ....................................................................... 310

2.6.1. Feladat 4.2.2 ............................................................................................ 310 2.7. Memóriahozzáférések csökkentése – megosztott memória ................................. 310

2.7.1. Összehasonlító vizsgálat ......................................................................... 311 2.8. Blokkon belüli párhuzamosítás ............................................................................ 312

2.8.1. Feladat 4.2.3 ............................................................................................ 312 2.9. Párhuzamos minimum - betöltés .......................................................................... 312 2.10. Párhuzamos minimum – blokk minimuma ........................................................ 313 2.11. Párhuzamos minimum - kernel .......................................................................... 314 2.12. Párhuzamos minimum – kernel (2) .................................................................... 314 2.13. Összehasonlító vizsgálat .................................................................................... 314 2.14. Összehasonlító vizsgálat .................................................................................... 315

3. Kihasználtság ................................................................................................................... 315 3.1. A végrehajtás áttekintése ..................................................................................... 315 3.2. Kihasználtság ....................................................................................................... 316 3.3. Kihasználtság és a regiszterek kapcsolata ............................................................ 316

Page 252: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

GPGPU-k és programozásuk

230 Created by XMLmind XSL-FO Converter.

3.4. Kihasználtság és megosztott memória ................................................................. 317 3.5. Kihasználtság és blokk méret .............................................................................. 317 3.6. CUDA Occupancy calculator .............................................................................. 318 3.7. CUDA Occupancy calculator - példa .................................................................. 318 3.8. CUDA Occupancy calculator – változó blokk méret hatása ................................ 319 3.9. CUDA Occupancy calculator – változó regiszter szám hatása ............................ 319 3.10. CUDA Occupancy calculator – változó megosztott memória hatása ................ 320 3.11. Blokk mérettel kapcsolatos javaslatok [18] ....................................................... 320

4. Parallel Nsight .................................................................................................................. 321 4.1. Parallel Nsight ..................................................................................................... 321 4.2. Kernel nyomkövetés ............................................................................................ 322 4.3. GPU memória régiók megtekintése ..................................................................... 322 4.4. CUDA Debug Focus ............................................................................................ 323 4.5. CUDA Device Summary ..................................................................................... 323 4.6. CUDA Device Summary - rács ........................................................................... 324 4.7. CUDA Device Summary - warp .......................................................................... 324 4.8. PTX code nyomkövetése ..................................................................................... 325 4.9. Memória ellenőrzés használata ............................................................................ 326 4.10. CUDA memória ellenőrző minta eredmény ...................................................... 326 4.11. Lehetséges hibakódok és jelentésük .................................................................. 327

5. CUDA könyvtárak ..................................................................................................................... 329 1. CUBLAS könyvtár ........................................................................................................... 329

1.1. CUBLAS Library ................................................................................................ 329 1.2. CUBLAS alapú alkalmazások fejlesztése ............................................................ 329 1.3. CUBLAS függvények visszatérési értéke ............................................................ 329 1.4. CUBLAS segítő függvények ............................................................................... 330 1.5. CUBLAS memória kezelés .................................................................................. 330 1.6. BLAS függvények áttekintése ............................................................................. 331 1.7. Néhány CUBLAS 1. szintű függvény .................................................................. 331 1.8. Néhány CUBLAS 2. szintű függvény .................................................................. 332 1.9. Néhány CUBLAS 3. szintű függvény .................................................................. 332

6. CUDA verziók ........................................................................................................................... 334 1. CUDA 4 újdonságok ........................................................................................................ 334

1.1. CUDA 4.0 újdonságai .......................................................................................... 334 1.2. Aktuális eszköz kiválasztása ................................................................................ 334 1.3. Aktuális eszköz – stream, események .................................................................. 334 1.4. Több-GPU példa .................................................................................................. 335 1.5. Több CPU szál használata ................................................................................... 335 1.6. Vektor szorzás több-GPU-s környezetben - kernel .............................................. 336 1.7. Vektor szorzás több-GPU-s környezetben – memória foglalás ........................... 336 1.8. Vektor szorzás több-GPU-s környezetben – kernel hívás ................................... 337 1.9. Vektor szorzás több-GPU-s környezetben – kernel hívás ................................... 337

2. CUDA 5 újdonságok ........................................................................................................ 338 2.1. CUDA 5.0 újdonságok [26] ................................................................................. 338 2.2. Dinamikus párhuzamosság .................................................................................. 338

7. Felhasznált irodalom .................................................................................................................. 340 1. Felhasznált irodalom ........................................................................................................ 340 2. Gyakran előforduló kifejezések fordításai ........................................................................ 341

Page 253: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

231 Created by XMLmind XSL-FO Converter.

1. fejezet - Bevezetés

1. Bevezetés (1)

1.1. GPU-k számítási kapacitása

• A GPU-k igen jelentős számítási kapacitással bírnak napjainkban (főleg az egyszeres pontosságú aritmetika

területén)

1.1. ábra - [11]

2. Bevezetés (2)

2.1. Valós alkalmazások

• Számos GPU alapú alkalmazást készítettek már a CUDA architektúra segítségével programozók, kutatók és

tudósok világszerte

• Számos példa található a CUDA Community Showcase oldalon

1.2. ábra -

Page 254: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés

232 Created by XMLmind XSL-FO Converter.

2.2. Grafikus Feldolgozó Egységek

• Alapvető feladatuk a képernyőn megjelenítendő tartalom kezelésével kapcsolatos feladatok átvétele a CPU-

tól [1].

• A modern GPU-k meglehetősen nagy teljesítményű 3D grafikai feldolgozásra alkalmasak, ezek a funkciók

általában valamilyen szabványos API-n keresztül érhetők el, pl.:

• OpenGL (www.opengl.org)

• Direct3D (www.microsoft.com)

2.2.1. Shaderek

• A 3D grafikai feldolgozást az úgynevezett shaderek hajtják végre, ezek fő típusai az alábbiak [2]

• Vertex shader – feladata a 3D térben lévő koordináták leképezése a képernyő síkjára

• Pixel shader – feladata a megjelenítendő alakzatok egyes pontjainak a színének a kiszámítása (textúra,

világítás, árnyékolás stb.)

• Geometry shader – feladata az alakzatok geometriájának változtatása

2.3. Unified Shader Model

Terhelés eloszlásának problémái

• A kezdeti megvalósításokban a különféle shader egységek különböző hardver elemeket jelentettek

• Ezek számának megtervezése azonban nehézségekbe ütközik, ugyanis különféle feladatokhoz ezek különböző

arányára lenne szükség

• 1. feladat:

a geometria meglehetősen egyszerű

a pixelek színezése sok erőforrást igényel

• 2. feladat:

Page 255: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés

233 Created by XMLmind XSL-FO Converter.

a geometria leképezése erőforrásigényes

a pontok színezése egyszerű

1.3. ábra - [3]

Unified Shader

• A GPU-k fejlődése során a különböző shaderek megvalósítása egyre közelebb került egymáshoz (lásd

különböző shader modellek)

• Végül a gyártók megvalósították, hogy a GPU már csak egyféle, minden feladatot végrehajtani képes

shadereket [4] tartalmaz, így ezek tetszőlegesen csoportosíthatók a különféle feladatokra

2.4. GPGPU fogalom megjelenése

Közvetlenül programozható egységek

• Az egységes shader modell tulajdonképpen egyszerű, kevés utasítással rendelkező általános célú

végrehajtóegységeket hozott magával

• Ez az egyszerűség elősegíti a végrehajtóegységek számának növelését, így a manapság elérhető GPU-k már

több száz ilyen egységet tartalmaznak

• Ennek köszönhetően a GPU-k hatalmas számítási teljesítménnyel rendelkeznek, amit célszerű lehet a grafikai

megjelenítésen túl is kiaknázni:

GPGPU: General-Purpose Computing on Graphics Processor Units

Fejlesztői környezetek megjelenése

• Kezdetben ezen eszközök programozása meglehetősen nehézkes volt, mivel a grafikus kártyákat továbbra is

csak a megszokott módokon lehetett elérni, ezeken keresztül kellett valahogy a saját programkódokat

lefuttatni

• Hamarosan a gyártók is felismerték az új piaci szegmensben rejlő lehetőségeket, emiatt kiadtak saját

programozási környezeteket:

• Nvidia CUDA

• ATI Stream

• OpenCL

Page 256: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés

234 Created by XMLmind XSL-FO Converter.

2.5. GPGPU helye és szerepe

GPU előnyei

• Hagyományos eszközökhöz képest kiemelkedő csúcsteljesítmény

• Nagyon jó ár/teljesítmény arány

• Jól skálázható, a piacon sokféle grafikus kártya kapható, és ezekből akár több is elhelyezhető egy megfelelő

alaplapban

• Dinamikus fejlődés, ami a jövőben is biztosítottnak tűnik a fizetőképes keresletnek köszönhetően (játékipar)

GPU hátrányai

• Szekvenciális programok futtatása a GPU-n általában nem hatékony

→ ki kell dolgoznunk egy párhuzamos változatot, ami gyakran nem triviális

• A végrehajtóegységek egymástól kevésbé függetlenek mint a CPU magok

→ a csúcsteljesítmény csak speciális (tipikusan adatpárhuzamos) feladatok végrehajtása során érhető el,

csak ilyenkor célszerű használni GPUt

• A grafikus kártyák általában saját memóriaterületen dolgoznak, ezért a tényleges feldolgozást mindig

memória mozgatások előzik meg/követik

→ optimalizálni kell ezen mozgatások számát, de még így is előfordulhat, hogy az egész GPU alapú

megvalósítást el kell vetni emiatt

• Új terület lévén az ismeretek és az eszközök még kevésbé kiforrottak, emiatt a fejlesztés költségesebb

2.6. CPU-GPGPU összehasonlítás

Gyorsítótár – párhuzamosság

• Az ábrán látható, hogy a CPU esetében az eszköz felületének nagy részét a gyorsítótár foglalja el, míg a GPU

esetében ez szinte teljesen hiányzik, helyette a végrehajtó egységek foglalnak el nagy helyet

• Működés közben a memória olvasással kapcsolatos várakozásokat a CPU a gyorsítótárral próbálja

csökkenteni, a GPU pedig a gyors kontextusváltás segítségével éri el ugyanezt (ha egy szál futása közben

várni kell a memóriára, akkor a GPU átütemezi a végrehajtóegységeket más szálakhoz)

→ szálak száma legyen jóval nagyobb, mint a végrehajtóegységek száma

1.4. ábra - [5]

Page 257: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés

235 Created by XMLmind XSL-FO Converter.

2.7. Memória szerkezete

Összetett memória hierarchia

• CPU-k esetében általában csak a központi memóriát és a regisztereket különböztetjük meg

• CPU-k esetében általában nem a programozó feladata a gyorsítótár kezelése, ezt a CPUra bízhatjuk

• GPU-k esetében ennél jóval összetettebb memória felépítéssel találkozhatunk, amelyek kezelése a

programozó feladata

→ célszerű a gyakran szükséges adatokat betölteni a gyorsabb memóriaterületekre („manuálisan” elvégezni

a gyorsítótár kezelést)

1.5. ábra - [3]

Page 258: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés

236 Created by XMLmind XSL-FO Converter.

2.8. SIMT végrehajtás

• Párhuzamosság forrásai (SIMD < SIMT < SMT) [25]

• SIMD esetén vektorok elemei párhuzamosan dolgozódnak fel

• SMT esetén, szálak utasításai párhuzamosan futnak le

• SIMT valahol a kettő között található, egy érdekes hibrid a vektor feldolgozás és a tényleges párhuzamos

szál futtatás között

• SIMD utasítások során a programozó biztosítja, hogy az operandusok a megfelelő helyen és formában

legyenek, a SIMT utasítások során az egyes végrehajtóegységek különböző címtartományokban dolgoznak

Page 259: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Bevezetés

237 Created by XMLmind XSL-FO Converter.

• Van lehetőség feltételes végrehajtásra a SIMT esetében, azonban az ágak szekvenciálisan lesznek

végrehajtva:

→ Próbáljuk elkerülni az elágazásokat és a ciklusokat a GPU kódban

1.6. ábra - [7]

Page 260: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

238 Created by XMLmind XSL-FO Converter.

2. fejezet - Programozási modell

1. CUDA környezet alapjai

1.1. CUDA környezet

CUDA – Compute Unified Device Architecture

• A CUDA egy párhuzamos számítások implementálására alkalmas rendszer, amelyet az Nvidia cég fejleszt.

Szabadon elérhető minden fejlesztő számára, illetve a segítségével készített programkódok is korlátozás

nélkül futtathatók. Hasonlít a C/C++ környezetekhez.

Fejlesztésének főbb lépései

• 2007. február – CUDA 1.0

• 2008. február – CUDA 2.0

• 2010. március – CUDA 3.0

• 2011. május – CUDA 4.0

• 2012. október – CUDA 5.0

Támogatott GPU-k

• Nvidia GeForce sorozat

• Nvidia GeForce mobile sorozat

• Nvidia Quadro sorozat

• Nvidia Quadro mobile sorozat

• Nvidia Tesla sorozat

1.2. Szükséges komponensek

• CUDA kompatibilis grafikus meghajtó

• CUDA fordító

A .cu programok fordításához

• CUDA debugger

Nyomkövetéshez

• CUDA profiler

Teljesítmény méréshez

• CUDA SDK

Minta alkalmazások

2.1. ábra -

Page 261: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

239 Created by XMLmind XSL-FO Converter.

CUDA letöltése

• A CUDA környezet letölthető az alábbi helyről:

• https://developer.nvidia.com/cuda-downloads

1.3. CUDA környezet áttekintése

CUDA környezet legfontosabb jellemzői

• a fejlesztés alapvetően C/C++ nyelv segítségével történik mind a hoszt, mind pedig az eszköz oldalon, de

lehetőség van más nyelvek igénybevételére is (pl. Fortran)

• A környezet eleve tartalmaz számos függvénykönyvtárat, amelyek elősegítik a gyors alkalmazásfejlesztést

(FFT, BLAS)

• A környezet felépítéséből adódóan a fejlesztés nem egy konkrét hardverre történik, hanem egy afelett álló

absztrakciós réteg számára. Ez egyszerűbbé teszi a fejlesztés a jövőben megjelenő GPU-kra.

Kódok szétválasztása

• A forráskód tartamazza a hoszt és az eszköz kódját is, ezt a fordító választja szét fordításkor

• A CPU számára generált kód így egy külső, tetszőleges C fordító segítségével fordul le

• A programozó választhat, hogy milyen hoszt oldali fordítót használjon

2.2. ábra - [5]

Page 262: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

240 Created by XMLmind XSL-FO Converter.

1.4. CUDA környezet részei

C nyelvi kiterjesztések

• Különféle kiegészítések a C nyelvhez, amelyek lehetővé teszik a forráskód GPU-n való futtatását

• Függvény módosítók amelyek lehetővé teszik annak meghatározását, hogy az egyes függvények a hoszton

vagy a GPU-n fussanak le, és honnan legyenek meghívhatók

• Változó módosítók amelyek meghatározzák, hogy egy változó pontosan melyik memóriaterületen

foglaljanak helyet

• Új direktíva amelyik jelzi, hogy a kernelt a GPU-n kell elindítani

• Beépített változók amelyek lehetővé teszik a rács és a blokk adatainak lekérdezését, továbbá a rács és szál

indexet is elérhetővé teszik

Futásidejű könyvtár

• A futásidejű könyvtár az alábbi részekből áll:

• Hoszt oldali komponens, amely a hoszton fut és különféle függvényeket biztosít az eszközök kezeléséhez

és eléréséhez

• Eszköz oldali komponens, amely a GPU-n fut és az ott elérhető speciális függvényeket tartalmazza

• Általános komponens, amely tartalmaz beépített típusokat, függvényeket, amelyek mindkét oldalon

elérhetők

1.5. CUDA szoftver rétegek

CUDA API felépítése

Page 263: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

241 Created by XMLmind XSL-FO Converter.

• A CUDA környezet által szolgáltatott szoftverrétegeket egy veremként lehet elképzelni, amely az ábrán

látható három szintből áll

• Az egyes szintek egymásra épülnek, a programozónak lehetősége van bármelyik szinten hozzáférni a

rendszerhez (egyszerre azonban csak egy használata javasolt)

• Minél alacsonyabb szintet választunk, annál több lehetőséggel fogunk rendelkezni az eszköz programozását

tekintve

• A gyakorlatokon a „CUDA Runtime” köztes szintet fogjuk használni, ahol a grafikus kártya lehetőségei már

jól kihasználhatók, de a programozás még meglehetősen egyszerű

2.3. ábra - [5]

1.6. CUDA alapú fejlesztés lépései

Feladat elemzése

• A hagyományos programozási környezetektől eltérően nem csak a feladat megoldásának algoritmusát kell

kidolgozni, hanem ebből ki kell keresni a jól párhuzamosítható területeket is

• A párhuzamosítható/nem párhuzamosítható részek aránya gyakran jól jelzi, hogy érdemes-e nekifogni az

átírásnak

• Gyakran érdemes az első kidolgozott algoritmust átdolgozni aszerint, hogy a feladat még jobban

párhuzamosítható legyen, illetve minél kevesebb memória másolást/kernel hívást igényeljen

Page 264: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

242 Created by XMLmind XSL-FO Converter.

Implementing the C/C++ code

• Bár fizikailag ezek egy forrás állományban találhatók, gyakorlatilag egymástól függetlenül kell elkészíteni a

• kód szekvenciális, CPU-n futó részleteit

• kód párhuzamos, GPU-n futó részleteit

Fordítási folyamat

• Maga a fordítás a különféle segédprogramoknak köszönhetően már nem különbözik jelentősen a

hagyományos C programokban megszokottól (mindezt megoldja az nvcc segédprogram)

2. Fordítás és szerkesztés

2.1. CUDA fordítás lépései

2.1.1. Bemenet

• Egy forrás állomány tartalmazhat CPU, illetve GPU által futtatandó kódokat is (mi esetünkben C/C++ kódot)

2.4. ábra - [2]

Page 265: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

243 Created by XMLmind XSL-FO Converter.

Fordítási folyamat

• Az EDG előfeldolgozó egyszerűen szétválasztja a forrás különböző platformoknak szánt részeit

• A CPU rész fordításához meghívja valamelyik általános C fordítási környezetet (esetünkben VC fordító, de

lehet a GNU C fordító is)

• A GPU rész a CUDA környezet által nyújtott fordító segítségével fordítható le a GPU által futtatható kóddá

2.1.2. Kimenet

Page 266: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

244 Created by XMLmind XSL-FO Converter.

• Az így létrejött állományok kezelhetőek külön, vagy egy futtatható állományon keresztül

2.2. nvcc fordító alapvető paraméterei

Fordítóprogram alapvető használata

• Alapértelmezett helye (Windows 64 bit esetében):

c:\CUDA\bin64\nvcc.exe

• Fordítás indítása:

nvcc [opcionális fordítási paraméterek] bemenet

2.2.1. Fordítás céljának meghatározása

• --compile(-c)

A felsorolt .c, .cc, .cpp, .cxx, .cu állományokat lefordítja object állománnyá

• --link(-link)

A lefordított object állományokból futtatható állományt szerkeszt

• --lib(-lib)

A lefordított object állományokból egy osztálykönyvtárat szerkeszt

• --run(-run)

Futtatható állományt szerkeszt, és azt el is indítja

• --ptx(-ptx)

Csak az eszköz számára írt kódokat fordítja le .ptx állománnyá

2.3. nvcc fordító alapvető paraméterei (2)

Útvonal információk meghatározása

• --output-directory <directory>(-odir)

A kimenő állomány helyének meghatározása

• --output-file <file>(-o)

A kimenő állomány nevének meghatározása

• --compiler-bindir <directory> (-ccbin)

A hoszt kódot kezelő fordító helyének meghatározása. Ez tipikusan lehet

• Microsoft Visual Studio C fordítója (cl.exe)

• valamilyen gcc változat

• --include-path <include-path>(-I)

Az „include” direktíván keresztül elérhető állományok helye

• --library <library>(-l)

A használni kívánt osztálykönyvtárak nevei

Page 267: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

245 Created by XMLmind XSL-FO Converter.

• --library-path <library-path>(-L)

A használni kívánt osztálykönyvtárak helye

2.4. nvcc fordító alapvető paraméterei (3)

Architektúra meghatározása

• --gpu-name <gpu architecture name> (-arch)

A fordítás során milyen hardver számára készüljön az eszköz kód. Ez lehet egy fizikai Nvidia GPU

megjelölés, vagy pedig valamelyik virtuális ptx architektúra.

Lehetséges értékek: 'compute_10', 'compute_11', 'compute_12', 'compute_13',

'sm_10','sm_11','sm_12','sm_13'

Alapértelmezett érték: 'sm_10'

• --gpu-code <gpu architecture name> (-code)

A kód generálás során milyen hardver számára készüljön az eszköz kód. Lehetséges értékei azonosak az –

arch paraméternél megadottakkal, és az ottani választással értelemszerűen összhangban kell lenniük

• --device-emulation(-deviceemu)

A fordító az emulátor számára futtatható kódot készítsen

2.5. nvcc fordító alapvető paraméterei (4)

Egyéb lényeges paraméterek

• --debug (-g)

A hoszt kód tartalmazzon nyomkövetési információkat is

• --optimize<level>(-O)

A hoszt kód optimalizációs szintjének meghatározása (hasonlóan a C fordítóknál megszokott szintekhez)

• --verbose(-v)

A fordítás során láthatóak legyenek a végrehajtott fordítási parancsok

• --keep (-keep)

A fordítást követően a fordító ne törölje le az ideiglenes állományokat (pl. a lefordított .ptx állományokat)

• --host-compilation <language>

Meghatározza a hoszt kódban használt programozási nyelvet.

Lehetséges értékei: 'C','C++','c','c++'

Alapértelmezett érték: 'C++'.

2.6. Példa parancssori fordításra

2.5. ábra -

Page 268: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

246 Created by XMLmind XSL-FO Converter.

2.7. Fordítás áttekintése

2.6. ábra -

3. Platform modell

3.1. CUDA platform modell

Eszközök meghatározása

• A 2.3.1 ábrán látható módon a CUDA környezet feltételezi, hogy az általa kezelt szálak egy független

egységen futnak le

• Ennek megfelelően meg kell különbözteti a gazdagépet (hoszt), amely a szálak, memória műveletek

kezeléséért felelős, illetve magát az eszközt (device), amely a CUDA szálak végrehajtásáért felelős

Asynch execution

Page 269: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

247 Created by XMLmind XSL-FO Converter.

• Bár az ábrán ezek egymást követő atomi lépésekként jelennek meg, a gyakorlatban általában lehetőség van

arra, hogy a két végrehajtó egység egyidőben futtasson programokat

2.7. ábra - [5]

Page 270: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

248 Created by XMLmind XSL-FO Converter.

Page 271: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

249 Created by XMLmind XSL-FO Converter.

3.2. CUDA platform modell (2)

Az eszközök felépítése

• A 2.3.2-es ábra mutatja egy CUDA kompatibilis eszköz elvi felépítését

• Minden eszköz tartalmaz egy, vagy több multiprocesszort, amelyek tartalmaznak egy, vagy több SIMT

végrehajtóegységet

Multiprocesszorok felépítése

• SIMT végrehajtóegységek

• A processzorok saját regiszterei

• Az egyes processzorok által közösen kezelhető megosztott memória

• Csak olvasható konstans, illetve textúra gyorsítótár

2.8. ábra - [5]

Page 272: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

250 Created by XMLmind XSL-FO Converter.

3.3. Hozzáférés az eszközökhöz

Number of CUDA compatible devices

• A cudaGetDeviceCount nevű eljárás segítségével lehet lekérdezni a CUDA alkalmazások futtatására alkalmas

eszközök számát

2.9. ábra -

Page 273: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

251 Created by XMLmind XSL-FO Converter.

• Az eljárás a cím szerint átadott deviceCount változóba helyezi el a CUDA kompatibilis eszközök

darabszámát

1. int deviceCount;

2. cudaGetDeviceCount(&deviceCount);

3.3.1. CUDA eszköz kiválasztása

• Az első eszközöket érintő művelet előtt ki kell választani egy eszközt, ezt a cudaSetDevice függvény

segítségével lehet elérni, aminek paramétere a kiválasztani kívánt eszköz sorszáma (0 – első eszköz)

2.10. ábra -

• Amennyiben explicit módon nem történik meg az eszközök kiválasztása, a keretrendszer automatikusan a 0

sorszámú eszközt fogja használni

• A kiválasztás a műveletet lefuttató hoszt szálra globálisan érvényes lesz

3.4. Eszközök adatai

• A CUDA osztálykönyvtár tartalmaz egy cudaDeviceProp nevű struktúrát, amely egy eszköz részletes adatait

tárolja. Ennek főbb mezői az alábbiak:

2.11. ábra -

3.5. Eszközök adatainak lekérdezése

Az eszközök adataihoz való hozzáférés

A cudaGetDeviceProperties nevű eljárás segítségével lehet lekérdezni egy megadott eszköz részletes adatait.

Page 274: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

252 Created by XMLmind XSL-FO Converter.

Az eljárás első paramétere egy előző oldalon megismert cudaDeviceProp struktúra címszerinti

paraméterátadással átadva, a második paramétere pedig az eszköz sorszáma, amelyről az adatokat le kell

kérdezni (a számozás 0-tól indul)

2.12. ábra -

3.5.1. Feladat 2.3.1

Írjuk ki a képernyőre az elérhető eszközök számát, illetve egy listában ezen eszközök neveit. A felhasználó

választhasson ezek közül egyet, majd listázzuk ki a képernyőre a kiválasztott eszköz részletes adatait (órajel,

memóriaméret, blokkméret stb.)

4. Memória modell

4.1. CUDA memória modell

Rendelkezésre álló memóriaterületek

• Szál szinten

• Saját regiszterek (Írható/Olvasható)

• Lokális memória (Írható/Olvasható)

• Blokk szinten

• Megosztott memória (Írható/Olvasható)

• Konstans memória (Olvasható)

• Rács szinten

• Globális memória (Írható/Olvasható)

• Textúra memória (Olvasható)

4.1.1. Kapcsolat a hoszttal

• A felsorolt memóriaterületek közül a hoszt csak a globális, a konstans és a textúra memóriához fér hozzá.

Tehát ezeken keresztül kell megoldani az eszközzel való kommunikációt (bemenő adatok, kimenő adatok

másolása)

2.13. ábra - [5]

Page 275: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

253 Created by XMLmind XSL-FO Converter.

4.2. CUDA memória modell – globális memória

Jellemzői

• Élettartama megegyezik az alkalmazás élettartamával

• Minden blokk minden száljából elérhető

• Accessible for the host

• Elérhető a hoszt számára is

• Elérhető a hoszt számára is

• Írható, olvasható

• Nagy méretű

• Meglehetősen lassú

Deklaráció

• Egy változó globális memóriába való elhelyezéséhez a __device__ kulcsszó használata szükséges

• Példa

2.14. ábra -

Page 276: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

254 Created by XMLmind XSL-FO Converter.

2.15. ábra - [5]

4.3. CUDA memória modell – konstans memória

Jellemzői

• Élettartama megegyezik az alkalmazás élettartamával

• Minden blokk minden száljából elérhető

• Elérhető a hoszt számára is

• Hoszt számára írható, olvasható

• Szálak számára csak olvasható

• Gyorsítótár miatt gyorsan kezelhető

Deklaráció

• Egy változó konstans memóriába való elhelyezéséhez a __constant__ kulcsszó használata szükséges

• Példa

2.16. ábra -

Page 277: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

255 Created by XMLmind XSL-FO Converter.

2.17. ábra - [5]

4.4. CUDA memória modell – textúra memória

Jellemzői

• Élettartama megegyezik az alkalmazás élettartamával

• Minden blokk minden száljából elérhető

• Elérhető a hoszt számára is

• Hoszt számára írható, olvasható

• Szálak számára csak olvasható

• Kezelése nem a szokásos bájt tömb alapú, hanem grafikai műveletekhez optimalizált

Deklaráció

• Részletesen nem tárgyaljuk

2.18. ábra - [5]

Page 278: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

256 Created by XMLmind XSL-FO Converter.

4.5. CUDA memória modell – megosztott memória

Jellemzői

• Élettartama megegyezik az őt tartalmazó blokk élettartamával

• Csak az őt tartalmazó blokk száljaiból érhető el

• Csak egy szálak közti szinkronizáció után garantálható a helyes tartalma

• Írható és olvasható

• Nagy sebességű hozzáférést tesz lehetővé

• Mérete meglehetősen korlátozott

Deklaráció

• A __shared__ kulcsszóval lehet kiválasztani ezt a területet

• Példa

2.19. ábra -

Page 279: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

257 Created by XMLmind XSL-FO Converter.

2.20. ábra - [5]

4.6. CUDA memória modell – regiszterek

Jellemzői

• Élettartama megegyezik a hozzá tartozó szál élettartamával

• Csak az őt tartalmazó szálból érhető el

• Írható és olvasható

• Nagy sebességű hozzáférést tesz lehetővé

• Nem dedikáltak a regiszterek, hanem egy regiszterhalmazból kerülnek kiosztásra

Deklaráció

• Az eszközön létrehozott változók, ha más direktíva ezt nem módosítja, mind a regiszterekbe kerülnek (ha van

hely)

• Példa

2.21. ábra -

Page 280: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

258 Created by XMLmind XSL-FO Converter.

2.22. ábra - [5]

4.7. CUDA memória modell – lokális memória

Jellemzői

• Élettartama megegyezik a hozzá tartozó szál élettartamával

• Csak az őt tartalmazó szálból érhető el

• Írható és olvasható

• Lassú, nagy méretű memóriaterület

4.7.1. Deklaráció

• Tulajdonképpen a regiszterekhez hasonló módon kezelendők

• Amennyiben a regiszterek közt már nincs hely a változó számára, akkor azok automatikusan a lokális

memóriába kerülnek elhelyezésre

• Példa

Page 281: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

259 Created by XMLmind XSL-FO Converter.

2.23. ábra -

2.24. ábra - [5]

4.8. Memória modell fizikai leképezése

Dedikált hardver memória

• Ide képződnek le a

• regiszterek,

• megosztott memória

• 1 órajelciklus alatt elérhető

Eszköz memória, gyorsítótár nélkül

• Ide képződnek le a

• lokális memóriába került változók,

• globális memória

Page 282: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

260 Created by XMLmind XSL-FO Converter.

• Kb. 100 órajelciklus alatt elérhető

2.25. ábra - [5]

Eszköz memória, gyorsítótárral

• Ide képződnek le a

• konstans memória,

• textúra memória,

• utasítás memória

Page 283: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

261 Created by XMLmind XSL-FO Converter.

• 1-10-100 órajelciklus alatt elérhető

4.9. Memory handling

Statikus módon

• Változók a C nyelvben megszokott módon deklarálandók

• Az előzőekben megismert kulcsszavak segítségével lehet meghatározni, hogy a változó pontosan milyen

memóriaterülen jöjjön létre (__device__, __constant__ stb.)

• A változóra a C nyelvben megszokott módon egyszerűen a nevével lehet hivatkozni, azokkal tetszőleges

művelet végezhető

Dinamikus módon

• A CUDA osztálykönyvtár által megadott memóriakezelő függvények segítségével lehet a memóriaterületeket

kezelni

• terület lefoglalása

• terület másolása

• terület felszabadítása

• A memóriaterületre egy mutató segítségével lehet hivatkozni

• A mutató használata megfelel a C nyelvben megismerteknek, azonban fontos figyelembe venni, hogy két

külön címtartomány tartozik a rendszer, illetve az eszköz memóriához, a két tartományban létező mutatók

nem keverhetők össze

4.10. Memória területek elérhetőség szerint

Az alábbi ábra összefoglalja, hogy az egyes memóriaterületek milyen szinteken érhetők el

2.26. ábra -

A táblázat tartalmazza, hogy az egyes memóriaterületek az egyes szinteken milyen módon érhetők el

2.27. ábra -

Page 284: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

262 Created by XMLmind XSL-FO Converter.

4.11. Dinamikus memóriakezelés – foglalás

Lineáris memória foglalás

• A hoszt kódjában tetszőleges helyen van lehetőség memóriaterületet foglalni az eszköz memóriájában

• Erre használható a cudaMalloc függvény, amelynek paraméterei:

• címszerinti paraméterként átadva egy mutató, amely majd a lefoglalt területre fog mutatni

• lefoglalni kívánt terület mérete bájtban megadva

• Például egy 256 darab lebegőpontos számot tárolni képes vektor lefoglalása:

2.28. ábra -

4.11.1. Memória felszabadítás

• A cudaFreeArray eljárás segítségével van lehetőség felszabadítani az eszköz memóriájában lefoglalt

területeket

• A függvény paramétere a felszabadítandó területre mutató pointer

2.29. ábra -

4.12. Memória területek közötti másolás

• A cudaMemcpy függvény segítségével van lehetőség a különböző memóriaterületek közötti másolásokra

• Szükséges paraméterek:

• Cél mutató

• Forrás mutató

• Másolandó bájtok száma

• Másolás iránya

• Másolás iránya lehet:

• hoszt → hoszt

(cudaMemcpyHostToHost)

• hoszt → eszköz

(cudaMemcpyHostToDevice)

• eszköz → hoszt

Page 285: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

263 Created by XMLmind XSL-FO Converter.

(cudaMemcpyDeviceToHost)

• eszköz → eszköz

(cudaMemcpyDeviceToDevice)

2.30. ábra -

2.31. ábra - [5]

4.13. Rögzített memória (pinned memory)

• A hoszt oldalon van lehetőség rögzített memória lefoglalására. Ez azt jelenti, hogy ez a terület mindig

fizikailag a memóriában marad, így a GPU a CPU kihagyásával is hozzáférhet

• A nem rögzített memória területek átkerülhetnek a swap területre (gyakorlatilag a merevlemezre), így ezeknél

a közvetlen hozzáférés nem megengedett, az betöltési problémákat okozhatna

• Aszinkron memória átvitelhez a hoszt memóriát is az alábbi CUDA függvényekkel kell lefoglalni:

• cudaHostAlloc()

• cudaFreeHost()

Page 286: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

264 Created by XMLmind XSL-FO Converter.

• Ezek számos előnnyel járnak:

• Másolás a rögzített memória és az eszköz memória között párhuzamosan is folyhat valamilyen kernel

futtatással

• Néhány GPU esetében a rögzített memória olyan helyre is kerülhet, ahol maga a GPU is elérheti

• Bizonyos rendszerek esetében a memória átvitel sebessége is megnövekedhet ezekben az esetekben

• Természetesen a operációs rendszer számára ez jelentős megszorítást jelent, mivel fizikailag jóval kevesebb

memóriával tud gazdálkodni. Emiatt túl sok rögzített memória foglalása ronthatja a rendszer teljes

teljesítményét.

4.14. Másolás nélküli memória (zero-copy memory)

• A rögzített memória egy speciális változata a másolás nélküli memória. Ebben az esetben nincs szükség

átvitelre a hoszt és az eszköz memória között, ezt a memóriaterületet mindketten elérik

• Gyakran leképezett memóriának is nevezik (mapped memory) mivel ebben az esetben a központi memória

egy része lett leképezve a CUDA címtérbe

• Hasznos abban az esetben, ha

• A GPU-nak nincs saját memóriája, hanem a rendszer memóriát használja

• A hoszt hozzá akar férni az adatokhoz még a kernel futása alatt

• Az adat nem fér el a GPU memóriájában

• Elég sok számítást tudunk indítani, ami elrejti a memória hozzáférésból adódó késedelmet

• Ezt a memóriát megosztja a hoszt és a GPU, emiatt az alkalmazást szinkronizálni kell az események

segítségével

• A CUDA eszköz jellemzők közül kiolvasható, hogy a megadott eszköz támogatja-e ezt a funkciót:

canMapHostMemory = 1 ha elérhető

Mozgatható rögzített memória

• Ez a memória típus mozgatható az egyes szálak között (több GPU esetében van szerepe)

5. Végrehajtási modell

5.1. CUDA végrehajtási modell - szálak

• Minden szál rendelkezik egy egyedi azonosítóval, célszerűen ez az azonosító használható arra, hogy

kijelöljük a szál által feldolgozandó adatsort

• A szál azonosító lehet

• 1 dimenziós

• 2 dimenziós (lásd az ábrán)

• 3 dimenziós

• A kernel kódjában a szál azonosítója elérhető a threadIdx (thread index) nevű változón keresztül

• Többdimenziós azonosító esetén ez a változó egy struktúrát tartalmaz, aminek elemeihez a threadIdx.x,

threadIdx.y, threadIdx.z mezőkön keresztül lehet hozzáférni

2.32. ábra -

Page 287: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

265 Created by XMLmind XSL-FO Converter.

5.2. CUDA blokkok

• Az eszközök egyszerre csak korlátozott számú szál futtatására alkalmasak, ami egy nagyobb adattér

párhuzamos feldolgozásához már kevés lehet (pl. max 512 szál ↔ 100x100 mátrix = 10000 elem)

• Az eszköz emiatt a teljes adatteret felbontja blokkokra (block), amelyeket egymástól függetlenül (egymás

után vagy több multiprocesszor esetén akár párhuzamosan) dolgoz fel

• A blokkok által alkotott hierarchiát nevezzük rácsnak (grid)

Blokkokra bontás módja

• A CUDA alkalmazások esetén a szálak indítása és felparaméterezése nem a programozó feladata, mindezt a

keretrendszer hajtja végre, ennek megfelelően a blokkok létrehozását, a szálak blokkokba rendelését szintén a

keretrendszer végzi el

• A felhasználó a felbontásba az alábbi paraméterek segítségével tud csak beavatkozni:

• indítani kívánt szálak száma egy blokkon belül (1,2,3 dimenziós)

• blokkok száma a rácsban (1,2 dimenziós)

5.3. Blokkok azonosítása

• Az egyes szálak blokkokba vannak rendezve, amelyek szintén saját azonosítóval rendelkeznek

• Ez az azonosító lehet

• 1 dimenziós

• 2 dimenziós (lásd az ábrán)

• 3 dimenziós (Fermi és utána)

Page 288: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

266 Created by XMLmind XSL-FO Converter.

• A kernel kódjában a blokk azonosítója elérhető a blockIdx (block index) nevű változón keresztül,

többdimenziós esetben használható a blockIdx.x, blockIdx.y forma

• Egy kernel indítás esetén a blokkok mérete mindig azonos, ez elérhető a blockDim változón keresztül

(többdimenziós esetben ennek mezői blockDim.x, blockDim.y, blockDim.z)

2.33. ábra - [5]

5.4. Globális – lokális index

5.4.1. Lokális azonosító

• Minden szál rendelkezik egy lokális azonosítóval, ami nem más, mint az előzőleg megismert threadIdx

változó által tárolt érték.

Page 289: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

267 Created by XMLmind XSL-FO Converter.

• Ez tulajdonképpen a szál helye az őt tartalmazó blokkon belül

• A blokkon belüli első szál azonosítója a dimenziótól függően 0, [0,0], [0,0,0]

5.4.2. Globális azonosító

• Amennyiben futtatás során nem csak egy, hanem több blokk is létrejött, a lokális azonosítók már nem tudják

egyértelműen azonosítani a szálat

• Mivel azonban ismert a szálat tartalmazó blokk azonosítója (az előzőleg megismert blockIdx változó

tartalmazza), illetve ismert a blokkok mérete (blockDim), egyszerűen kiszámítható a szál globális

azonosítója:

Pl. Globalis_x_komponens = blockIdx.x * blockDim.x + threadIdx.x

• A kernel indításakor nincs lehetőség az egyes szálakhoz különböző paraméterek eljuttatására (pl. a mátrix

hányadik elemét dolgozzák fel), emiatt az egyes szálak lefutása közötti különbségeket csak a globális

azonosító használatával érhetjük el

5.5. Néhány alapvető összefüggés

Bemenő adatok

• Indextér mérete: Gx, Gy

(értelemszerűen származik a problématér méretéből)

• Blokkok mérete: Sx, Sy

(az eszköz által nyújtott lehetőségeknek megfelelő érték)

• Szálak száma: Gx * Gy

• (ennyiszer fog lefutni a megadott kernel)

• Globális azonosító: (0..Gx - 1, 0..Gy – 1)

(az egyes szálak és az így meghatározott indextér elemei között egy-egy megfeleltetés jön létre)

• Blokkok száma: (Wx, Wy) = ((Gx – 1)/ Sx+ 1, (Gy – 1)/ Sy + 1)

(megadott blokkméret mellett hány blokkra van szükség)

• Globális azonosító: (gx, gy) = (wx * Sx + sx, wy * Sy + sy)

• Lokális azonosító: (wx, wy) = ((gx – sx) / Sx, (gy – sy) / Sy)

5.6. CUDA végrehajtási modell – kernel

• Egy CUDA alapú kernel első ránézésre egy egyszerű C függvénynek tűnik, attól azonban különbözik néhány

lényeges vonásban:

• speciális kulcsszavak különböztetik meg a szokásos C függvényektől

• különféle speciális változók használhatók a függvény törzsében (a már megismert szál, blokk azonosítók)

• közvetlenül nem hívhatók meg a hoszt gép kódjából

Függények megjelölésére szolgáló kulcsszavak

• __device__

• Futás helye: eszköz

Page 290: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

268 Created by XMLmind XSL-FO Converter.

• Meghívás helye: eszköz

• __global__

• Futás helye: eszköz

• Meghívás helye: hoszt

• __host__

• Futás helye: hoszt

• Meghívás helye: hoszt

5.7. CUDA végrehajtási modell – kernel indítása

• A hoszt bármikor meghívhat egy kernelt az alábbi szintaxis szerint:

Függvénynév<<<Dg, Db, Ns, S>>>(paraméterek)

ahol:

• Dg – rács méret

• Egy dim3 típusú struktúra, amely megadja a létrehozandó rács méretét

Dg.x * Dg.y = létrejövő blokkok száma

• Szintén egy dim3 típusú struktúra, amely megadja az egyes blokkok méretét

Dg.x * Dg.y * Dg.z = egy blokkon belül a szálak száma

• Ns – megosztott memória mérete (elhagyható)

Egy size_t típusú változó, amely megadja, hogy blokkonként mekkora megosztott memóriát kell lefoglalni a

futtatáskor

• S – csatorna (elhagyható)

• Egy cudaStream_t típusú változó, amely egy csatornához (stream) rendeli a hívást

5.8. Kernel indítással kapcsolatos típusok

dim3 type

• A kernel indításakor mind a rácsra, mind pedig a blokkokra vonatkozóan meg kell adni egy méretet. A rács

esetében ez 1 vagy 2, a blokkok esetében pedig 1, 2 vagy 3 dimenziós méreteket jelenthet

• A könnyű kezelhetőség érdekében bevezették a dim3 struktúrát, amelynek segítségével egyszerűen meg lehet

adni ezeket az értékeket.

• Az alábbi példa bemutatja ennek használatát 1, 2 illetve 3 dimenzió esetében

2.34. ábra -

Page 291: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

269 Created by XMLmind XSL-FO Converter.

size_t type

• Memóriaméretek megadásakor használatos típus, platformtól függő, de alapvetően egy előjel nélküli egész

szám

cudaStream_t típus

• Egy csatorna azonosítója, tulajdonképpen egy egész szám

5.9. Kernel implementálása

• Az alábbi példa egy egyszerű kernelt mutat be, amely egy vektor minden elemét megszorozza kettővel:

2.35. ábra -

• A __global__ kulcsszó jelzi, hogy az eszközön futtatandó a függvény

• Kernel esetében nincs értelme a visszatérési értéknek

• A függvény neve vectorMul

• A függvény egy paraméterrel rendelkezik, egy float tömb kezdőcímével

• Látható, hogy nem a kernel tartalmazza azt, hogy hányszor fog lefutni, hanem majd az indításakor megadott

paraméterek határozzák meg

• Szintén látható, hogy a kernel (mivel nem kaphat csak neki szánt paramétereket) a szál azonosító (threadIdx)

alapján választja ki azt, hogy melyik számot kell megszoroznia

5.10. Kernel elindítás példa

• A legegyszerűbb esetben, ha a feldolgozandó elemek száma nem nagyobb, mint a maximális blokkméret,

1x1-es rácsméret mellett is elindítható az előző kernel

• We use 1x1 grid size (first parameter)

• A megadott paramétereknek megfelelően tehát az eszközön 1 blokk fog létrejönni, ami összesen 200 darab

szálat fog tartalmazni.

2.36. ábra -

• A megadott paramétereknek megfelelően tehát az eszközön 1 blokk fog létrejönni, ami összesen 200 darab

szálat fog tartalmazni.

Page 292: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

270 Created by XMLmind XSL-FO Converter.

• Mivel egydimenziós adatok lettek megadva, így a szálak lokális azonosítói is ennek megfelelően jönnek létre:

0 .. 199 között lesznek

• Az egyetlen létrejött blokk azonosítója 0 lesz

• A kernelben lekérdezhető blokk méret pedig 200 lesz

5.11. Blokkokat kezelő kernel implementálása

• Amennyiben pl. 1000 darab elemet kell megszorozni, ami meghaladná az eszközünk által kezelhető szálak

számát, blokkokat kezelő kernel kell:

2.37. ábra -

• Tehát ha nem csak egy blokk jött létre, hanem több, akkor a szál által feldolgozandó elem címének

meghatározásakor a teljes globális címet kell használni

• Az eljárásban szereplő feltételre csak akkor van szükség, ha a teljes elemszám nem osztható a blokkmérettel.

Ebben az esetben ugyanis (mivel a blokkok mérete mindig azonos) az utolsó blokk túlnyúlik a tényleges

indextéren, így az utolsó szálak túlcímeznék a vektort

5.12. Blokkokat kezelő kernel indítás példa

• Amennyiben 1000 db elemet kell feldolgozni, és a maximális blokkméret 512, célszerű lehet az alábbi

kernelhívást alkalmazni:

2.38. ábra -

• Ebben a példában 4 blokk jön majd létre (0,1,2,3 azonosítóval) és minden blokkon belül 250 szál (0..249

lokális indexekkel)

• Amennyiben a fordításkor még nem ismert a vektorok elemszáma, az alábbi képletekkel egyszerűen

kiszámolhatók a hívási paraméterek (N – vektorok mérete, BM – választandó blokkméret)

• blokkok száma : (N-1) / BM + 1

• blokkméret : BM

5.13. Teljes alkalmazás elkészítése

Page 293: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási modell

271 Created by XMLmind XSL-FO Converter.

5.13.1. Feladat 2.5.1

Az eddig tanultakat felhasználva készítsünk CUDA programot, ami végrehajta az alábbiakat:

• Listázza a CUDA kompatibilis eszközök nevét a képernyőre

• A felhasználó ezek közül tudjon egyet választani

• Foglaljon le egy N méretű vektort (A)

• Töltse fel az A vektort tetszőleges adatokkal

• Másolja át ezeket az adatokat a grafikus kártya memóriájába

• Indítson el egy kernelt, ami kiszámítja az A = A * 2 eredményt

Ehhez N darab szálat és BlockN méretű blokkot használjon

• Másolja vissza a A vektor értékét a központi memóriába

• Írja ki az így kapott A vektor elemeinek értékét a képernyőre

Page 294: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

272 Created by XMLmind XSL-FO Converter.

3. fejezet - Programozási környezet

1. Visual Studio használata

1.1. Visual Studio lehetőségek

• A legutolsó CUDA verziók támogatják a Visual Studio 2008/2010-at

• Telepítés után, néhány új CUDA funkció jelenik meg a Visual Studioban

• New project wizard

• Custom build rules

• CUDA syntax highlighting

• Stb.

1.1.1. New project wizard

• Select File/New/Project/Visual C++/CUDA[64]/CUDAWinApp

• Válasszuk a “Next” gombot a megjelenő képernyőn

3.1. ábra -

1.2. New project wizard

• Ki ki választani az alkalmazás típusát, ami az alábbiak közül lehet valamelyik:

Page 295: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

273 Created by XMLmind XSL-FO Converter.

• Windows application

• Console application – példáinkban ezt fogjuk használni

• DLL

• Static library

• Fejléc állományok

• ATL

• MFC

• További beállítások

• Empty project

• Export symbols

• Precompiled header

• Kattintsunk a “Finish” gombra az új üres CUDA project generálásához

3.2. ábra -

1.3. Custom build rules

• A project nevén jobb kattintás után “Custom build rules”-t választva

• Megjelenik egy vagy több saját CUDA fordítási szabály

Page 296: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

274 Created by XMLmind XSL-FO Converter.

• Ezek közül kell kiválasztani a megfelelőt az alapján, hogy

• Runtime API vagy Driver API

• CUDA verzió

3.3. ábra -

1.4. CUDA-val kapcsolatos project beállítások

• “Project properties” listából kiválasztható a “CUDA Build Rule” sor

• Több fülön számos beállítás jelenik meg (debug symbols, GPU arch., etc.)

• Az nvcc fordítónál már tárgyalt beállítások jelennek meg itt is

• A “Command Line” fül mutatja a használt beállításokat

3.4. ábra -

Page 297: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

275 Created by XMLmind XSL-FO Converter.

2. Számítási képességek

2.1. Számítási képességek (1)

• Az eszközök folyamatos fejlesztése nem csak a sebesség és a végrehajtó egységek számának növelésében

jelenik meg, hanem gyakran az egész architektúrát is érintő változások is bekövetkeztek. Az egyes eszközök

által támogatott funkciókat a „számítási képesség” azonosító mutatja

• Compute capability 1.0

• blokkonként a szálak maximális száma 512

• blokkok maximális mérete dimenziónként 512 x 512 x 64

• rács maximális mérete dimenziónként 65535 x 65535

• multiprocesszoronként a blokkok száma maximum 8

• multiprocesszoronként a warpok száma maximum 24

• multiprocesszoronként a szálak száma maximum 768

• multiprocesszoronként a regiszterek száma 8K

• multiprocesszoronként a megosztott memória mérete 16KB

• egy multiprocesszor 8 végrehajtó egységet tartalmaz

• egy warp mérete 32 szál

• Compute capability 1.1

• 32 bites atomi műveletek támogatása a globális memóriában

Page 298: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

276 Created by XMLmind XSL-FO Converter.

2.2. Számítási képességek (2)

• Compute capability 1.2

• 64 bites atomi műveletek támogatása a globális és a megosztott memóriában

• warp szavazás funkciók

• multiprocesszoronként a regiszterek száma maximum 16K

• multiprocesszoronként a warpok száma maximum 32

• multiprocesszoronként a szálak száma maximum 1024

• Compute capability 1.3

• duplapontosságú lebegőpontos számok támogatása

• Compute capability 2.0

• blokkonként a szálak maximális száma 1024

• blokkok maximális mérete dimenziónként 1024 x 1024 x 64

• multiprocesszoronként a warpok száma maximum 32

• multiprocesszoronként a szálak száma maximum 1536

• multiprocesszoronként a regiszterek száma maximum 32K

• multiprocesszoronként a megosztott memória mérete 48KB

2.3. Számítási képességek (3)

• Compute capability 3.0

• atomi műveletek 64 bites egészekkel a megosztott memóriában

• atomi műveletek 32 bites lebegőpontos számokkal a globális és megosztott memóriában

• __ballot()

• __threadfence_system()

• __syncthreads_count()

• __syncthreads_and()

• __syncthreads_or()

• felszíni függvények

• 3D rács a blokkok számára

• multiprocesszoron belül a blokkok száma 16

• multiprocesszoron belül a warpok száma 64

• multiprocesszoron belül a 32 bites regiszterek száma 64K

• 3D rács a blokkok számára

• Compute capability 3.5

Page 299: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

277 Created by XMLmind XSL-FO Converter.

• Funnel Shift műveletek

• 32 bites regiszterek száma szálanként 255

• Number of 32-bit registers per multiprocessor is 64K

2.4. Compute capability (4)

• Compute capability 3.5

• Funnel Shift műveletek

• Maximum number of 32-bit registers per thread is 255

2.5. Néhány Nvidia GPU számítási képessége

3.5. ábra -

2.6. Néhány Nvidia GPU számítási képessége

3.6. ábra -

Page 300: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

278 Created by XMLmind XSL-FO Converter.

• További részletes adatok az alábbi oldalon:

http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units

3. CUDA nyelvi kiterjesztés

3.1. CUDA language extensions

• Egy CUDA alkalmazás fejlesztése hasonlít egy C vagy C++ alkalmazás fejlesztéséhez. A fejlesztő számára a

fordító munkája szinte láthatatlan, egy forráskód tartalmazza a hoszt és az eszköz számára szánt kódokat

• A kernelek készítése, illetve azok hoszt általi kezelése igényelnek néhány speciális műveletet, ezek azonban

szintén a C szintaxisnak megfelelő (hasonló) módon jelennek meg a kódban

• CUDA alkalmazást a C illetve a C++ szintaxisnak megfelelően is fejleszthetünk, mi a gyakorlatokon a C

formát részesítjük előnyben

A CUDA API három szintje

• A CUDA programból elérhető kiterjesztéseket (függvények, típusok, kulcsszavak) célszerűen az elérhetőségi

kör szerint csoportosíthatjuk:

• csak a hoszt számára elérhető elemek

• csak az eszköz számára elérhető elemek

• mindkét oldalon elérhető elemek

3.2. Mindkét oldalon elérhető típusok

Beépített vektor típusok

• Az alábbi beépített típusok elősegítik a vektorokkal való munkát:

• char1, uchar1, char2, uchar2, char3, uchar3, char4, uchar4

• short1, ushort1, short2, ushort2, short3, ushort3, short4, ushort4

• int1, uint1, int2, uint2, int3, uint3, int4, uint4

• long1, ulong1, long2, ulong2, long3, ulong3, long4, ulong4

• float1, float2, float3, float4, double2

• Értelemszerűen pl. az int4, egy 4 darab int típusú elemet tartalmazó vektor

• A vektorok egyes komponensei az x, y, z, w mezőkön keresztül érhetők el (a vektor dimenziójának

megfelelően)

• A vektorok rendelkeznek egy make_típus nevű konstruktor függvénnyel pl. Pl. int2 make_int2(int x, int y)

3.2.1. dim3 típus

• A blokkok, rácsok méretének megadásakor használt típus

• Hasonló az uint3 típushoz, azonban létrehozásakor a nem definiált mezők értéke automatikusan 1 lesz

3.3. Mindkét oldalon elérhető függvények

Matematikai függvények

Page 301: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

279 Created by XMLmind XSL-FO Converter.

• A kernelek az eszközön fognak lefutni, így ezekben értelemszerűen nem használható a C-ben megismert

függvények többsége (I/O műveletek, összetett függvények stb.)

• A matematikai függvények egy jelentős része azonban elérhető a kernel oldalon is

• alapvető aritmetika

• szögfüggvények

• logaritmus, gyökvonás stb.

Időméréssel kapcsolatos függvények

• A clock függvény segítségével célszerű mérni a kernelek futásidejét, szignatúrája:

clock_t clock

• Az eszköz kódjában lefuttatva egy folyamatosan növekvő (órajel frekvenciának megfelelően) számláló

aktuális értékét adja vissza

• Csak az eltelt időre enged következtetni, nem a kernelben lévő utasítások végrehajtására fordított tényleges

ciklusok számára

3.4. Csak eszköz oldalon elérhető változók

gridDim

• Típusa: dim3

• Az aktuális szálat tartalmazó rács mérete

blockIdx

• Típusa: uint3

• Az aktuális szálat tartalmazó blokk poziciója a rácsban

blockDim

• Típusa: dim3

• Az aktuális szálat tartalmazó blokk mérete

threadIdx

• Típusa: uint3

• Az aktuális szál poziciója az őt tartalmazó blokkban

warpSize

• Típusa: int

• Warp méret

3.5. Csak eszköz oldalon elérhető függvények

Gyors matematikai függvények

• Az alábbi gyors matematikai függvények elérhetők az eszköz kódjában:

• __fdividef__sinf, __cosf, __tanf, __sincosf, __logf, __log2f, __log10f, __expf, __exp10f, __powf

Page 302: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

280 Created by XMLmind XSL-FO Converter.

• Az eszközön használhatók a hagyományos matematikai függvények is, ezekhez képest a fenti változatokra

általában jellemző:

• gyorsabbak, mivel kihasználják a hardver által nyújtott lehetőségeket

• kisebb pontosságot garantálnak

Blokkon belüli szinkronizáció

• A kernel kódjában van lehetőség az egy blokkon belüli szálakra vonatkozó hardveres szinkronizációra. Ennek

formája:

void __syncthreads()

• hatása: a függvényt lefuttató szálak blokkolódnak egészen addig, amíg a blokkon belül található összes szál

le nem futtatja a függvényt

• hatóköre: csak egy blokkon belül található szálakra vonatkozik

• Elágazásokban is használható, de lényeges, hogy minden szál eljusson a szinkronizációig, különben a teljes

futtatás blokkolódhat

Atomi műveletek

• Az atomi műveletek egész számokon végeznek el műveleteket, amelyek során garantálják az olvasás-

módosítás-írás atomiságát:

atomicAdd, atomicSub, atomicExch, atomicMin, atomicMax, atomicInc, atomicDec, atomicCAS, atomicAnd,

atomicOr, atomicXor

• Használhatók a megosztott és a globális memóriában is

• Működési elvükből kifolyólag meglehetősen rontják a párhuzamos algoritmusok hatékonyságát

Warp szavazási funkciók

• Csak 1.2-es számítási képesség felett érhetők el

• int __all(int condition

Az összes szál kiértékeli a feltételt, a visszatérési értéke pedig csak akkor nem 0, ha mindegyik kiértékelés

igazat adott vissza

• int __any(int condition)

Az összes szál kiértékeli a feltételt, a visszatérési értéke pedig csak akkor nem 0, ha legalább az egyik

kiértékelés igazat adott vissza

3.6. Csak hoszt oldalon elérhető függvények

Már megismert műveletek

• Eszközöket kezelő műveletek

• Lásd előző diák

• Kontextusokat kezelő műveletek

• Lásd előző diák

• Memóriát kezelő műveletek

• Lásd előző diák

Page 303: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

281 Created by XMLmind XSL-FO Converter.

• Program modulokat kezelő műveletek

• Lásd előző diák

• Kernelek végrehajtásához kapcsolódó műveletek

• Lásd előző diák

Hibakezelés

• cudaError_t cudaGetLastError()

Visszaadja az utolsó hiba kódját

• Const char* cudaGetErrorString(cudaError_t error)

Visszaadja az átadott hibakódhoz tartozó szöveges leírást

4. Aszinkron konkurens végrehajtás

4.1. Stream-ek

• Az alkalmazások a stream-eken keresztül kezelik a konkurens végrehajtást

• Egy stream tulajdonképpen parancsok sorozatát tartalmazza (esetenként más-más hoszt szálból érkező

parancsokat), amelyeket a megadott sorrendben hajt végre. A különböző stream-ek a megadott parancsokat

végrehajthatják különféle sorrendekben is bizonyos szabályokat megtartva [11]

• A stream-ek támogatják a konkurens végrehajtást

• Különböző stream-ek műveletei párhuzamosan is végrehajthatók

• Különböző stream-ek műveletei átfedhetik egymást

3.7. ábra - [12]

4.2. Stream-ek létrehozás és megszüntetése

• A stream-eket a cudaStream_t típus képviseli

• Stream készítésére használható a cudaStreamCreate függvény

• Parameterei: pStream – mutató az új stream azonosítóra

Page 304: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

282 Created by XMLmind XSL-FO Converter.

3.8. ábra -

• Stream megszüntetésére használható a cudaStreamDestroy függvény

• Parameterei: pStream – a megszüntetendő stream

3.9. ábra -

• Gyakori, hogy stream-ek tömbjén kell dolgoznunk

3.10. ábra -

4.3. Stream-ek használata

• Néhány CUDA függvény tartalmaz egy további stream paramétert is

• cudaError_t cudaMemcpyAsync(

void *dst,

const void *src,

size_t count,

enum cudaMemcpyKind kind,

cudaStream_t stream = 0)

• Kernel indítás:

Func<<< grid_size, block_size, shared_mem, stream >>>

• Konkurens végrehajtás további követelményeket igényelhet

• Aszinkron másolás különböző irányokba

• Page locked memória

• Elég erőforrás

• Amennyiben nem adunk meg stream azonosítót, a CUDA egy alapértelmezett stream-et kezd használni (0

azonosítóval)

• Amennyiben nincs stream megadva

Page 305: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

283 Created by XMLmind XSL-FO Converter.

• Szinkron hoszt – eszköz hívások

• Kivétel: GPU kernel hívások alapesetben is aszinkron módon futnak le, még hiányzó stream paraméter

esetén is

4.4. Példa a stream-ek használatára

3.11. ábra -

• Minden stream1 és stream2 művelet párhuzamosan fut

• Minden adatműveletnek egymástól függetlennek kell lennie

4.5. Stream szinkronizáció

• Minden stream szinkronizálására használható a cudaDeviceSynchronize

Ez addig várakoztatja a hoszt szálat, amíg minden CUDA hívás végez

3.12. ábra -

• Megadott stream-ek szinkronizálására használható a cudaStreamSynchronize

• Paramétere: stream – a szinkronizálandó stream

3.13. ábra -

• A programozó különféle eseményeket is készíthet a szinkronizáláshoz

4.6. Szinkronizációt magukba foglaló műveletek

• Page-locked memória foglalás

• cudaMallocHost

Page 306: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

284 Created by XMLmind XSL-FO Converter.

• cudaHostAlloc

• Eszköz memória foglalás

• cudaMalloc

• Szinkron memória műveletek

• cudaMemcpy

• cudaMemset

• Megosztott memória konfiguráció változtatása

• cudaDeviceSetCacheConfig

4.7. Stream időzítés [12]

• A Fermi hardver három sort kezel

• 1 Compute Engine sor (számítások)

• 2 Copy Engine sor (másolások)

• Hosztról eszközre másolás

• Eszközről hosztra másolás

• CUDA műveletek a kiadás sorrendjében jutnak el az egyes eszközökre

• Bekerülnek a megfelelő sorba

• Az egyes sorok közötti függőségeket automatikusan kezeli a rendszer (de egy soron belül ez változtatható)

• CUDA műveletek feldolgozásra kerülnek a sorban, ha

• Megelőző műveletek az azonos stream-ben már végeztek,

• Megelőző műveletek az azonos sorban már végeztek, és

• A szükséges erőforrások rendelkezésre állnak

• CUDA kernelek futhatnak párhuzamosan is, ha különböző stream-ekben helyezkednek el

• A következő szál blokkokat akkorra ütemezi a rendszer, amikor már az összes megelőző kernelfutáshoz

tartozó blokk végzett, és rendelkezésre állnak a szükséges erőforrások

• Egy blokkoló művelet minden műveletet blokkol a sorban, még az egyéb stream-ekben találhatókat is

4.8. Konkurens végrehajtás támogatása

• Compute Capability 1.0

• Csak GPU/CPU konkurens végrehajtás

• Compute Capability 1.1

• Aszinkron memória másolás támogatása

• Az asyncEngineCount eszköz tulajdonság mutatja, hogy támogatott-e

• Compute Capability 2.0

Page 307: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

285 Created by XMLmind XSL-FO Converter.

• Konkurens GPU kernel futtatások támogatása

• A concurrentKernels eszköz tulajdonság mutatja, hogy támogatott-e

• Támogatja a kétirányú, egyidejű másolásokat is

• Az asyncEngineCount eszköz tulajdonság mutatja meglétét

4.9. Példa blokkolt sorra

• Tekintsünk két stream-et az alábbi műveletekkel:

• Stream1: HDa1, HDb1, K1, DH1

• Stream2: DH2

3.14. ábra - [12]

4.10. Példa blokkolt sorra (2)

• Tekintsünk két stream-et az alábbi műveletekkel:

• Stream1: Ka1, Kb1

• Stream2: Ka2, Kb2

3.15. ábra - [12]

Page 308: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

286 Created by XMLmind XSL-FO Converter.

5. CUDA események

5.1. Események létrehozása és megszüntetése

• A cudaEventCreate függvény létrehoz egy CUDA eseményt

cudaError_t cudaEventCreate(cudaEvent_t *event)

• Az első paramétere egy esemény típusú mutató

• A függvény létrehoz egy új eseményt, és a paraméterként átadott mutató erre fog hivatkozni

• A függvény visszatérési értéke a szokásos CUDA hibakód

• Egy példa

3.16. ábra -

• Egy haladóbb változata a függvénynek:

cudaEventCreateWithFlags (bővebben lást a CUDA dokumentációt)

• A cudaEventDestroy függvény megszünteti az esemény objektumot

cudaError_t cudaEventDestroy(cudaEvent_t event)

• Az első paramétere a megszüntetendő esemény objektum

• Egy példa:

3.17. ábra -

5.2. Esemény rögzítése

• A cudaEventRecord függvény rögzít egy eseményt egy már létező stream-be

cudaError_t cudaEventRecord (

cudaEvent_t event,

cudaStream_t stream = 0

)

• Az első paraméter a rögzítendő esemény

• A második paraméter a stream, ahová rögzíteni kell

• Az esemény akkor kerül rögzítésre, ha az összes megelőző művelet befejeződött a megadott stream-ben (0

stream esetén ez a teljes CUDA kontextusra vonatkozik)

Page 309: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

287 Created by XMLmind XSL-FO Converter.

• cudaEventQuery és/vagy cudaEventSynchronyze függvényekkel lehet megállapítani, hogy mikorra lett

rögzítve

• Egy esemény felvétele esetén az felülírja a meglévő állapotot

3.18. ábra -

5.3. Esemény szinkronizálása

• A cudaEventSynchronize függvény szinkronizál egy eseményt. Addig vár, amíg az összes megelőző művelet

végrehajtásra kerül az aktuális cudaEventRecord() előtt

• cudaError_t cudaEventSynchronize(cudaEvent_t event)

• Az egyetlen paramétere az esemény, amire várni kell

• Ha a cudaEventRecord nem lett meghívva, akkor a függvény azonnal visszatér

• Az eseményre való várakozás blokkolni fogja a teljes CPU szálat, amíg nem hajtódik végre az esemény az

eszközön

3.19. ábra -

5.4. Esemény ellenőrzése

• A cudaEventQuery függvény ad információkat egy eseményről

cudaError_t cudaEvent

• Az első paramétere az esemény

• Információkat ad az eszközön található munkákról, amelyek megelőzik a hozzá tartozó cudaEventRecord

hívást

• Amennyiben az események bekövetkeztek, vagy a cudaEventRecord nem lett meghívva, akkor a

visszatérési értéke: cudaSuccess

• Egyéb esetben a visszatérési értéke: cudaErrorNotReady

3.20. ábra -

Page 310: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

288 Created by XMLmind XSL-FO Converter.

5.5. Szinkronizáció eseményekkel

• A cudaStreamWaitEvent függvény blokkol egy stream-et, amíg egy esemény be nem következik

cudaError_t cudaStreamWaitEvent(

cudaStream_t stream,

cudaEvent_t event,

unsigned int flags

)

• Első paramétere a blokkolni kívánt stream

• Második paraméter az esemény, amire várni kell

• Harmadik paraméter opcionális

• Minden további munkát várakoztat, amíg az esemény végrehajtása be nem következett. A szinkronizációt

maga az eszköz fogja végrehajtani

• Az esemény származhat más kontextusból is, ilyenkor eszközök közötti szinkronizációra is használható

• A stream csak az aktuális cudaEventRecord hívásra figyel

• Ha a stream értéke NULL, minden további művelet várakozni fog az esemény bekövetkeztére

5.6. Szinkronizáció eseményekkel (példa)

3.21. ábra -

Page 311: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

289 Created by XMLmind XSL-FO Converter.

5.7. Események között eltelt idő számítása

• A cudaEventElapsedTime függvény kiszámítja két esemény között eltelt időt

cudaError_t cudaEventElapsedTime(float *ms,

• cudaEvent_t start,

cudaEvent_t end

)

• Az első paramétere egy float változóra hivatkozó mutató. Ide fogja eltárolni az eredményt

• Másik paraméter a kezdő esemény

• Harmadik paraméter a vége esemény

• cudaEventRecord() függvényt mindkét eseményre meg kell hívni

• Mindkét eseménynek befejezett állapotban kell lenni

• Nem használható a cudaEventDisableTiming jelző

• Ha az időzítés nem kritikus, akkor egy jobb teljesítményű lehetőség:

cudaEventCreateWithFlags(&event, cudaEventDisableTiming)

5.8. Eltelt idő számítása (példa)

3.22. ábra -

6. Egyesített Virtuális Címtér

6.1. CUDA Unified Virtual Address Management

• Unified Virtual Addressing (UVA) egy memória kezelési rendszer, amely a CUDA 4.0 és későbbi

változatokban érhető el és a Fermi, illetve Kepler GPU-k 64 bites folyamataiban használható. Az UVA

memória kezelés adja az alapját további technikáknak is (pl. RDMA for GPUDirect [11])

Page 312: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

290 Created by XMLmind XSL-FO Converter.

3.23. ábra - [9]

• A CUDA virtuális címtérben a címek az alábbiak lehetnek:

• GPU – A GPU memóriájában található. A hoszt nem érheti el

• CPU – A CPU memóriában található. Mindkét oldalról elérhető

• Free – Későbbi CUDA alkalmazások számára fenntartva

6.2. Egyesített Virtuális Címtér (UVA)

• UVA azt jelenti, hogy egy folyamatos memória tartomány létezik minden eszköz számára (ide értve a hosztot

és az összes GPGPU-t is)

• A CPU és a GPU ugyanazt a virtuális címteret használja

• A driver meg tudja állapítani, hogy az egyes címek fizikailag hol helyezkednek el

• Foglalások mindig ugyanazon az eszközön maradnak

• Elérhetőség

• CUDA 4.0 vagy későbbi változatokban

• Compute Capability 2.0 vagy későbbi változatok

• 64 bites operációs rendszer

• Egy mutató hivatkozhat

• Globális memóriára a GPU-n belül

• Rendszer memóriára a hoszt oldalon

• Globális memóriára egy másik GPU-n belül

• Az alkalmazások le tudják ellenőrizni, hogy ez a lehetőség támogatott-e a megadott rendszeren a

unifiedAddressing eszköz tulajdonságon keresztül

(CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)

6.3. Egyesített Virtuális Címtér – elérhetőség

• Azt, hogy egy mutató pontosan milyen memóriaterületre hivatkozik, a cudaPointerGetAttributes( )

függvénnyel lehet lekérdezni (CPU-n vagy a GPU-n helyezkedik el a hivatkozott terület).

3.24. ábra -

Page 313: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

291 Created by XMLmind XSL-FO Converter.

• A függvény visszatérési értéke egy cudaPointerAttributes struktúra:

struct cudaPointerAttributes {

enum cudaMemoryType memoryType;

int device;

void *devicePointer;

void *hostPointer;

}

• memoryType megadja, hogy a paraméterként átadott mutató melyik memóriaterületre mutat. Értéke ennek

megfelelően lehet

cudaMemoryTypeHost vagy cudaMemoryTypeDevice

• device annak az eszköznek a száma, ahova a mutató mutat

• devicePointer az eszközön belüli mutatót adja vissza

• hostPointer a hoszton belüli mutatót adja vissza

6.4. Peer to peer kommunikáció az eszközök között

3.25. ábra - [10]

• UVA memória másolás

• P2P memória másolás

• P2P memória hozzáférés

Page 314: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

292 Created by XMLmind XSL-FO Converter.

6.5. UVA és a P2P átvitel

• Minden hoszt memória, amit a cuMemAllocHost() vagy cuMemHostAlloc() függvénnyel foglaltak le,

elérhető minden eszközből, amelyek támogatják az UVA funkciót

• A pointer értéke azonos a hoszton és az eszközön, így nincs szükség további függvények meghívására (mint

pl. cudaHostGetDevicePointer)

• Minden mutató egyedi, így pl. a cudaMemCpy() függvény esetén se szükséges megadni a másolás irányát,

hiszen az a mutatók értékéből egyértelműen adódik

3.26. ábra -

• Ezzel a könyvtárak kódja jelentősen egyszerűsíthető

• Mindez persze nem működik, ha a P2P nem elérhető

6.6. P2P memória átvitel GPU-k között

• P2P hozzáférés ellenőrzése [10]:

3.27. ábra -

• P2P hozzáférés engedélyezése:

3.28. ábra -

• UVA másolás művelet:

3.29. ábra -

• P2P hozzáférés letiltása:

3.30. ábra -

Page 315: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

293 Created by XMLmind XSL-FO Converter.

6.7. P2P memória másolás GPU-k között

• Rendszerkövetelmény a P2P átvitel

• Ugyanazok az ellenőrző lépések [10]:

3.31. ábra -

• Hasonló inicializálás:

3.32. ábra -

• Azonos leállítási lépések:

3.33. ábra -

6.8. P2P memória hozzáférést bemutató kernel

• A már jól ismert másolást elvégző kernel:

3.34. ábra -

• Maga a kernel tetszőleges paraméterekkel elindítható:

Page 316: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Programozási környezet

294 Created by XMLmind XSL-FO Converter.

3.35. ábra -

• Az UVA-nak köszönhetően a kernel tudja, hogy az egyes mutatók melyik eszközön és pontosan hol

helyezkednek el

6.9. CUDA UVA összegzés

• Gyorsabb memória átvitel az egyes eszközök között

• Eszközök közötti átvitel kevesebb hoszt erőforrást igényel

• Az egyes eszközökön futó kernelek elérik a többi eszköz memória tartományait (olvasás és írás esetében is)

• Memória címzés különféle eszközökön (más GPU-k, hoszt memória)

• Szükséges hozzá

• 64 bites operációs rendszer és alkalmazás (Windows TCC)

• CUDA 4.0

• Fermi GPU

• Legújabb driverek

• GPU-knak azonos I/O Hub-on kell lenniük

További információk az UVA kapcsán

• CUDA Programming Guide 4.0

• 3.2.6.4 Peer-to-Peer Memory Access

• 3.2.6.5 Peer-to-Peer Memory Copy

• 3.2.7 Unified Virtual Address Space

Page 317: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

295 Created by XMLmind XSL-FO Converter.

4. fejezet - Optimalizációs technikák

1. Megosztott memória használata

1.1. Optimalizációs stratégiák

• Memória felhasználás

• Regiszterek használata

• Megosztott memória használata

• CPU-GPU átvitel minimalizálása

• Adatműveletek másolás helyett (kód áthelyezése a GPU-ra)

• Csoportos adatátvitel

• Speciális memória hozzáférési minták (nem tárgyaljuk)

• Párhuzamos végrehajtás maximalizálása

• GPU párhuzamosság maximalizálása

• Minél több szállal a memória késleltetés elrejtése

• CPU-GPU párhuzamosság kihasználása

• Blokk méret optimalizálása

• Blokkok számának optimalizálása

• Több GPU használata

• Utasítás szintű optimalizálás

• Lebegőpontos aritmetika használata

• Kisebb pontosság használata

• Gyors matematikai funkciók használata

• Divergens warpok minimalizálása

• Elágazások problémája

1.2. Mátrix szorzó alkalmazás elkészítése

1.2.1. Feladat 4.1.1

Készítsünk CUDA alkalmazást, amelyik kétdimenziós (NxN méretű, egyszeres lebegőpontos számokat

tartalmazó) mátrixok szorzását tudja elvégezni a GPU segítségével:

• A kód tartalmazzon egy N konstanst, ami a mátrixok méretét tartalmazza

• Foglaljon le 3 darab NxN méretű mátrixot (A, B, C)

• Töltse fel az A mátrixot tetszőleges adatokkal (pl. ai,j = i + j)

• Töltse fel a B mátrixot tetszőleges adatokkal (bi,j = i - j)

Page 318: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

296 Created by XMLmind XSL-FO Converter.

• Foglaljon le 3 darab NxN méretű memóriaterületet a grafikus kártya memóriájában (devA, devB, devC)

• Végezze el a bemenő adatok másolását: A → devA, B → devB

• Indítson el egy kernelt, ami kiszámítja a devC = devA * devB eredményt

• Végezze el a kimenő adatok másolását: devC → C

• Írja ki az így kapott C vektor elemeinek értékét a képernyőre

1.3. Többdimenziós mátrix a memóriában

• Bár a C programunkban tudunk többdimenziós tömböket lefoglalni, ezek elemei a memóriában

értelemszerűen lineárisan helyezkednek el

• Egy egyszerű 4x4-es mátrix elhelyezkedése:

A mátrix

4.1. ábra -

A kétdimenziós tömb

4.2. ábra -

Többdimenziós mátrix elemeihez való hozzáférés

• Amennyiben tehát ismert a mátrix kezdőcíme, a dimenziói, illetve az elemek méretei, a mátrix bármelyik

elemének címe egyszerűen kiszámítható:

arow,col= a0,0 + (row * oszlopszám + oszlop) * elemméret

• Mivel a CUDA kernelnek csak a mátrixokat tartalmazó memóriaterületek kezdőcímét adjuk át, a fenti

képlettel érhetjük el az egyes elemeket

Page 319: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

297 Created by XMLmind XSL-FO Converter.

1.4. Többdimenziós mátrix a memóriában

• Többdimenziós mátrixok esetén már egy 30x30-as méret is 900 darab szálat igényelne, amit (régebbi kártyák

esetén) nem tudunk egy blokkban elhelyezni

• Emiatt célszerű a programot tetszőleges méretű blokkok kezelésére felkészíteni, ennek megfelelően a blokk

azonosítót is kezelni kell

Egy lehetséges kernel

devC = devA * devB mátrixszorzás kódja:

4.3. ábra -

1.5. Több dimenziós mátrix a GPU memóriában

• Inicializálás, memóriaterületek lefoglalása

4.4. ábra -

• Bemenő adatok átmásolása

4.5. ábra -

• Kernel indítása

4.6. ábra -

Page 320: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

298 Created by XMLmind XSL-FO Converter.

• Eredmények másolása, memória felszabadítása

4.7. ábra -

1.6. Igazított elhelyezés

• Néha célszerű elválasztani egymástól a mátrix egy sorában található oszlopok számát és a memóriában tárolt

tömb sorainak tényleges méretét (pl. kettes számrendszerbeli számokkal gyorsabban számítható a szorzás,

illetve a CUDA végrehajtó egységek memóriakezelése is gyorsítható így)

• Egy egyszerű 5x5-ös mátrix elhelyezkedése, 8 elemes igazítással:

A mátrix

4.8. ábra -

A kétdimenziós tömb

4.9. ábra -

Page 321: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

299 Created by XMLmind XSL-FO Converter.

Igazított tárolás esetén a hozzáférés

• A képlet hasonló, csak nem a tényleges oszlopszámmal szorzunk:

asor,oszlop = a0,0 + (sor * igazított_oszlopszám + oszlop) * elemméret

1.7. Igazított memóriakezelés

• A CUDA osztálykönyvtár rendelkezik egy memóriafoglaló rutinnal, ami automatikusan a legoptimálisabb

igazítással foglalja le a megadott kétdimenziós memóriaterületet:

• cudaMallocPitch(void** devPtr, size_t *pitch, size_t width, size_t height)

• devPtr – lefoglalt memóriára mutató pointer (címszerinti paraméter)

• pitch – igazítás mértéke (címszerinti paraméter)

• width – mátrix egy sorának a mérete

• height – mátrix sorainak száma

• A lineáris foglaláshoz hasonlóan a devPtr tartalmazza majd a memóriacímet

• Az igazítás méretét tehát nem a függvény hívásakor kell megadni, hanem azt az osztálykönyvtár fogja

megállapítani, és az így kiszámított értéket fogja visszaadni a pitch paraméterként átadott változóban

• A mátrix egy sorának méreténél (width) ügyeljünk rá, hogy bájtban kell megadni a méretet, hiszen a függvény

nem tudhatja, hogy mekkora elemeket akarunk majd eltárolni

1.8. Igazított memória másolása

• Az igazított memóriakezelés során nem használható az egyszerű lineáris memória másolás, hiszen a cél és a

forrás igazítása különböző is lehet

• A másolásra jól használható az alábbi függvény, ami kezeli ezt a problémát:

• cudaMemcpy2D(void* dst, size_t dpitch, const void* src, size_t spitch,

size_t width, size_t height, enum cudaMemcpyKing kind)

• dst – másolás célját mutató pointer

• dpitch – a cél adatszerkezet által használt igazítás mérete

• src – másolás forrását mutató pointer

Page 322: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

300 Created by XMLmind XSL-FO Converter.

• spitch – a forrás adatszerkezet által használt igazítás mérete

• width – a 2 dimenziós adatszerkezet egy sorának a mérete (bájtban)

• height – a 2 dimenziós adatszerkezet sorainak a száma

• kind – másolás iránya (értékei azonosak a lineáris másolásnál látottakkal)

• hoszt → hoszt (cudaMemcpyHostToHost)

• hoszt → eszköz (cudaMemcpyHostToDevice)

• eszköz → hoszt (cudaMemcpyDeviceToHost)

• eszköz → eszköz (cudaMemcpyDeviceToDevice)

• Amennyiben egy egyszerű igazítás nélküli tömböt használunk, akkor ne felejtsük el, hogy az igazítás mérete

= tömb sorának mérete (és nem 0)

1.9. Mátrix szorzó alkalmazás elkészítése igazított memóriával

1.9.1. Feladat 4.1.2

Készítsünk CUDA alkalmazást, amelyik kétdimenziós (NxN méretű, egyszeres lebegőpontos számokat

tartalmazó) mátrixok szorzását tudja elvégezni a GPU segítségével:

• A kód tartalmazzon egy N konstanst, ami a mátrixok méretét tartalmazza

• Foglaljon le 3 darab NxN méretű mátrixot (A, B, C)

• Töltse fel az A mátrixot tetszőleges adatokkal (pl. ai,j = i + j)

• Töltse fel a B mátrixot tetszőleges adatokkal (pl. bi,j = i - j)

• Foglaljon le 3 darab NxN méretű memóriaterületet a grafikus kártya memóriájában a kártya által választott

igazítással (devA, devB, devC)

• Végezze el a bemenő adatok másolását: A → devA, B → devB

• Indítson el egy kernelt, ami kiszámítja a devC = devA * devB eredményt

• Végezze el a kimenő adatok másolását: devC → C

• Írja ki az így kapott C vektor elemeinek értékét a képernyőre

1.10. Kernel igazított memóriakezeléssel

• A kernel a paraméterként átadott igazítás mérettel végzi a szorzást N helyett

• Az igazítás mérete bájtban van megadva, így típusos mutatók esetén a értékét osztani kell az elem méretével

(a példában feltételeztük hogy ez megtehető, amennyiben a igazítás nem lenne osztható az elemmérettel,

akkor pl. típus nélküli mutatókkal tudjuk az elemek helyeit kiszámítani)

Egy lehetséges kernel

devC = devA * devB mátrixszorzás kódja:

4.10. ábra -

Page 323: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

301 Created by XMLmind XSL-FO Converter.

1.11. Kernel hívása igazított tömbök esetén

• Inicializálás, memóriaterületek lefoglalása

4.11. ábra -

• Bemenő adatok átmásolása (feltételezzük, hogy a pitch azonos lett)

4.12. ábra -

• Kernel indítása

4.13. ábra -

• Eredmények másolása, memória felszabadítása

4.14. ábra -

1.12. Megosztott memória kezelése

• A mátrix szorzás meglehetősen kevés aritmetikai műveletet tartalmaz a memóriamozgatások számához képest

Page 324: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

302 Created by XMLmind XSL-FO Converter.

• A GPU a memóriakezelésből származó várakozási időket nem gyorsítótárral, hanem a végrehajtóegységek

átütemezésével próbálja elrejteni. Ha azonban nincs végrehajtandó művelet, akkor ezt nem tudja megoldani

• A CUDA környezetben megvalósított algoritmusok jóságának összehasonlítására emiatt gyakran használatos

az aritmetikai műveletek száma/memóriahozzáférések száma hányados

Megoldási lehetőségek

• Párhuzamosság növelése, amennyiben a feladat ezt lehetővé teszi (jelen esetben erre nem látunk lehetőséget)

• Memóriahozzáférések számának csökkentése (tulajdonképpen programozott gyorsítótár kezelés)

• minél több változó regiszterekben tartása

• megosztott memóriaterület használata

• Egyéb megoldások keresése, esetenként az algoritmusok áttervezése

1.13. Ötlet a mátrix szorzás gyorsítására (csempe technika)

• Mivel a bemenő mátrixok egyes elemei több kimenő elem számításához is szükségesek, így a nem

optimalizált változatban több szál is betölti őket egymástól függetlenül

• Célszerű lenne ezen szálak működését összehangolni:

• a teljes kimenő mátrixot régiókra bontjuk (csempe)

• a régióknak megfelelő méretű megosztott memóriaterületet lefoglalunk a két bemenő mátrix elemeinek

ideiglenes betöltéséhez

• a régiókban található minden szál betölti az ő pozíciójának megfelelő elemet a két bemenő mátrixból a

megosztott memóriába

• a szál a saját és a többi szál által betöltött adatok segítségével kiszámítja az eredménymátrix rá eső értékét

• A megosztott memória mérete meglehetősen korlátos, emiatt elképzelhető, hogy a fenti műveletet csak több

lépésben, a bemenő mátrixokat több csempével lefedve, majd ezek értékét összeadva lehet végrehajtani

• Ez utóbbi esetben lényeges a szinkronizálás is, hogy egyik szál se kezdje el betölteni a következő csempe

adatait, miközben a vele egy régióban lévő szálak még dolgoznak a részeredményeken

1.14. Mátrix szorzó alkalmazás elkészítése (megosztott memóriával)

1.14.1. Feladat 4.1.3

Készítsünk CUDA alkalmazást, amelyik kétdimenziós (NxN méretű, egyszeres lebegőpontos számokat

tartalmazó) mátrixok szorzását tudja elvégezni a GPU segítségével:

• A kód tartalmazzon egy N konstanst, ami a mátrixok méretét tartalmazza

• Foglaljon le 3 darab NxN méretű mátrixot (A, B, C)

• Töltse fel az A mátrixot tetszőleges adatokkal (pl. ai,j = i + j)

• Töltse fel a B mátrixot tetszőleges adatokkal (pl. bi,j = i - j)

• Foglaljon le 3 darab NxN méretű memóriaterületet a grafikus kártya memóriájában (devA, devB, devC)

• Végezze el a bemenő adatok másolását: A → devA, B → devB

Page 325: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

303 Created by XMLmind XSL-FO Converter.

• Indítson el egy kernelt, ami kiszámítja a devC = devA * devB eredményt, az előzőleg megismert csempe

technika segítségével

• Végezze el a kimenő adatok másolását: devC → C

• Írja ki az így kapott C vektor elemeinek értékét a képernyőre

1.15. Mátrix szorzás gyorsítása

1. Csempékre bontás 3x3 db régió, ezekben 3x3 db szál

2. Minden szál átmásol egy-egy elemet a megosztott memóriába

3. Szinkronizáció

4.15. ábra -

1.16. Mátrix szorzás gyorsítása (2)

4. Minden szál a saját részeredményét kiszámolja a megosztott memória tartalma alapján

5. Szinkronizáció

4.16. ábra -

Page 326: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

304 Created by XMLmind XSL-FO Converter.

1.17. Mátrix szorzás gyorsítása (3)

6. Következő csempék adatainak betöltése

7. Szinkronizálás

8. Szálak újra elvégzik a szorzást. A szorzatot hozzáadják az előző részeredményhez

9. Szinkronizálás

4.17. ábra -

Page 327: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

305 Created by XMLmind XSL-FO Converter.

1.18. Mátrix szorzás gyorsítása (4)

6. Következő csempék adatainak betöltése

7. Szinkronizálás

8. Szálak újra elvégzik a szorzást. A szorzatot ismét hozzáadják az előző részeredményhez

9. Szinkronizálás

4.18. ábra -

Page 328: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

306 Created by XMLmind XSL-FO Converter.

1.19. Mátrix szorzás gyorsítása (5)

10. Minden szál az általa kiszámított elemet bemásolja a C-be

11. Az összes blokk és szál lefutása után az eredménymátrix minden eleme a helyére kerül

4.19. ábra -

Page 329: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

307 Created by XMLmind XSL-FO Converter.

1.20. Optimalizált mátrix szorzás kernel

• A kernel meghívása azonos az előzőleg megismerttel

4.20. ábra -

Page 330: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

308 Created by XMLmind XSL-FO Converter.

1.21. Összehasonlító vizsgálat

• Vízszintes tengely: mátrix mérete (N)

• Függőleges tengely: futási idő (másodperc)

4.21. ábra -

2. Atomi műveletek használata

2.1. Atomi műveletek szükségessége

Atomiság igénye

• Az adatpárhuzamos feladatok készítésekor ideális esetben a végeredmény kiszámításához nincs szükség az

indextér egymástól független pontjain végzett műveletekre (pl. két mátrix összeadása), esetleg csak az

olvasásra van szükség (pl. két mátrix szorzása)

• Bizonyos feladatoknál azonban ez nem kerülhető el, mint például a gyakori aggregációs műveleteknél:

• adatszerkezet elemeinek az összege/átlaga

• adatszerkezet legkisebb/legnagyobb eleme

• adatszerkezetben megadott tulajdonságú elemek száma

• stb.

Possible solutions

• Ezen feladatok egy része egyszerűen megoldható adatpárhuzamos környezetben is (pl. van-e T tulajdonságú

elem)

• A feladatok egy része azonban csak (részben) szekvenciális megoldással oldható meg (pl. legkisebb elem

megkeresése)

2.2. CUDA atomi műveletek

Page 331: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

309 Created by XMLmind XSL-FO Converter.

• A CUDA által nyújtott atomi műveletek segítenek kiküszöbölni a versenyhelyzet okozta problémákat. A

hardver garantálja, hogy az így elvégzett műveletek a szálak számától függetlenül szekvenciálisan fognak

végrehajtódni (vagy legalábbis úgy tűnnek)

• Operandusok lehetnek

• változó a globális memóriában

• változó a megosztott memóriában

• Operandusok mérete

• 32 bites egész (1.1 számítási képesség)

• 64 bites egész (1.2 számítási képesség)

Teljesítmény megfontolások

• Az atomi műveletek jellegüknél fogva nem párhuzamosíthatók, ennek megfelelően jelentősen rontják minden

kernel teljesítményét

• Bizonyos feladatoknál azonban nem lehet őket teljesen kiküszöbölni, azonban ilyenkor is célszerű esetleg

előzetes párhuzamos feldolgozásokkal csökkenteni a szükséges atomi műveletek számát

2.3. CUDA atomi műveletek - aritmetika

• Az atomi műveletek egyik paramétere általában egy memóriacím (globális vagy megosztott memóriában),

második paramétere pedig egy egész szám

• int atomicAdd(int* address, int val)

Az első paraméterként cím szerint átadott változó értékéhez hozzáadja a második paraméterben átadott

értéket. Visszatérési értéke az eredeti szám

• int atomicSub(int* address, int val)

Az első paraméterként cím szerint átadott változó értékéből kivonja a második paraméterben átadott értéket.

Visszatérési értéke az eredeti szám

• int atomicExch(int* address, int val);

Reads the 32-bit or 64-bit word old located at the address in global or shared memory and stores val back to

memory at the same address. These two operations are performed in one atomic transaction. The function

returns old

Az első paraméterként cím szerint átadott változónak értékül adja a második paraméterként átadott értéket.

Visszatérési értéke az eredeti szám

• int atomicMin(int* address, int val);

Ha a második paraméterként átadott szám értéke kisebb mint az első cím szerinti paraméterként átadott

változó értéke, akkor ez utóbbit felülírja az előbbivel. Visszatérési értéke az eredeti szám

2.4. CUDA atomi műveletek – aritmetika (2)

• int atomicMax(int* address, int val);

Ha a második paraméterként átadott szám értéke nagyobb, mint az első cím szerinti paraméterként átadott

változó értéke, akkor ez utóbbit felülírja az előbbivel. Visszatérési értéke az eredeti szám

• unsigned int atomicInc(unsigned int* address, unsigned int val)

Page 332: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

310 Created by XMLmind XSL-FO Converter.

Ha az első paraméterként cím szerint átadott változó értéke kisebb, mint a második paraméter, akkor az előbbi

értékét növeli 1-el, különben 0-t ad neki értékül. Visszatérési értéke az eredeti szám

• unsigned int atomicDec(unsigned int* address, unsigned int val)

Ha az első paraméterként cím szerint átadott változó értéke nagyobb, mint 0, akkor az előbbi értékét növeli 1-

el, különben a második paraméterben átadott értéket másolja bele. Visszatérési értéke az eredeti szám

• int atomicCAS(int* address, int compare, int val)

Ha az elő paraméterként cím szerint átadott változó értéke egyenlő a második paraméterrel, akkor az

előbbinek értékül adja a harmadik paraméter értékét. Visszatérési értéke az eredeti érték

2.5. CUDA atomi műveletek – logikai függvények

• int atomicAnd(int* address, int val)

Az első paraméterként cím szerint átadott változó értékéül adja a második változóval vett ÉS művelet

eredményét. Visszatérési értéke az eredeti szám

• int atomicOr(int* address, int val)

Az első paraméterként cím szerint átadott változó értékéül adja a második változóval vett VAGY művelet

eredményét. Visszatérési értéke az eredeti szám

• int atomicXor(int* address, int val)

Az első paraméterként cím szerint átadott változó értékéül adja a második változóval vett KIZÁRÓ VAGY

művelet eredményét. Visszatérési értéke az eredeti szám

2.5.1. Feladat 4.2.1

Készítsünk CUDA alkalmazást, amelyik egy (hoszt oldalon) véletlenszerű számokkal feltöltött vektorból

kiválasztja a minimális értéket. A feladat megoldása során használja a megismert atomi műveleteket

2.6. Vektor legkisebb elemének értéke

• Az alap megoldás meglehetősen egyszerű, minden szál az általa indexelt elemre és a vektor első elemére

meghívja a minimumot értékül adó függvényt

• A kernel lefutását követően tehát a vektor legelső eleme tartalmazza a legkisebb elem értékét

4.22. ábra -

• Érdemes megfigyelni, hogy a kernel eleve több blokkos indításra lett tervezve, tehát az atomi műveletek nem

csak blokkon belül, hanem blokkok között is biztosítják a versenyhelyzetek megoldását

2.6.1. Feladat 4.2.2

Sejthető, hogy a globális memóriában végzett atomi műveletek meglehetősen lassúak, ezért próbáljunk egy

olyan változatot, amelyik először a blokk minimumát keresi meg, majd ezzel számol globális minimumot

2.7. Memóriahozzáférések csökkentése – megosztott memória

Page 333: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

311 Created by XMLmind XSL-FO Converter.

• A blokkon belül az első szál feladata, hogy beállítsa a lokális minimumot tároló változó kezdőértékét

• Ezt követően az összes szál elvégzi a hozzá rendelt értékkel a minimum ellenőrzést

• Végül az első szál az így kiszámított lokális minimummal elvégzi a globális minimum ellenőrzést is

• Szintén ügyeljünk a szinkronizációs pontokra, nehogy rossz sorrendben fussanak le az utasítások az egyes

szálakban

4.23. ábra -

2.7.1. Összehasonlító vizsgálat

• Vízszintes tengely: vektor mérete (N)

• Függőleges tengely: futási idő (másodperc)

4.24. ábra -

Page 334: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

312 Created by XMLmind XSL-FO Converter.

2.8. Blokkon belüli párhuzamosítás

• Célszerű lenne a megoldást olyan formában keresni, hogy kihasználhassuk a párhuzamosságból eredő

előnyöket is: blokkon belül is kisebb részfeladatokra kell bontani a minimum kiválasztást

Párhuzamosított változat

• A megosztott memóriába betöltjük a globális memória egy szeletét: minden szál beolvassa a globális

memória két elemét, majd ezek közül a kisebbiket eltárolja a megosztott memóriában

• Blokkon belül minden szál összehasonlít két elemet a megosztott memóriában, majd a kisebbiket eltárolja az

alacsonyabb indexű helyen

• Következő iterációban már csak az előzőleg kisebbnek talált elemeket hasonlítják össze, így a vizsgálandó

elemek száma mindig feleződik

• Miután megvan a blokk legkisebb eleme, az előzőleg megismert módon eldöntjük, hogy ezek közül melyik a

globális minimum

2.8.1. Feladat 4.2.3

Készítsük el a minimum kiválasztás fent leírt algoritmussal működő változatát

2.9. Párhuzamos minimum - betöltés

• Egy példa

N = 24

BlockN = 4 (szálak száma)

• Minden blokk lefoglal BlokkN*2 méretű megosztott memóriát

• Minden blokk szálai BlokkN*4 méretű globális memóriából töltik be páronként a kisebb értékeket

• A blokkméret legyen 2 hatványa, így az üres helyeket feltöltjük:

• páratlanul maradt elem

• vektor bármelyik eleme

Page 335: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

313 Created by XMLmind XSL-FO Converter.

• Betöltés után szinkronizáció

4.25. ábra -

2.10. Párhuzamos minimum – blokk minimuma

4.26. ábra -

• Minden szál log2BlokkN darab iterációt hajt végre, amely során az x indexű szál elvégzi az alábbi műveletet:

Sx = Min(S2x , S2x+1)

• A műveletek végén a vektor legelső eleme tartalmazza a blokk által feldolgozott elemek közüli legkisebb

értékét

• Ezek közül kiválaszhatjuk a globális legkisebb elemet:

Page 336: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

314 Created by XMLmind XSL-FO Converter.

• atomi műveletek használatával

• a blokkok által kigyűjtött minimális elemeket egy másik vektorban gyűjtjük, majd ezekre ismét lefuttatjuk

a fenti minimumkiválasztást (nagy elemszám esetén már érdemes lehet ezt a változatot használni)

2.11. Párhuzamos minimum - kernel

4.27. ábra -

2.12. Párhuzamos minimum – kernel (2)

4.28. ábra -

Megjegyzések

• A blokkméret mindenképpen 2 hatványa legyen

A k ciklus szerepe, hogy minden blokk kétszer futtassa le a globális memóriából megosztott memóriába való

másolást.

Ennek következtében a BlokkN darab szálat tartalmazó blokk 4*BlokkN elemet tölt be a globális memóriából,

ebből 2*BlokkN elemet (páronként a kisebbet) ment el a megosztott memóriába, így a fenti ciklus első

iterációjában mind a BlokkN darab szál össze tud hasonlítani egy párt

2.13. Összehasonlító vizsgálat

Első és második optimalizált kód összehasonlítása

• Vízszintes tengely: vektor mérete (N)

• Függőleges tengely: futási idő (másodperc)

4.29. ábra -

Page 337: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

315 Created by XMLmind XSL-FO Converter.

2.14. Összehasonlító vizsgálat

Egyszerű CPU – GPU kód összehasonlítása

• Vízszintes tengely: vektor mérete (N)

• Függőleges tengely: futási idő (másodperc)

4.30. ábra -

3. Kihasználtság

3.1. A végrehajtás áttekintése

• CUDA esetén a teljes problématér blokkokra van osztva

Page 338: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

316 Created by XMLmind XSL-FO Converter.

• A rács egymástól független blokkokból áll

• Az egyes blokkok pedig szálakból állnak

• Az utasítások warp szinten hajtódnak végre

• A Fermi architektúra esetében 32 szál alkot egy warpot

• Fermi esetében egyidőben 48 aktív warp lehet egy SM-ben (ami összesen 1536 szálat jelent)

• Egy warp futtatása megakad, ha bármelyik szükséges operandus hiányzik

• A késleltetés elkerülése érdekében

• Amíg egy warp megakad, a végrehajtó egység megpróbál kontextust váltani

• A kontextusváltás időigénye nagyon alacsony

• A regiszterek és a megosztott memória a blokk élettartama alatt megőrződnek

• Ha egy blokk aktív, akkor egészen addig aktív marad, amíg nem végez minden benne lévő szál

• Regiszterek és a megosztott memória nem igényel eltárolást/visszatöltést a kontextusváltások során

3.2. Kihasználtság

• Kihasználtság (occupancy) alatt értjük az aktuálisan aktív végrehajtó egységek és a rendelkezésre álló

végrehajtó egységek számának arányát

Kihasználtság = Aktív warpok száma / Maximális warp szám

• Maximális warp és blokk szám a multiprocesszoron belül

• Maximális warp és blokk szám a multiprocesszoron belül

• Regiszterek száma a multiprocesszoron belül

• Megosztott memória mérete a multiprocesszoron belül

• Kihasználtság = Min(regiszter kih., megosztott memória kih., blokk kih.)

3.3. Kihasználtság és a regiszterek kapcsolata

• Fermi esetében 32K darab regisztert tartalmaz egy SM

• A szálak maximális száma pedig 1536

• Például, amennyiben egy kernel 40 regisztert igényel szálanként:

• Aktív szálak száma: 32K / 40 = 819

• Kihasználtság: 819 / 1536 = 0,53

• Ebben az esetben a regiszterek száma korlátozza a kihasználtságot (miközben vannak kihasználatlan

erőforrások még a GPU-ban)

• Cél: korlátozzuk a regiszter felhasználást

• Regiszterhasználat ellenőrzése: fordításkor –ptxax-options=-v

• Regiszterhasználat korlátozása: fordításkor –maxregcount

• Például 21 regiszter esetén:

Page 339: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

317 Created by XMLmind XSL-FO Converter.

• Aktív szálak száma: 32K / 21 = 1560

• Kihasználtság: 1560 / 1536 = ~1

• Mindez azt jelenti, hogy ennyi regiszter nem korlátozza a GPU teljes kihasználtságát (mindez persze függ a

többi tényezőtől is)

3.4. Kihasználtság és megosztott memória

• Fermi esetében a megosztott memória mérete konfigurálható

• 16K megosztott memória

• 48K megosztott memória (általában ezt használjuk)

• Például, ha egy kernel 64 byte megosztott memóriát használ

• Aktív szálak száma: 48K / 64 = 819

• Kihasználtság: 819 / 1536 = 0,53

• Ebben az esetben a megosztott memória biztosan korlátozza a futást (miközben vannak kihasználatlan

erőforrások a GPU-ban)

• Cél: korlátozzuk a megosztott memória használatot

• Megosztott memória méret ellenőrzése: fordításkor –ptxax-options=-v

• Megosztott memória méret korlátozása

• Kernel híváskor kisebb korlát megadása

• Megfelelően választott L1/Megosztott memória konfiguráció

• Például 32 byte megosztott memória esetében:

• Aktív szálak száma: 48K / 32 = 1536

• Kihasználtság: 1536 / 1536 = 1

• Ez azt jelenti, hogy a megosztott memória nem korlátozza a GPU erőforrásainak a kiaknázását (mindez

persze számos más tényezőtől is függ)

3.5. Kihasználtság és blokk méret

• Minden SM 8 aktív blokkot tud tárolni

• Van egy hardver alapú blokkméret limit

• Compute Capability 1.0 esetén – 512

• Compute Capability 2.0 esetén – 1024

• Az alsó korlát 1, de ez nyilván a szálak számát negatívan befolyásolja

• Például:

• Blokk méret: 128

• Aktív szálak száma egy SM esetében: 128 * 8 = 1024

• Kihasználtság: 1536 / 1024 = 0,66

Page 340: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

318 Created by XMLmind XSL-FO Converter.

• Ebben az esetben a blokkméret hátráltatja a teljes kihasználtságot (miközben a GPU rendelkezne még szabad

erőforrásokkal)

• Cél: próbáljuk növelni a blokk méretet (a kernel hívásakor)

• Például:

• Blokk méret: 192

• Aktív szálak száma egy SM esetében: 192 * 8 = 1536

• Kihasználtság: 1536 / 1536 = 1

• Ez azt jelenti, hogy a blokkméret nem korlátozza a GPU erőforrásainak a kiaknázását (mindez persze számos

más tényezőtől is függ)

3.6. CUDA Occupancy calculator

• Egy CUDA eszköz, amellyel egyszerűen számítható a kihasználtság

• Gyakorlatilag egy Excel táblázat, amely az alábbi helyen található:

„NVIDIA GPU Computing SDK x.x\C\tools\CUDA_Occupancy_Calculator.xls”

• Bemenő adatok:

• Hardver konfiguráció

• Számítási Kapacitás

• Megosztott memória konfiguráció (Fermi és felette)

• Erőforrás felhasználás

• Szálak száma blokkonként

• Regiszterek száma szálanként

• Megosztott memória mérete blokkonként

• Kimenő adatok:

• Aktív szálak száma multiprocesszoronként

• Aktív warpok száma multiprocesszoronként

• Aktív blokkok száma multiprocesszoronként

• A fentiek alapján a multiprocesszor kihasználtsága

3.7. CUDA Occupancy calculator - példa

4.31. ábra -

Page 341: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

319 Created by XMLmind XSL-FO Converter.

3.8. CUDA Occupancy calculator – változó blokk méret hatása

4.32. ábra -

3.9. CUDA Occupancy calculator – változó regiszter szám hatása

4.33. ábra -

Page 342: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

320 Created by XMLmind XSL-FO Converter.

3.10. CUDA Occupancy calculator – változó megosztott memória hatása

4.34. ábra -

3.11. Blokk mérettel kapcsolatos javaslatok [18]

• Blokkon belül a szálak száma legyen mindig a warp méret többszöröse

• Kerüljük el a nem teljesen kihasznált warpok által okozott felesleges számításokat

Page 343: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

321 Created by XMLmind XSL-FO Converter.

• Optimalizáljuk a blokk méretet

• Minél több blokk – hatékonyabb a memória késleltetés kezelés

• Túl kevés blokk – próbáljunk minél kevesebb regisztert használni, mivel túl sok regiszter

megakadályozhatja a még több blokk futását

• Tapasztalati javaslatok

• Minimum: 64 szál blokkonként

• Több párhuzamos blokk

• 192 vagy 256 szál még jobb választás lehet

• Itt még általában elég a regiszterek száma

• Minden a megadott feladattól függ!

• Tapasztalat, teszt, mérés!

• Próbáljuk maximalizálni a kihasználtságot

• A kihasználtság növekedése nem feltétlenül jár együtt tényleges teljesítménynövekedéssel

• De a nem megfelelő kihasználtság valószínűsíthetően több problémát okoz, pl. a memória késleltetés

elrejtésében

4. Parallel Nsight

4.1. Parallel Nsight

• Nyomkövető alkalmazás a CUDA környezet számára

• Az alábbi címről tölthető le:

http://www.nvidia.com/object/nsight.html

• Elérhető kiadások

• Visual Studio Edition

https://developer.nvidia.com/nvidia-nsight-visual-studio-edition

• Nsight Eclipse Edition

• Főbb funkciói

• Visual Studio/Eclipse támogatás

• PTX/SASS assembly nyomkövetés

• CUDA Debugger (kernel nyomkövetése közvetlenül)

• Feltételes töréspontok használata

• GPU memória megtekintése

• Grafikus nyomkövetés

• Profiler funkciók

• Hardver követelmények

Page 344: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

322 Created by XMLmind XSL-FO Converter.

• Analyzer -Egy GPU-s rendszer

• CUDA Debugger –Több GPU-s rendszer

• Direct3D Shader Debugger –Több egymástól független rendszer

4.2. Kernel nyomkövetés

• Helyi nyomkövetés főbb lépései

• Nsight Monitor indítása

(All Programs > NVIDIA Corporation > Nsight Visual Studio Edition 2.2 > Nsight Monitor)

• Töréspont elhelyezése

Működése hasonló a Visual Studioban egyébként megszokotthoz

4.35. ábra -

• „Start CUDA debugging funkció” kiválasztása

(Nsight/Start CUDA debugging)

• A nyomkövetés be fog kapcsolni a töréspont elérésekor

• Minden megszokott nyomkövetési funkció elérhető ilyenkor

• továbblépés

• függvénybe belépés

• stb.

• Távoli nyomkövetés

• Nem tárgyaljuk

4.3. GPU memória régiók megtekintése

• A Parallel Nsight támogatja a memória megtekintését is a Visual Studio „Memory” ablakán keresztül

• Megosztott memória

• Lokális memória

• Globális memória

• Egy memória terület megtekintéséhez: Debug/Windows/Memory

• Kernel nyomkövetés során a változó nevet is meg lehet adni a pontos cím helyett

• Direkt címek esetén használhatóak az alábbi kulcsszavak:

__shared__, __local__, __device__

Page 345: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

323 Created by XMLmind XSL-FO Converter.

• Például: (__shared__ float*)0

• Az általános Visual Studio funkciók itt is elérhetőek

• „Watch window” a kernel változók értékének megtekintéséhez

• A kurzort egy változó felé helyezve annak megjeleníti az aktuális értékét

• A beépített CUDA változók értéke szintén megtekinthető:

• threadIdx

• blockIdx

• blockDim

• gridDim

• stb.

4.4. CUDA Debug Focus

• A változók egy része a kontextushoz kötődik

• Szálakhoz kapcsolódik: regiszterek és a lokális memória

• Blokkokhoz kapcsolódik: a megosztott memória

• Ezek aktuális értékének megtekintéséhez értelemszerűen meg kell határozni a pontos kontextust is (blokk

index és szál index)

• Nsight/Windows/CUDA Debug Focus

4.36. ábra -

• Block: itt megadható a blokk index

• Thread: itt megadható a szál index

• A „Watch window/quick watch” stb. ennek megfelelően fogja mutatni a kiválasztott szál és blokk adatait

4.5. CUDA Device Summary

• Ez a funkció egy gyors áttekintést ad az elérhető eszközök adatairól

Page 346: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

324 Created by XMLmind XSL-FO Converter.

• Nsight/Windows/CUDA Device Summary funkció kiválasztása

• Ezt követően a megfelelő eszköz kiválasztása oldalt

• Jobb oldalon megjelenik számos statikus és futás közbeni adat

4.37. ábra -

4.6. CUDA Device Summary - rács

• Szintén az elérhető eszközökről ad futásidejő adatokat rács szinten

• Nsight/Windows/CUDA Device Summary funkció

• A megfelelő rács kiválasztható a bal oldali listából

4.38. ábra -

4.7. CUDA Device Summary - warp

• Az elérhető eszközökön épp futó warpokról ad tájékoztatást

Page 347: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

325 Created by XMLmind XSL-FO Converter.

• Nsight/Windows/CUDA Device Summary funkció

• Baloldalt kiválasztható a megfelelő warp

4.39. ábra -

• A fejlesztő itt tudja ellenőrizni az állapotát az összes aktuálisan futó warpnak

• SourceFile/SourceLine sorok kimondottan hasznosak lehetnek, ha meg akarjuk érteni a végrehajtási

mechanizmust

4.8. PTX code nyomkövetése

• Tools/Options/Debugging options kiválasztása

• Itt ki kell választani a „Enable Address Level Debugging” funkciót

• És ki kell választani a „Show disassembly if source is not available”-t

• Amikor a CUDA nyomkövetés megáll

• Ki kell választani a „Go to Disassembly” funkciót

• Ezt követően megjelenik a PTX kód (az SASS kód szintén elérhető)

• Maga a nyomkövetés egészen hasonló a CPU-k esetében megszokotthoz

4.40. ábra -

Page 348: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

326 Created by XMLmind XSL-FO Converter.

4.9. Memória ellenőrzés használata

• A CUDA memória ellenőrző funkció képes felderíteni különféle hibákat a globális és a megosztott

memóriában egyaránt. Ha a CUDA nyomkövető egy memória hozzáférési hibát észlel, nem mindig képes

pontosan meghatározni a hiba helyét. Ezekben az esetekben célszerű engedélyezni a CUDA memória

ellenőrzőt, majd így indítani újra az egész alkalmazást. A CUDA memória ellenőrző részletesebb adatokat

tartalmaz majd a hiba helyéről [22]

• Nsight/Options/CUDA kiválasztása

• „Enable Memory Checker” igazra állítása

• Ezt követően indítható az alkalmazás a CUDA nyomkövetővel

• Futás közben, ha a kernel nem megfelelő memóriaterületre próbál írni (tipikusan pl. tömb túlcímzésnél),

akkor a nyomkövetés meg fog állni

• A nyomkövető a hibát okozó utasítás lefuttatása előtt áll majd meg

• A CUDA memória ellenőrző pedig a részletes adatokat kiírja a kimenetre

• Indítási paraméterek

• Az észlelt problémák száma

• GPU állapota az egyes esetekben

• blokk index

• szál index

• forráskódon belül a sorszám

• A problémák összesítése

4.10. CUDA memória ellenőrző minta eredmény

================================================================================

CUDA Memory Checker detected 2 threads caused an access violation:

Launch Parameters

Page 349: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

327 Created by XMLmind XSL-FO Converter.

CUcontext = 003868b8

CUstream = 00000000

CUmodule = 0347e780

CUfunction = 03478980

FunctionName = _Z9addKernelPiPKiS1_

gridDim = {1,1,1}

blockDim = {5,1,1}

sharedSize = 0

Parameters:

Parameters (raw):

0x05200000 0x05200200 0x05200400

GPU State:

Address Size Type Block Thread blockIdx threadIdx PC Source

------------------------------------------------------------------------------------------

05200018 4 adr st 0 3 {0,0,0} {3,0,0} 0000f0 d:\sandbox\nsighttest\nsighttest\kernel.cu:12

05200020 4 adr st 0 4 {0,0,0} {4,0,0} 0000f0 d:\sandbox\nsighttest\nsighttest\kernel.cu:12

Summary of access violations:

================================================================================

Parallel Nsight Debug

Memory Checker detected 2 access violations.

error = access violation on store

blockIdx = {0,0,0}

threadIdx = {3,0,0}

address = 0x05200018

accessSize = 4

4.11. Lehetséges hibakódok és jelentésük

• CUDA memória ellenőrző hibakódok:

4.41. ábra -

Page 350: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Optimalizációs technikák

328 Created by XMLmind XSL-FO Converter.

Page 351: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

329 Created by XMLmind XSL-FO Converter.

5. fejezet - CUDA könyvtárak

1. CUBLAS könyvtár

1.1. CUBLAS Library

• BLAS: Basic Linear Algebra Subprograms [14]

Basic Linear Algebra Subprograms (BLAS) egy olyan alkalmazásfejlesztési felület szabvány, amelyen

keresztül elérhetőek az alapvető lineáris algebra műveletek, mint például a vektor és mátrix műveletek.

Gyakran használatosak a HPC területen, általában egy megadott célhardverre optimalizált változatokkal

találkozhatunk. Gyakran maguk a hardver fejlesztők adják ki, mint pl. az Intel vagy az Nvidia

• CUBLAS: CUDA BLAS library

CUBLAS egy implementációja az előbb említett BLAS felületnek, amely a CUDA környezeten alapul.

Számos könnyen kezelhető adattípussal és függvénnyel rendelkezik. Használatához már nem szükséges a

CUDA driver

• Technikai részletek

• A CUBLAS könyvtárhoz tartozó fejléc: cublas.h

• A CUBLAS-t használó alkalmazásoknak a szerkesztéskor meg kell adni külön a DSO és DLL

állományokat, ami lehet a cublas.dll (Windows alkalmazások esetén) ha ténylegesen GPU-n futtatjuk,

• vagy a cublasemu.dll (Windows alkalmazások esetén) ha csak emulációra van lehetőség.

1.2. CUBLAS alapú alkalmazások fejlesztése

• 1. lépés - A szükséges CUBLAS adatszerkezetek létrehozása

• A CUBLAS számos funkciót nyújt a szükséges objektumok létrehozására és megszüntetésére a GPU

tárterületen

• Nincsenek különleges adattípusok (mint pl. vektor, mátrix), a függvények többnyire egyszerű típusos

mutatókat várnak paraméterül

• 2. lépés – Adatszerkezetek feltöltése adatokkal

• Speciális függvények állnak rendelkezésre, amelyek segítségével át lehet tölteni a központi memóriából a

GPU memóriába az adatokat

• 3. lépés - CUBLAS funkció(k) meghívása

• A fejlesztő ezt követően meg tud hívni egy, vagy akár egymás után több CUBLAS függvényt

• 4. lépés – Eredmények visszatöltése

• Végül a fejlesztő vissza tudja másolni az eredményeket a központi memóriába, hogy ott tovább

dolgozhasson azokkal

1.3. CUBLAS függvények visszatérési értéke

• A cublasStatus típus mutatja egy függvény lefutásának állapotát

• CUBLAS segítő függvények visszatérési értéke közvetlenül ez az állapot, az alapvető függvényeknél ezt a

cublasGetError( ) hívásával kapjuk meg

• Jelenleg ez az alábbi értékeket veheti fel:

Page 352: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

CUDA könyvtárak

330 Created by XMLmind XSL-FO Converter.

5.1. ábra -

1.4. CUBLAS segítő függvények

• cublasStatus cublasInit( )

Inicializálja a CUBLAS könyvtárat: lefoglalja a szükséges erőforrásokat a GPU eléréséhez. Minden CUBLAS

függvényhívás előtt egyszer meg kell hívni.

Lehetséges visszatérési értékek:

• CUBLAS_STATUS_ALLOC_FAILED: Foglalás sikertelen volt

• CUBLAS_STATUS_SUCCESS: Inicializáció sikeres volt

• cublasStatus cublasShutdown( )

Leállítja a CUBLAS könyvtárat: felszabadít minden lefoglalt erőforrást

• Visszatérési értékek:

• CUBLAS_STATUS_NOT_INITIALIZED: A CUBLAS könyvtár nem lett inicializálva

• CUBLAS_STATUS_SUCCESS: Leállítás sikeresen megtörtént

• cublasStatus cublasGetError( )

Visszaadja az utolsó függvény által okozott hibakódot (státuszkódot). Csak az alapvető CUBLAS

függvényeknél használatos.

1.5. CUBLAS memória kezelés

• cublasStatus cublasAlloc(int n, int elemSize, void **ptr)

Létrehoz egy objektumot a GPU memóriában, amely alkalmas a megadott mennyiségű (n), megadott méretű

(elemSize) tárolására. A függvény a harmadik paraméteren keresztül adja vissza az erre mutató pointert.

• cublasStatus cublasFree(const void *ptr)

Felszabadítja a ptr mutató által mutatt objektumot.

• cublasStatus cublasSetVector(int n, int elemSize,

const void *x,

Page 353: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

CUDA könyvtárak

331 Created by XMLmind XSL-FO Converter.

int incx,void *y,

int incy)

Ez a függvény átmásol egy n elemű vektort a központi memóriából (x mutatja a pontos helyét) a GPU

memóriába (az y által mutatott helyre). Incx és incy határozza meg az igazítást a forrás és a cél

adatszerkezetek esetében.

• cublasStatus cublasGetVector(int n, int elemSize,

const void *x,

int incx,void *y,

int incy)

Az előzőhöz hasonló, csak a másik irányba végzi el a másolást. Átmásol egy n elemű vektort a GPU

memóriából (x mutatja a pontos helyét) a központi memóriába (az y által mutatott helyre). Incx és incy

határozza meg az igazítást a forrás és a cél adatszerkezetek esetében.

1.6. BLAS függvények áttekintése

• A BLAS függvényeket három kategóriába sorolhatjuk: 1., 2. vagy 3. szintűek

• A CUBLAS könyvtár a szabványos BLAS-nak megfelelő bontást alkalmaz

• BLAS 1. szintű függvények

• Ezen a szinten vektor műveletek jelennek meg, mint pl. skalár vektor szorzás, vektor-vektor szorzás stb.

• A függvények az alábbi alcsoportokba rendezhetők:

• Egyszeres pontosságú valós BLAS1 függvények

• Egyszeres pontosságú komplex BLAS1 függvények

• Dupla pontosságú valós BLAS1 függvények

• Dupla pontosságú komplex BLAS1 függvények

• BLAS 2. szintű függvények

• Ezen a szinten mátrix-vektor műveletek találhatók. Mint például vektor-mátrix szorzás, egyenlet megoldás

stb.

• BLAS 3. szintű függvények

• Ezen a szinten a mátrix-mátrix műveletek találhatóak. Ezek általában a legáltalánosabban használható

funkciók.

1.7. Néhány CUBLAS 1. szintű függvény

• int cublasIsamax(int n, const float *x, int incx)

Visszaadja a maximális értékű elem legkisebb indexét (1-től kezdődő indexelést használ!)

• Parameterek:

• n: elemek szám a vektorban

• x: egyszeres pontosságú, n darab elemet tartalmazó vektor

• incx: igazítással együtt az elemek mérete

Page 354: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

CUDA könyvtárak

332 Created by XMLmind XSL-FO Converter.

• Hiba kódok:

• CUBLAS_STATUS_NOT_INITIALIZED: A CUBLAS nincs inicializálva

• CUBLAS_STATUS_ALLOC_FAILED: Nem tudta lefoglalni a szükséges puffert

• CUBLAS_STATUS_EXECUTION_FAILED: Nem sikerült a GPU-n futtatás

• float cublasSasum(int n, const float *x, int incx)

• Visszaadja a vektor elemeinek az összegét

• A CUBLAS dokumentáció tartalmazza az összes többi elérhető funkciót

1.8. Néhány CUBLAS 2. szintű függvény

• void cublasSsbmv( char uplo,

int n,

int k,

float alpha,

const float *A,

int lda,

const float *x,

int incx,

float beta,

float *y,

int incy)

• Elvégzi az alábbi mátrix-vektor műveletet:

y = alpha * A * x + beta * y

ahol

• alpha, beta – skalárok

• x, y – vektorok

• A – mátrixok

• void cublasStrsv(char uplo, char trans, char diag, int n,

const float *A, int lda, float *x, int incx)

Megoldja a paraméterekkel megadott egyenletet

• A CUBLAS dokumentáció tartalmazza az összes többi elérhető funkciót

1.9. Néhány CUBLAS 3. szintű függvény

Page 355: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

CUDA könyvtárak

333 Created by XMLmind XSL-FO Converter.

• void cublasSgemm( char transa,

char transb,

int m,

int n,

int k,

float alpha,

const float *A,

int lda,

const float *B,

int ldb,

float beta,

float *C,

int ldc)

• Elvégzi az alábbi mátrix-mátrix műveletet:

C = alpha * op(A) * op(B) + beta * C (where op(x) = x or op(x) = xT)

• ahol

• alpha, beta – skalárok

• lda, ldb, ldc – méretek

• A, B, C – mátrixok

• ha transa = ”T” akkor op(A) = AT

• ha transb = ”T” akkor op(B) = BT

• A CUBLAS dokumentáció tartalmazza az összes többi elérhető funkciót

Page 356: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

334 Created by XMLmind XSL-FO Converter.

6. fejezet - CUDA verziók

1. CUDA 4 újdonságok

1.1. CUDA 4.0 újdonságai

GPU megosztása több szál között

• Könnyebben portolhatóak a többszálú alkalmazások. Több CPU szál képes használni egy GPU-t (OpenMP

esetén pl.)

• Konkurens szálak indítása különböző CPU szálakból (nincs szükség többé a kontextus váltásra)

• Új, egyszerűbb kontextus kezelő API (a régi továbbra is támogatott)

Egy szál elérhet minden GPU-t

• Minden hoszt szál elérheti az összes GPU-t

(tehát már nincs a régi 1 CPU szál – 1 GPU korlát)

• Így az egy szálas alkalmazások is jól ki tudják használni a több GPU-s környezetek előnyeit

• Jóval egyszerűbb így koordinálni több GPU-t

1.2. Aktuális eszköz kiválasztása

• Minden CUDA művelet az „aktuális” GPU-nak szól (kivéve az aszinkron P2P memória másolásokat)

• Ehhez ki kell választani a megfelelő eszközt a cudaSetDevice() függvénnyel cudaError_t cudaSetDevice(int

device)

cudaError_t cudaSetDevice(int device)

• Az első paraméter a szükséges eszköz azonosítója

• Ebből a hoszt szálból induló eszköz memória foglalások mind erre a GPU-ra vonatkoznak majd

(cudaMalloc(), cudaMallocPitch(), cudaMallocArray()) és maradnak is ezen az eszközön fizikailag

• Minden memóriafoglalás ebből a hoszt szálból a cudaMallocHost(), cudaHostAlloc() vagy

cudaHostRegister() függvényekkel csak a kapcsolt eszköz élettartamáig léteznek

• Minden új stream vagy esemény ehhez az eszközhöz lesz kapcsolva

• Minden kernel indítás a <<< >>> operátorral, vagy a cudaLaunch() függvénnyel, ezen a GPU-n lesz

lefuttatva

• Ez a hívás bármelyik hoszt szálból bármelyik GPU-ra vonatkozhat bármikor

• Ez a hívás nem okoz szinkronizációt sem a régi, sem az új eszközzel, és nem jár különösebb időveszteséggel

sem

1.3. Aktuális eszköz – stream, események

• Stream-ek és események eszközökhöz kapcsolódnak

• Stream-ek mindig az aktuális eszközön jönnek létre

• Az események mindig az aktuális eszközön jönnek létre

Page 357: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

CUDA verziók

335 Created by XMLmind XSL-FO Converter.

• NULL stream (vagy 0 stream)

• Minden eszköz rendelkezik egy alapértelmezett stream-mel

• Az egyes eszközök esetén ez egymástól független

• Stream-ek és események használata

• Stream-ek csak a megadott eszközök eseményeit használhatják

• Aktuális eszköz használata

• Egy stream-et csak akkor lehet elérni, ha a hozzá tartozó eszköz is elérhető

1.4. Több-GPU példa

• Eszközök közötti szinkronizáció

• eventB esemény a streamB stream-hez kapcsolódik az 1. eszközön

• A cudaEventSynchronize híváskor a 0. az aktuális eszköz

6.1. ábra -

1.5. Több CPU szál használata

• Amennyiben egy CPU folyamat (process) több szállal is rendelkezik

• GPU kezelés azonos, mint az egy szálas környezetben

• Bármelyik szál kiválaszthatja az aktuális eszközt

• Minden szál kommunikálhat a GPU-val

• A folyamat egy saját memória területtel rendelkezik, minden szál el tudja érni ezt

• Több folyamat esetében

Page 358: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

CUDA verziók

336 Created by XMLmind XSL-FO Converter.

• Minden folyamat egy saját memóriaterülettel rendelkezik

• Ez megfelel annak, mintha fizikailag távol helyezkednének el

• Ekkor valamilyen CPU alapú üzenetkezelést kell alkalmazni (MPI)

• Több hoszt esetén

• A CPU-knak kell megoldaniuk a kommunikációt egymás között

• A GPU-k szemszögéből ez megfelel az egygépes környezetnek

1.6. Vektor szorzás több-GPU-s környezetben - kernel

• Egy egyszerű szorzás: minden elemet szorozzunk meg kettővel

6.2. ábra -

1.7. Vektor szorzás több-GPU-s környezetben – memória foglalás

• Eszközökről információ lekérdezése, majd memória lefoglalása

6.3. ábra -

Page 359: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

CUDA verziók

337 Created by XMLmind XSL-FO Converter.

1.8. Vektor szorzás több-GPU-s környezetben – kernel hívás

• Megfelelő eszköz kiválasztása

• A bemenet megfelelő részének átmásolása (aszinkron módon)

• Kernel elindítása az aktuális eszközön

• Eredmények visszamásolása (aszinkron módon)

• A ciklus lefuttatása minden eszközre

• Végül az összes eszköz szinkronizálása

6.4. ábra -

1.9. Vektor szorzás több-GPU-s környezetben – kernel hívás

Page 360: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

CUDA verziók

338 Created by XMLmind XSL-FO Converter.

• Memória felszabadítása

• Eredmények kiírása

6.5. ábra -

2. CUDA 5 újdonságok

2.1. CUDA 5.0 újdonságok [26]

Dinamikus párhuzamosság

• GPU szálak dinamikusan tudnak indítani új szálakat, ezzel elősegítve a GPU-n történő további

adatfeldolgozást. Ezzel minimalizálni lehet a CPU-tól való függést, ami jelentősen leegyszerűsíti a

párhuzamos programozást. Továbbá lehetővé teszi az algoritmusok egy szélesebb körének megvalósítását.

GPU által hívható könyvtárak

• Az új CUDA BLAS könyvtár lehetővé teszi, hogy a felhasználók még jobban kihasználják a dinamikus

párhuzamosságot a GPU által is hívható könyvtárak segítségével. Ezekkel lehetőség nyílik arra is, hogy

valaki csak további API-kat fejlesszen, amik a későbbiekben tetszőleges projectekben használhatóak.

• Az object állományok szerkesztésének lehetősége lehetővé teszi a hatékony és már jól megismert módot a

GPU alkalmazások fejlesztésére. Ezzel a GPU programok is felbonthatók több kisebb részre, majd a

későbbiekben ezek a szerkesztéskor összefűzhetők.

GPUDirect támogatás

• Enables direct communication between GPUs and other PCI-E devices, and supports direct memory access

between network interface cards and the GPU.

2.2. Dinamikus párhuzamosság

6.6. ábra -

Page 361: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

CUDA verziók

339 Created by XMLmind XSL-FO Converter.

Dinamikus párhuzamosság példa

• A programozó tudja használni a megszokott kernel indítási szintakszist egy kernelen belül is

• Az indítás szálonként megtörténik

• __synctreads() az összes indított szálra vonatkozik a blokkon belül

Page 362: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

340 Created by XMLmind XSL-FO Converter.

7. fejezet - Felhasznált irodalom

1. Felhasznált irodalom

[1] Wikipedia – Graphics processing unit http://en.wikipedia.org/wiki/Graphics_processing_unit

[2] Wikipedia – Shader http://en.wikipedia.org/wiki/Shader

[3] S. Patidar, S. Bhattacharjee, J. M. Singh, P. J. Narayanan: Exploiting the Shader Model 4.0 Architecture

http://researchweb.iiit.ac.in/~shiben/docs/SM4_Skp-Shiben-Jag-PJN_draft.pdf

[4] Wikipedia – Unified shader model http://en.wikipedia.org/wiki/Unified_shader_model

[5] CUDA Programming Guide

http://developer.download.nvidia.com/compute/cuda/3_0/toolkit/docs/NVIDIA_CUDA_Programming

Guide.pdf

[6] S. Baxter: GPU Performance http://www.moderngpu.com/intro/performance.html

[7] K. Fatahalian: From Shader Code to a Teraflop: How Shader Cores Work

http://s08.idav.ucdavis.edu/fatahalian-gpu-architecture.pdf

[8] CUDA tutorial 4 – Atomic Operations http://supercomputingblog.com/cuda/cuda-tutorial-4-atomic-

operations

[9] Developing a Linux Kernel Module using RDMA for GPUDirect

http://www.moderngpu.com/intro/performance.html

[10] T. C. Schroeder: Peer-to-Peer & Unified Virtual Addressing

http://developer.download.nvidia.com/CUDA/training/cuda_webinars_GPUDirect_uva.pdf

[11] CUDA C Programming Guide http://docs.nvidia.com/cuda/cuda-c-programming-guide

[12] S. Rennich: CUDA C/C++ Streams and Concurrency

http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf

[13] P. Micikevicius: Multi-GPU Programming

http://developer.download.nvidia.com/CUDA/training/cuda_webinars_multi_gpu.pdf

[14] Wikipedia – Basic Linear Algebra Subprograms

http://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms

[15] NVIDIA CUBLAS http://developer.nvidia.com/cublas

[16] CUBLAS Library http://www.cs.cmu.edu/afs/cs/academic/class/15668-s11/www/cuda-

doc/CUBLAS_Library.pdf

[17] J. Luitjens, S. Rennich: CUDA Warps and Occupancy

http://developer.download.nvidia.com/CUDA/training/cuda_webinars_WarpsAndOccupancy.pdf

[18] C. Zeller: CUDA Performance http://gpgpu.org/static/s2007/slides/09-CUDA-performance.pdf

[19] NVIDIA’s Next Generation: Fermi

http://www.nvidia.pl/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Architecture_White

paper.pdf

[20] Tom R. Halfhill: Parallel Processing with CUDA

http://www.nvidia.com/docs/IO/55972/220401_Reprint.pdf

Page 363: GPGPU-k és programozásuk - tankonyvtar.hu...3.5.6. b) A hardveres függőség ellenőrzés egyszerűsítése a fordító által az ütemezőnek szolgáltatott kulcsszavak (compiler

Felhasznált irodalom

341 Created by XMLmind XSL-FO Converter.

[21] David Kirk, Wen-Mei Hwu:Programming Massively Parallel Processors courses

http://courses.ece.uiuc.edu/ece498/al/

[22] NVIDIA Nsight Visual Studio Edition 2.2 User Guide

http://http.developer.nvidia.com/NsightVisualStudio/2.2/Documentation/UserGuide/HTML/Nsight_Vi

sual_Studio_Edition_User_Guide.htm

[23] Memory Consistency http://parasol.tamu.edu/~rwerger/Courses/654/consistency1.pdf

[24] SIMD < SIMT < SMT: parallelism in NVIDIA GPUs http://www.yosefk.com/blog/simd-simt-smt-

parallelism-in-nvidia-gpus.html

[25] CUDA 5.0 production released http://gpuscience.com/software/cuda-5-0-production-released/

[26] S. Jones: Introduction to Dynamic Parallelism http://on-

demand.gputechconf.com/gtc/2012/presentations/S0338-GTC2012-CUDA-Programming-Model.pdf

2. Gyakran előforduló kifejezések fordításai

Néhány kifejezés esetében megmaradt az eredeti angol szó, mivel annak nincs elterjedt magyar megfelelője (pl.

kernel), vagy az félreértést okozna (stream – folyam, process –folyamat)