CUDA C/C++ programozás Atomikus műveletek 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
ÁROP /C/A A leghátrányosabb helyzetű kistérségek fejlesztési és együttműködési kapacitásainak megerősítése.
Advertisements

C++ programozási nyelv Gyakorlat hét
CUDA.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Haladó Programozás Parallel.For()
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A programozás alapjai 1. (VIEEA100) 9. előadás.
 CUDA mint architektúra  Párhuzamos feldolgozásra optimalizált architektúra  CUDA mint GPGPU keretrendszer  Runtime és Driver API  CUDA C/C++  NVCC.
A TÁRSADALMI KOHÉZIÓT ERŐSÍTŐ BŰNMEGELŐZÉSI ÉS REINTEGRÁCIÓS PROGRAMOK MÓDSZERTANI MEGALAPOZÁSA KIEMELT PROJEKT TÁMOP Elítéltek több szakaszos, társadalmi.
Dinamikus tömbök.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
11. előadás (2005. május 10.) A make segédprogram Alacsony szintű műveletek és bitmezők Fájl, katalógus rendszer hívások 1.
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.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Követelmények Bevezetés a Javába Első java program írása Dokumentációk
C A C nyelv utasításai.
Algoritmizálás Göncziné Kapros Katalin humaninformatika.ektf.hu.
Programozás I. Horváth Ernő.
CISC - RISC processzor jellemzők
6. előadás Hatókör, láthatóság, élettartam. Változók leképzése a memóriára. Blokkszerkezetes nyelvek. Kivételkezelés.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Többmagos processzorok
Operációs rendszerek gyakorlat 4. Gyakorlat Vakulya Gergely.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Programozás Az adatokról C# -ban.
C nyelv utasításai.
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor
3.2. A program készítés folyamata Adatelemzés, adatszerkezetek felépítése Típus, változó, konstans fogalma, szerepe, deklarációja.
„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
Készítette: Csíki Gyula
Hernyák Zoltán Programozási Nyelvek II.
Program kamat Készítette: Rummel Szabolcs Elérhetőség:
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
GPGPU A grafikus hardver általános célú felhasználása
Objektum orientált programozás 3. Függvények Nagy Szilvia.
Objektum orientált programozás
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.
Objektum orientált programozás
Programozás I. Típus algoritmusok
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.
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.
Párhuzamosság, kritikus szakasz, szemaforok Operációs rendszerek.
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,
ProgramozásProgramozás célja hosszabb számítások elvégzése ill. kiíratása akkor érdemes programot írni, ha sok számolni való van illetve ha ugyanazt az.
Török Katalin és Marosi Nóra 11/c. Pascal: Az es években megjelent magas szintű programozási nyelv, közel áll az emberi gondolkodáshoz. Nevét.
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
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.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
A projekt az Európai Unió társfinanszírozásával, az Európa terv keretében valósul meg. Számítógép- architektúrák dr. Kovács György DE AVK GAIT.
Elindult a Vistánk. A Vista véleménye a hardverről.
HEFOP 3.3.1–P /1.0A projekt az Európai Unió társfinanszírozásával, az Európa terv keretében valósul meg. 1 Számítógép architektúrák dr. Kovács.
C++2. Ciklusok elöltesztelő (for, while) A ciklusmag feldolgozása előtt történik a vizsgálat  lehet, hogy egyszer sem fut le. A soronkövetkező iteráció.
Programtervezés, programozás I. 2.5 tömbök,stringek
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Algoritmusok hatékonysága – lottószelvények
Programozási alapismeretek
HPC Portál: Bejárat a szuperszámítógépek világába
ÁROP /C/A A komplex programmal segítendő leghátrányosabb
Lineáris egyenletrendszerek megoldása
GPGPU – CUDA 2..
Változók.
Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor
AZ INVESZTITÚRA
Informatikai gyakorlatok 11. évfolyam
CUDA – OpenGL.
Előadás másolata:

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

GPU számítási képességek  Számítási képesség ismétlés:  Minden GPU-hoz tartozik egy adott számítási képesság.  Pl.: 1.2, 2.0, 3.0  Leírja:  Az architektúra főbb jellemzőit.  A GPU által adott lehetőségeket, és szolgáltatásokat.  Inkrementális szolgáltatáslista.  A magasabb számítási képességű GPU több szolgáltatást ad.  Régi elemek nem vesznek el.  Visszafelé kompatibilitás.

Fordítás adott számítási képességre  A kód fordításakor jelezni lehet, a fordító számára, hogy:  Mi a minimális szolgáltatáskészlet (számítási képesség) amire fordítani szeretnénk a programot.  Milyen GPU-ra optimalizáljon.  Megadás az nvcc parancssori argumentumával:  nvcc –arch=sm_11  A program minimum 1.1-es képességű GPU-n fut.  Miért érdekes ez nekünk?  Mert a mai óra anyaga, az atomikus műveletek a 2.0-s képességtől jönnek be a GPU-ba.  Meg különben sem árt tudni.

Konkurens futtatás  A párhuzamos programok futásakor előfordulhatnak versenyhelyzetek:  Két vagy több utasítás ugyanazt az adatot próbálja elérni/módosítani.  Például: __global__ void kernel(int* x) { (*x)++; // x növelése (nem pixelenként) return; } Int main(...) { int* dev_x; //... kernel >>(dev_x); // melyik szál növeli x-et? //... }

Probléma konkurens adatelérésnél  (*x)++;  3 lépésben  X értékének kiolvasása a memóriából,  Az érték növelése,  Eredmény visszaírása a memóriába  Ha párhuzamosan megy (pl.: x): 1. szál Olvasás: reg = *x; // 4 beolvasva Növelés: reg++; // növelt érték: 5 Visszaírás: *x = reg; // *x=5; 2. szál Olvasás: reg = *x; // 4 beolvasva Növelés: reg++; // növelt érték: 5 Visszaírás: *x = reg; // *x=5; 3. szál Olvasás: reg = *x; // 4 beolvasva Növelés: reg++; // növelt érték: 5 Visszaírás: *x = reg; // *x=5; idő

Ugyanaz szekvenciálisan  (*x)++;  3 lépésben  X értékének kiolvasása a memóriából,  Az érték növelése,  Eredmény visszaírása a memóriába  Ha párhuzamosan megy (pl.: x): 1. futás Olvasás: reg = *x; // 4 beolvasva Növelés: reg++; // növelt érték: 5 Visszaírás: *x = reg; // *x=5; 2. futás Olvasás: reg = *x; // 5 beolvasva Növelés: reg++; // növelt érték: 6 Visszaírás: *x = reg; // *x=6; 3. futás Olvasás: reg = *x; // 6 beolvasva Növelés: reg++; // növelt érték: 7 Visszaírás: *x = reg; // *x=7; idő

Konkurens változónövelés a gyakorlatban  14_RaceCondition.cu  Egy változó érték növelése adott számszor.  Párhuzamosan a GPU-n.  És szekvenciálisan a GPU-n.

Atomikus műveletek  Feloldják a konfliktusokat.  Biztosított, hogy egyszerre csak egy szál férhessen hozzá egy adatelemhez.  Műveletek:  int atomicAdd(int* address, int val);  int atomicSub(int* address, int val);  int atomicExch(int* address, int val);  int atomicMin(int* address, int val);  int atomicMax(int* address, int val);  unsigned int atomicInc(unsigned int* address, unsigned int val);  unsigned int atomicDec(unsigned int* address, unsigned int val);  int atomicCAS(int* address, int compare, int val);  int atomicAnd(int* address, int val);  int atomicOr(int* address, int val);  int atomicXor(int* address, int val);

Valós példa: Hisztogram  Hisztogram számítása a GPU-n.  Adott egy adatsor (diszkrét elemekből).  Pl.: kép egész pixelintenzitásokkal 0 és 255 között.  Megoldása CPU-n.  15_HistCPU.cu  Sima ügy. unsigned char* adat; int* hiszt[256]; for(int i=0; i<256; i++) hiszt[i] = 0; for(int i=0; i<adat_meret; i++) hiszt[adat[i]]++;

Hisztogram a GPU-n  Bonyolult művelet.  A szálak konkurens módon párhuzamosan dolgozzák fel az adatot.  Konfliktus léphet fel, ha két szál ugyanazt a hisztogram számlálót akarja növelni.  Magoldás: atomikus műveletek  A számláló növeléseket atomikus műveletekkel végezzük a kernelben.  Ez automatikusan feloldja a konfliktusokat.  Hátrányok:  Lassítja a kódot  A szálak sorban várhatnak egy számláló növelésére.  16_Hist_GPU.cu

További lehetőségek  Mire lehetne még használni az atomikus műveleteket?