1 / 12

CUDA C/ C ++ programozás

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.

Download Presentation

CUDA C/ C ++ programozás

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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_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 )

  5. 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); // ... }

  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á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

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

  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_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?

  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

More Related