CUDA C/C++ programozás Szál struktúra A segédanyag készítése a TÁMOP 4.2.4.A/2-11-1-2012-0001 Nemzeti Kiválóság Program című kiemelt projekt keretében.

Slides:



Advertisements
Hasonló előadás
Készítette: Kosztyán Zsolt Tibor
Advertisements

GRIN: Gráf alapú RDF index
Adatelemzés számítógéppel
Kliens-szerver architektúra
Összetett adattípusok 8/b tétel
Small Liga Mozgás vezérlő rendszere
Programozási alapismeretek 6. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 6.2/  Rekordok/struktúrák.
3. előadás (2005. március 1.) Utasítások, tömbök
 CUDA mint architektúra  Párhuzamos feldolgozásra optimalizált architektúra  CUDA mint GPGPU keretrendszer  Runtime és Driver API  CUDA C/C++  NVCC.
Dinamikus tömbök.
Szoftevrismeret Operációs rendszerek.
Bevezetés a Java programozásba
Mozgó Objektumok Detektálása és Követése Robotkamera Segítségével
Trimble Aerial Camera Nagyfelbontású légi felvételező rendszer fejlesztése A fejlesztés a TÁMOP-4.2.1/B-09/1/KONV azonosító számú, „Kutatóegyetemi.
C A C nyelv utasításai. Ismétlés Utasítások csoportosítása.
LDinamikus tömbök, kétdimenziós tömbök Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./0. lVektorok létrehozása futásidőben, dinamikusan.
ISZAM III.évf. részére Bunkóczi László
MATEMATIKA ÉS INFORMATIKA I.
Szervezeti Formák Tradicionális Szervezeti Formák
Microsoft Excel Függvények VII..
Lineáris programozás Definíció: Olyan matematikai programozási feladatot nevezünk lineáris programozási feladatnak, amelyekben az L halmazt meghatározó.
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Tömbök Csernoch Mária.
V 1.0 ÓE-NIK, Programozás I. A Microsoft Visual Studio 2010 használata.
Számítógépes Grafika 2. gyakorlat Programtervező informatikus (esti) 2011/2012 őszi félév.
VI. Konténerek 18. Tömbök 19. Rendezés, keresés, karbantartás
Erőforrások Készítette: Szentirmai Róbert (minden jog fenntartva)
Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor
Textúra elemzés szupport vektor géppel
Kifejezések. Algoritmus számol; Adott összeg; összeg:=0; Minden i:=1-től 5-ig végezd el Ha 2 | i akkor összeg:=összeg+2*i Ha vége Minden vége Algoritmus.
Összetett adattípusok
„21. századi közoktatás – fejlesztés, koordináció” TÁMOP / számú kiemelt projekt „21. századi közoktatás – fejlesztés, koordináció”
A legolcsóbb szuperszámitógép
Alapsokaság (populáció)
Vektorterek Definíció. Legyen V Abel-csoport, F test, továbbá
GPGPU A grafikus hardver általános célú felhasználása
Csempe Programozás érettségi mintafeladat
HIVATALOS WEBOLDAL: A BESZÉDES EMACS, AVAGY AZ EMACSPEAK BEMUTATÁSA.
CUDA C/C++ programozás Textúra memória A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
1. MATEMATIKA ELŐADÁS Halmazok, Függvények.
CUDA C/C++ programozás Egyéb eszköztárak vegyesen A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt.
Mérés és adatgyűjtés laboratóriumi gyakorlat - levelező Sub-VI és grafikonok 1 Mingesz Róbert V
CUDA C/C++ programozás
CUDA C/C++ programozás GPU tulajdonságainak lekérdezése A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt.
Dr. Nagy Erzsébet, Gyenes Anett, Vargáné Molnár Alíz,
CUDA C/C++ programozás Atomikus műveletek A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
Műveletek, függvények és tulajdonságaik Mátrix struktúrák:
Algebrai struktúrák: csoport, gyűrű, test. RSA Cryptosystem/ Titkosítási rendszer Rivest, Shamir, Adelman (1978) RSA a neten leggyakrabban használt.
A MATEMATIKA FELÉPÍTÉSÉNEK ELEMEI
CUDA C/C++ programozás CUDA C bevezetés A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
2012. március 21. Paulik Áron.  Ha a függvényünk feladata olyan, hogy nem lenne értelme a visszatérési értéknek, vagy csak nincs rá szükség, void típusúként.
1. feladat  Készíts olyan függvényt, mely paraméterül kapja két egész típusú változó címét, s hívása után a két változó értéke helyet cserél.
Grafikus programozás Készítette: Csernok László
Memóriakezelés feladatok Feladat: 12 bites címtartomány. 0 ~ 2047 legyen mindig.
Programtervezés, programozás I. 2.5 tömbök,stringek
Adatszerkezetek és algoritmusok 2008/ Algoritmus Az algoritmus szó eredete a középkori arab matematikáig nyúlik vissza, egy a i.sz. IX. században.
Informatikai gyakorlatok 11. évfolyam
Informatikai gyakorlatok 11. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Operációs rendszerek Az operációs rendszerek működésének alapfogalmai.
GPGPU – CUDA 1..
TÖMBÖK – péntek Jordán Sándor.
Nevezetes algoritmusok
Készítette: Révész Lajos Bálint
Operációs rendszerek.
GPGPU – CUDA 2..
Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor
Informatikai gyakorlatok 11. évfolyam
Cache példák 2019 (IMSC).
Előadás másolata:

CUDA C/C++ programozás Szál struktúra A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében zajlott. A projekt az Európai Unió támogatásával, az Európai Szociális Alap társfinanszírozásával valósul meg.

Rácsok, blokkok és szálak  A CUDA-ban az elindított kernelek hierarchikus struktúrában lesznek elindítva  Az indítási struktúra felső szintje a rács (grid).  Blokkok strukturált tömbje.  A második szinten a blokkok állnak.  Szálak strukturált tömbje.  A valódi számítást valójában a szálak (thread) intézik.  A kernel egy futásának a példánya.  Egyedileg azonosítható.  A szálstruktúrát a hatékonyság érdekében jól kell megtervezni a hardver felépítését figyelembe véve. Az előző órai példákban 1 szál/blokk volt, ami határozottan nem hatékony.

Rácsok, blokkok és szálak Rács 1. Blokk 1. Szál2. Szál3. Szál4. Szál5. Szál 2. Blokk 1. Szál2. Szál3. Szál4. Szál5. Szál 3. Blokk 1. Szál2. Szál3. Szál4. Szál5. Szál

A szálhierarchia kezelése  A szálak indítási struktúráját a kernel indításakor a >> operátorral adhatjuk meg.  Teljes formája: >>  A rácsméret és a blokkméret lehet egész szám, vagy dim3 típusú érték. (2-, vagy 3- dimenziós rács és tömb is definiálható)  De itt is vannak megkötések:  A rács és a tömb négyzet/téglatest alakú.  Minden blokkban ugyanannyi szál kerül elindításra.  A blokk méreteire vannak korlátozások  a hardver számítási képességei, és  a kernelben felhasznált regiszterek száma. (magyarázatot a GPU architektúra adja majd.)

A szálhierarchia kezelése  A szálak megkülönböztetésére a kernel futása közben lekérhető a futtatási struktúra, és a szál pozíciója beépített változókon keresztül.  dim3 gridDim;// Rács mérete  dim3 blockDim;// tömb mérete  dim3 blockIdx;// a blokk koordinátái a rácsban  dim3 threadIdx;// a szál koordinátái a blokkban  Ebből kiszámítható a rács teljes mérete, és az adott szál pozíciója a rácsban.

Vektorok összeadása blokkonként több szállal  Többszálú blokkok esetén ki kell számítani, hogy hány blokkra és blokkonként hány szálra lesz szükség.  Adottak:  N: Összes indítandó szálak száma  BLOCK_DIM: blokkonként indított szálak száma  Indítandó blokkok száma: B = (N + (BLOCK_DIM-1) ) / BLOCK_DIM; A legkisebb egész szám, amire B*BLOCK_DIM > N teljesül (aki nem hiszi számoljon utána néhány példán)  kernel indítás pl.: (1D rács esetén)  kernel >>();

Vektorok összeadása blokkonként több szállal  Több blokk esetén a kernelt is módosítani kell.  A blokkok sorszámát használva kell meghatározni a feldolgozni kívánt adatelem pozícióját.  Azt sem árt ellenőrizni, hogy az adatelem létezik-e.  Nagyobb példa: 06_MultiThread.cu int tid = blockIdx.x * blockDim.x + threadIdx.x; if(tid < N) c[tid] = a[tid] + b[tid];

Többdimenziós szálstruktúra  A szálakat leíró dim3 adattípus többdimenziós szálstruktúrák indítását is lehetővé teszi. Rács Blokk (1, 1) Blokk (1, 2) Blokk (2, 1) Blokk (2, 2) Blokk (3, 1) Blokk (3, 2)

Többdimenziós példa: Kép indexelése  Legyen adott:  A kép mérete: w x h (szélesség x magasság)  Egy blokk mérete: bw x bh (szélesség x magasság)  Rács indítása:  Szál, és pixel koordináták kiszámolása  Képpont indexiének kiszámítsa (lineáris tömbben): int x = blockDim.x * blockIdx.x + threadIdx.x int y = blockDim.y * blockIdx.y + threadIdx.y dim3 grid((w + bw–1)/bw, (h + bh-1)/bh); dim3 block(bw, bh); kernel >>(... ); int index = y * w + x;

Gyakorlati példák  Júlia halmaz blokkonként több szállal.  05_JuliaGPU_mt.cu  Hullám animálása Gpu-n.  08_GPURipple.cu

Kérdés  Miért kell ilyen bonyolult szálstruktúra?  Rácsok, blokkok, szálak?  Válasz:  A GPU architektúra adja.  A hatékony működéshez kell.

Válasz  A GPU-ban a számítást CUDA magoknak nevezett egységek végzik.  A CUDA magok csoportokban (multiprocesszorokban) vannak elhelyezve.  Minden multiprocesszor tartalmaz 8, 16, 32 …, vagy akár 192 CUDA magot.  A multiprocesszorhoz tartozik egy utasításbetöltő egység.  És a lényeg.  Futás közben minden futó blokk hozzá lesz rendelve egy multiprocesszorhoz.  A multiprocesszor CUDA magjai hajtják végre az utasításokat, de a multiprocesszor egyszerre csak egy blokkhoz tartozó szálakat tud futtatni.  Tehát ha a blokkban csak egy szál van, akkor csak egy CUDA mag számol multiprocesszoronként, a többi (akár 191 mag) üresjáraton áll.  (Ez ~0.5% -os kihasználása a számítási teljesítménynek.)

Válasz ábrával Rács 1. Blokk 1. Szál2. Szál3. Szál4. Szál5. Szál 2. Blokk 1. Szál2. Szál3. Szál4. Szál5. Szál 3. Blokk 1. Szál2. Szál3. Szál4. Szál5. Szál MultiprocesszorBlokk CUDA MagSzál

Hatékonyság szemléltetése és mérése  Júlia halmazt generáló program futásideje blokkonként egy vagy több szállal.  Elemzéshez Nvidia visual profiler.