Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

CUDA C/C++ programozás Egyéb eszköztárak vegyesen 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.

Hasonló előadás


Az előadások a következő témára: "CUDA C/C++ programozás Egyéb eszköztárak vegyesen 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."— Előadás másolata:

1 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 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.

2 Ami eddig kimaradt  Események  Sztream-ek  Fejlett memóriakezelés  Több GPU használata  Egyéb CUDA eszközök

3 Események  A CUDA programokban létrehozhatunk eseményeket.  Az kód adott pontján lehet rögzíteni őket.  A kódban szinkronizációs pontok tehetők, amik megvárják az egyes események bekövetkezését.  Időbélyegzővel ellátottak.  Kiválóan használhatóak:  Szinkronizációra,  Időmérésre

4 Események kezelése  Deklarálás:  cudaEvent_t típusú adattaggal.  Létrehozás:  cudaError_t cudaEventCreate (cudaEvent_t* event )  Rögzítés:  cudaError_t cudaEventRecord (cudaEvent_t event, cudaStream_t stream = 0 )  Egyéb (időmérés):  cudaError_t cudaEventElapsedTime (float* ms, cudaEvent_t start, cudaEvent_t end )  Megszűntetés:  cudaError_t cudaEventDestroy (cudaEvent_t event )  Esemény bevárása:  cudaError_t cudaEventSynchronize ( cudaEvent_t event )

5 Példa eseményhasználatára  Kernel futási idejének mérese: //... int main(...) { cudaEvent_t start, stop; float ellapsedTime; cudaEventCreate(&start); cudaEventCreate(&stop); //... cudaEventRecord(start, 0); kernel >>(... ); cudaEventRecord(stop, 0); cudaEventSynchronize(stop) cudaEllapsedTime(&ellapsedTime, start, stop); //... }

6 Page-locked-, Mapped- memory  A CUDA a központi memória kezeléséhez is ad extra eszközöket a cudaHostAlloc függvénnyel.  „Page-locked” memória.  Nem lapozható memóriaterület a központi memóriába.  Nem kerül ki a háttértárra, ezért nem kell várni az elérésekkor.  A GPU nem vár a lapozásra  „Mapped” (zero-copy) memória:  A központi memóriában található nem lapozható memória.  A GPU kernel közvetlenül is képes elérni (olvasni/írni)  Gyorsítja a programot, ha egy adatra csak egyszer van szükség.  (Illetve, ha a GPU-nak nincs dedikált memóriája)

7 CUDA stream-ek  Egyes GPU-k képesek aszinkron módon párhuzamosan futtatni egy kernelt, és egy, vagy több memóriamozgató műveletet végezni.  „Device Overlap” paraméter.  A programok működését felgyorsíthatjuk, ha párhuzamosíthatunk bizonyos műveleteket.  Ennek a kihasználásához CUDA stream-ek definiálhatóak.  Egymástól független utasítás sorozatok sorok.  Átlapolva működhetnek.  De nem mindig gyorsít a kódon.  Körültekintően kell vele bánni.

8 Stream példa egy szálon  2 vektorpár összeadás: a+b = c, d+e = e utasításokGPU Mem. kez.Kernel kez. Memcpy: a -> GPU Memcpy: b -> GPU Kernel: c = a + b Memcpy: c -> CPU Memcpy: d -> GPU Memcpy: e -> GPU Kernel: f = d + e Memcpy: f -> CPU a -> GPU b -> GPU c = a + b d -> GPU c -> CPU e -> GPU f = d + e f -> CPU

9 Stream példa két szálon  2 vektorpár összeadás: a+b = c, d+e = f utasításokGPU Mem. kez.Kernel kez. Memcpy: a -> GPU Memcpy: b -> GPU Memcpy: d -> GPU Memcpy: c -> CPU a -> GPU b -> GPU a + b d -> GPU c -> CPU e -> GPU f -> CPU d+e Memcpy: d -> GPU Memcpy: e -> GPU Memcpy: d -> GPU Memcpy: f -> CPU 1. stream 2. stream

10 Több GPU használata  Ha a számítógépben több GPU is van, akkor lehet azokat felváltva/egyszerre használni.  Működés:  Csak ki kell választani, hogy melyik GPU-ra akarunk küldeni feladatot:  cudaError_t cudaSetDevice ( int device ) cudaError_tcudaSetDevice  Viszont figyelni kell:  Az adat konzisztenciára, ha átlapoló adatokkal dolgoznak a GPU-k.  A szinkonizációra.  Pl.: Itaratív simítás több GPU-n?

11 Egyéb CUDA eszközök  CUFFT  CUDA-ban megírt Gyors Fourier transzformáció.  Működik 1-, 2, és 3-Dimenziban.  Valós, és komplex adatokra is.  …  CUBLAS  CUDA Basic Linear Algebra Subprograms  Lineáris algebra függvénykönyvtár CUDA-hoz.  Alapvető mátrix/vektorműveletek (addíció, szorzás, stb.)  Ritka mátrixok kezelése.  Valós, és komplex adatok.  …

12 CUDA eszközök Kód kezelésre  Debuggerek:  CUDA GDB:  GNU debugger kiterjesztés CUDA-ra.  Parallel Nsight:  Visual Studio kiterjesztés GPU kódok debugolására.  Kód elemzők:  CUDA Visual Profiler


Letölteni ppt "CUDA C/C++ programozás Egyéb eszköztárak vegyesen 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."

Hasonló előadás


Google Hirdetések