120 likes | 195 Views
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 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.
E N D
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 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.
Ami eddig kimaradt • Események • Sztream-ek • Fejlett memóriakezelés • Több GPU használata • Egyéb CUDA eszközök
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
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_tevent, cudaStream_tstream = 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_tevent) • Esemény bevárása: • cudaError_t cudaEventSynchronize( cudaEvent_tevent )
Példa eseményhasználatára • Kernel futási idejének mérese: // ... int main(...) { cudaEvent_t start, stop; floatellapsedTime; cudaEventCreate(&start); cudaEventCreate(&stop); // ... cudaEventRecord(start, 0); kernel<<< ... >>>( ... ); cudaEventRecord(stop, 0); cudaEventSynchronize(stop) cudaEllapsedTime(&ellapsedTime, start, stop); // ... }
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)
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.
Stream példa egy szálon • 2 vektorpár összeadás: a+b = c, d+e = e utasítások GPU Memcpy: a -> GPU Mem. kez. Kernel kez. Memcpy: b -> GPU a -> GPU b -> GPU Kernel: c = a + b c = a + b Memcpy: c -> CPU c -> CPU Memcpy: d -> GPU d -> GPU Memcpy: e -> GPU e-> GPU Kernel: f = d + e f = d + e Memcpy: f -> CPU f-> CPU
Stream példa két szálon • 2 vektorpár összeadás: a+b = c, d+e = f utasítások GPU Mem. kez. Kernel kez. a -> GPU 2. stream 1. stream b -> GPU Memcpy: a -> GPU Memcpy: d -> GPU d -> GPU a + b Memcpy: b -> GPU Memcpy: e -> GPU e -> GPU Memcpy: d -> GPU Memcpy: d -> GPU d+e c -> CPU Memcpy: c -> CPU Memcpy: f -> CPU f -> CPU
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_tcudaSetDevice ( int device) • 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?
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. • …
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