Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaAmanda Kissné Megváltozta több, mint 10 éve
1
GPGPU A grafikus hardver általános célú felhasználása
Magdics Milán
2
Tartalom Valósidejű 3D grafika és a grafikus hardver
A mai hardverek teljesítménye Általános célú felhasználás: GPGPU és a grafikus pipeline CUDA GPGPU grafikus szerelőszalag nélkül
3
Valósidejű 3D grafika A feladat egy (3D-s) virtuális színtér lefényképezése
4
Valósidejű 3D grafika A cél: minél realisztikusabb kép előállítása
5
Valósidejű 3D grafika a CPU-n?
Valósidő → legalább 25 FPS Pl.: 1280x1024-es képernyőfelbontás = 1.3M pixel → ≈33M pixel / sec Pl.: 2GHz CPU: 2*109 órajel / sec → ≈80 órajel / pixel Ráadásul még egyéb dolgokat is számítani kellene… (fizika, AI, stb.)
6
Megjelenítési csővezeték
Perspektív transzf + Vágás Virtuális világ Kamera transzformáció, 2. 1. Raszterizáció + interpoláció + textúrázás szín mélység
7
Grafikus kártyák 2001-2002 2006 2002 Interfész Transzformáció+ Vertex
Shader Fragment Transzformáció+ Illumináció Stream output Geometry Shader 2006 Vágás + Nézeti transzf + Raszterizáció + interpoláció Textúrázás Textúra memória 2002 Kompozitálás (Z-buffer, átlátszóság) Bufferek: szín, z, stencil, …
8
Programozhatóság A hardveren ún. shader (árnyaló) programok futtathatók Magas szintű árnyaló nyelvek Az utasításkészletet a grafika határozta meg Unified Shader Model Unified Shader Architecture Vertex Shader Geometry Shader Fragment Shader
9
Programozhatóság Visszaverődés Level of detail Füst Árnyalás Árnyékok
10
Programozhatóság HDRI Kausztikus hatások Mélység-élesség
11
A mai kártyák teljesítménye
≈ csúcspont/sec ≈ pixel/sec >1 TFlop/s Magyarország legnagyobb teljesítményű szuperszámítógépe <1 TFlop/s SZTAKI desktopgrid csúcsteljesítmény: 3 TFlop/s 10-100K HUF Tesco gazdaságos szuperszámítógép ( MByte RAM)
12
A teljesítmény fejlődése
13
A teljesítmény fejlődése
14
Miért gyorsabb a GPU? Adatfolyamok nagy számítási igényű, párhuzamos feldolgozására hozták létre Többmagos hardver Nagyobb tranzisztorszám jut az adatok feldolgozására – régebben csak SIMD
15
Elágazások SIMD: minden adaton ugyanaz az utasítás hajtódik végre
Elágazásokat és változó hosszúságú ciklusokat írhatunk, de: Ha a párhuzamos szálak más ágakon futnak, a teljesítmény jelentősen romlik Változó hosszúságú ciklusok esetén mindig a leglassabb számít, a többi szál bevárja
16
Adat és feladatszintű párhuzamosság
Független folyamatok különböző céllal, minimális kommunikációval Adatszintű párhuzamosság: Sok adat, mindegyiken ugyanazt a műveletet hajtjuk végre, (általában) a többi adattól függetlenül
17
CPU vs. GPU CPU GPU Gyors cache Sok különböző szál hatékony kezelése
Egy adott szál végrehajtása hatékony Feladatszintű párhuzamosság GPU Sok ALU egység Egy adott program végrehajtása minden csúcsponton/pixelen Adatszintű párhuzamosság
18
GPGPU General-Purpose computing on Graphics Processing Units
A GPU felhasználása általános célú számításokra Mire érdemes (mire lehet) használni? Nagy (aritmetikai) számításigényű feladatok Stream processing
19
Az algoritmusok leképezése GPU-ra
Adatokat kétféle primitívre képezhetjük le: Pixelek – textúra (2D tömb) Feldolgozás a pixel shaderben Csúcspontok/geometriai primitívek Feldolgozás a vertex/geometry shaderben Megj.: GPU-CPU kommunikáció költséges
20
Adatok feldolgozása pixel shaderben
Adatok a textúrában, minden pixelre szeretnénk végrehajtani a kernelt Rajzoljunk egy teljes képernyőt kitöltő téglalapot Az adatok egy részének feldolgozása: több téglalap
21
Működés Kép Számító kernel Képpont árnyaló Raszterizáció Textúra
Minden pixel Kitöltendő pixelek Fényforrás Képet lefedő négyszög Háromszög a képernyőn Kamera Csúcspont árnyaló Csúcs pozíció, normál 4 db csúcs
22
Gather, Scatter A pixel shaderben olvashatunk indirekt címzéssel (gather – x=a[i]), viszont indirekt írásra (scatter – a[i]=x) nincs lehetőség, mivel mindig a kapott pixelpozícióra írunk A vertex shader módosít(hat)ja a pozíciót, ezáltal a kernelben határozhatjuk meg az eredmény helyét (pl. rendezés) Megj.: az adatokat ettől függetlenül pixelként reprezentáljuk Fullscreen quad helyett minden indexnek megfelelően egy-egy csúcspontot küldünk a GPU-ra, ezek határozzák meg a feldolgozandó adat helyét Változó számú kimenetet is előállíthatunk (geometry shader)
23
Geometry shader Geometry shaderrel változó számú kimenetet is előállíthatunk, ez lehet több, mint egy adat
24
Geometry shader de lehet akár nulla is → szétválogatás, adatok kizárása a további számításokból
25
Alkalmazás: Procedurális geometria
A kirajzolandó geometriát az azt előállító algoritmussal adjuk meg Jóval tömörebb: ~100 Kbyte vs 100 Mbyte 3D internet? Automatikus modellgenerálás: a modell előállításához nincs szükség egy egész sereg modellező többhónapos munkájára
26
Alkalmazás: Procedurális geometria
Az algoritmikus leírás alapján a geometriát valósidőben is kibonthatjuk: Csak azt generáljuk le, amit éppen látunk Potenciálisan végtelen színterek (pl. egy egész univerzum)
27
Alkalmazás: Procedurális geometria
28
Korlátok Kisméretű input, output adatok
Nincs olyan memória, ami egyszerre: Szabadon címezhető Írható Globális Nincs egyszerre írható és olvasható memória A szálak közt nincs kommunikáció
29
GPGPU grafikus szerelőszalag nélkül
Egyszerűbben nem lehetne?
30
CUDA Compute Unified Device Architecture
Az NVIDIA párhuzamos architektúra modellje a saját hardvereihez GPU: sokszálú, sokmagos processzor szálcsoportok, közös memória, szinkronizáció Kiterjesztés a C(++) nyelvhez, a kártya programozásához Saját fordító (nvcc), GPU kódot is generál Könyvtárak, meghajtó és runtime
31
CUDA Alkalmazás CUDA könyvtárak CUDA runtime CUDA eszközmeghajtó
32
CUDA Teljesen általános célú párhuzamos számításokhoz
Nem jelenik meg a grafikus szerelőszalag (!) Szálak, blokkok, szinkronizáció stb.
33
CUDA A program működésének absztrakciója:
Minél több szál egy blokkban, annál jobb De legfeljebb 512
34
CUDA Memóriahasználat Közös memória 16 Kbyte
35
CUDA Működés a GPU-n: Újabban 16 ≤ N (≤ 64) M = 8 Az ütemezésnek
köszönhetően 4 órajelciklus alatt 32 szál fut le 8-16K db regiszter, 64KB konstans, 6-8 KB tex. cache Processzor ~ MHz Az újabb kártyákban double is
36
Korlátok a CPU-hoz képest
Kevesebb központi memória, jóval kisebb cache Az elágazások jelentősen leronthatják a teljesítményt Textúra: van cache, de nem írható Az eszközmemória írható, az elérése lassú, nem cache-elt Általában ezen lehet a legtöbbet optimalizálni Olvasás a szálak osztott memóriájába, feldolgozás, eredmény kiírása az osztott memóriába, visszamásolás az eszközmemóriába
37
CUDA alkalmazások Mátrix/vektorműveletek nagyméretű és/vagy sok adatra
CUBLAS könyvtár – Basic Linear Algebra Subprograms FFT
38
CUDA alkalmazások Sztochasztikus, Monte-Carlo szimulációk
Tőzsdei előrejelzés $ Kockázatanalízis Sugárkövetés
39
CUDA alkalmazások Jelfeldolgozás, szűrések, képfeldolgozás
40
CUDA alkalmazások Fizikai szimulációk
41
CUDA alkalmazások PET rekonstrukció
42
CUDA alkalmazások PET rekonstrukció Problémák:
35x35 detektor / modul (lap), mindegyik 3x35x35 másikkal van koincidencia kapcsolatban ~ 3 millió pár Cél: 512x512x512=227 felbontású adat Minden párba érkezhet foton a térfogat minden pontjából
43
Programozzunk! Szerezzünk NVIDIA kártyát
CUDA Driver, CUDA Toolkit, CUDA SDK (sok példakóddal)
44
Programozzunk! CUDA kernel: ami a GPU-n egy szál lesz ~ shader program
C függvény // kernel definíció __global__ void vecAdd(float *A, float *B, float *C) { C[threadIdx.x] = A[threadIdx.x] + B[threadIdx.x]; }
45
Programozzunk! Kernel hívás: Grid dimenzió Blokk dimenzió int main() {
vecAdd<<<1,N>>>(A ,B,C); // … } Grid dimenzió Blokk dimenzió
46
Programozzunk! Erőforrások:
Pointer jelenthet egy központi (CPU) memóriabeli, és egy eszköz (GPU) memóriabeli címet is, a kettő nem összetévesztendő // CPU memória h_p = malloc(sizeof(int)*42); // GPU memória cudaMalloc((void**)&d_p, sizeof(int)*42); // másolás a kártyára cudaMemcpy(d_p, h_p,sizeof(int)*42, cudaMemcpyHostToDevice);
47
Programozzunk! Szinkronizációs utasítások:
Szálakon belül: az egy blokkban futó szálak bevárják egymást Host kódban: a CPU futása felfüggesztődik, amíg le nem fut minden kernel (a kernel indítás aszinkron)
48
Jó tudni Debugger még nincs, de van emulációs mód
Minden a CPU-n fut Host kód a kernelekben Shader műveletek és típusok: <cutil_math.h> A kernelek futási idejét az op. rendszer limitálja Registry „hack”, CUDA ablakozó rendszer nélkül Vagy: szedjük szét rövidebb kernelekre #ifdef __DEVICE_EMULATION_ // hoston futó kód, csak emuláció esetén fut le
49
Házi feladat 1. Kínában matematika érettségi zajlik. A feladatsor tesztes, minden feladatra 4 válaszlehetőség van, a teszt 32 kérdésből áll. Az érettségin 10(-100) millió diák vett részt. Rendelkezésünkre állnak a kérdésekre adott válaszaik, valamint a megoldókulcs. Hogyan állapítsuk meg az átmenő jegy (2?) ponthatárát, hogy a diákok kb. 10%-a bukjon meg?
50
Házi feladat 2.a. Írjunk isosurface megjelenítőt. Adottak egy térfogat (3D tömb) sűrűségértékei. Jelenítsük meg a térfogat egy adott (állítható) sűrűségű részeit. Tipp: Vagy: 2.b. Jelenítsük meg a térfogatnak a pixelben látható maximális sűrűségét.
51
Házi feladat 3. Arbitrázs a valutaváltási árfolyamokban rejlő egyenlőtlenségek olyan hasznosítása, amikor egy valuta 1 egységéből elindulva, egy valutaváltási sorozat lefolytatása után, ugyanazon valuta 1 egységénél nagyobb értékére teszünk szert. (Pl.: 1 dollárért veszünk 0,7 fontot, majd a fontot átváltjuk frankra 9,5-es szorzóval, majd a frankot ismét dollárra váltjuk 0,16-os szorzóval, ekkor 0,7*9,5*0,16=1,064. Tehát 6,4%-os haszonra tettünk szert.) Adott 12 pénznem, és az átváltási arányok. Meg tudunk-e gazdagodni, és ha igen, hogyan?
52
Tanulság Szuperszámítógépekkel vetekedő teljesítmény egy közönséges PC-ben Bonyolultabb kiaknázni Jól párhuzamosítható feladatok hatékony megoldása Minimális kommunikáció Lehetőleg minél kevesebb elágazás
53
A jövő? Direct3D11 Intel Larrabee: 16+ magos, CPU-szerű architektúra
Compute shader: Vertex és geometry shader között, kb. a CUDA funkcionalitása A pipeline marad HLSL 5: OO shader nyelv (osztályok, öröklődés stb.) Intel Larrabee: 16+ magos, CPU-szerű architektúra 2 TFlop/s Valósidejű sugárkövetés?
54
Köszönöm a figyelmet!
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.