Párhuzamos és Grid rendszerek

Hasonló dokumentumok
Videókártya - CUDA kompatibilitás: CUDA weboldal: Példaterületek:

Grafikus kártyák, mint olcsó szuperszámítógépek - I.

Grafikus kártyák, mint olcsó szuperszámítógépek - II.

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

OpenCL - The open standard for parallel programming of heterogeneous systems

CUDA alapok CUDA projektek. CUDA bemutató. Adatbányászat és Webes Keresés Kutatócsoport SZTAKI

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

GPGPU. GPU-k felépítése. Valasek Gábor

Magas szintű optimalizálás

GPGPU-k és programozásuk

CUDA haladó ismeretek

GPGPU-k és programozásuk Dezső, Sima Sándor, Szénási

GPGPU. Architektúra esettanulmány

Hallgatói segédlet: Nvidia CUDA C programok debugolása Nvidia Optimus technológiás laptopokon. Készítette: Kovács Andor. 2011/2012 első félév

Grafikus csővezeték 1 / 44

Haladó Grafika EA. Inkrementális képszintézis GPU-n

Heterogén számítási rendszerek gyakorlatok (2017.)

GPGPU alapok. GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai

Eichhardt Iván GPGPU óra anyagai

Készítette: Trosztel Mátyás Konzulens: Hajós Gergely

GPU-Accelerated Collocation Pattern Discovery

KÉPFELDOLGOZÓ ALGORITMUSOK FEJLESZTÉSE GRAFIKUS HARDVER KÖRNYEZETBEN

GPGPU programozás lehetőségei. Nagy Máté Ferenc Budapest ALICE ELTE TTK Fizika MSc 2011 e-science Café

4. Funkcionális primitívek GPUn

Heterogén számítási rendszerek

GPGPU: Általános célú grafikus processzorok cgpu: computational GPU GPGPU = cgpu Adatpárhuzamos gyorsító: dedikált eszköz, ami eleve csak erre

Diplomamunka. Miskolci Egyetem. GPGPU technológia kriptográfiai alkalmazása. Készítette: Csikó Richárd VIJFZK mérnök informatikus

Masszívan párhuzamos alkalmazások fejlesztése. Dr. Szénási Sándor Kertész Gábor, Kiss Dániel

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Jurek Zoltán, Tóth Gyula

Párhuzamos és Grid rendszerek

Párhuzamos és Grid rendszerek. Flynn-féle architektúra modell. ClearSpeed gyorsító kártya. 2006: Tokyo Institute of Technology's

Eichhardt Iván GPGPU óra anyagai

Grafikus kártyák, mint olcsó szuperszámítógépek - I.

A CUDA előnyei: - Elszórt memória olvasás (az adatok a memória bármely területéről olvashatóak) PC-Vilag.hu CUDA, a jövő technológiája?!

Heterogén számítási rendszerek gyakorlatok (2018.)

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Egyszerű RISC CPU tervezése

Négyprocesszoros közvetlen csatolású szerverek architektúrája:

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Pénzügyi algoritmusok

HLSL programozás. Grafikus játékok fejlesztése Szécsi László t06-hlsl

LabView Academy. 4. óra párhuzamos programozás

Google Summer of Code OpenCL image support for the r600g driver

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Memóriák - tárak. Memória. Kapacitás Ár. Sebesség. Háttértár. (felejtő) (nem felejtő)

Párhuzamos és Grid rendszerek

OpenCL Kovács, György

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

2. Generáció ( ) 3. Generáció (2001) NVIDIA TNT2, ATI Rage, 3dfx Voodoo3. Klár Gergely

SAT probléma kielégíthetőségének vizsgálata. masszív parallel. mesterséges neurális hálózat alkalmazásával

Programozás II. 2. Dr. Iványi Péter

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

GPU Lab. 14. fejezet. OpenCL textúra használat. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

OpenGL Compute Shader-ek. Valasek Gábor

Számítógépek felépítése

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Kivételkezelés a C++ nyelvben Bevezetés

KUTATÁSOK INFORMATIKAI TÁMOGATÁSA. Dr. Szénási Sándor

Grafikus processzorok általános célú programozása (GPGPU)

Java programozási nyelv 4. rész Osztályok II.

Programozás alapjai II. (7. ea) C++

Laborsegédlet 3. Labor

A programozás alapjai

Adat- és feladat párhuzamos modell Az ISO C99 szabvány részhalmaza

AliROOT szimulációk GPU alapokon

Párhuzamos és Grid rendszerek

Párhuzamos és Grid rendszerek. Áttekintés. Szálak. Eddig általános eszközöket láttunk, melyek

Stack Vezérlés szerkezet Adat 2.

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Java II. I A Java programozási nyelv alapelemei

Pénzügyi algoritmusok

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Matematikai és Informatikai Intézet. 4. Folyamatok

Bevitel-Kivitel. Eddig a számítógép agyáról volt szó. Szükség van eszközökre. Processzusok, memória, stb

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Klár Gergely 2010/2011. tavaszi félév

Feladatlap: Számítógép összetevők keresése

Objektumorientált Programozás III.

Ismétlés: Moore törvény. Tranzisztorok mérőszáma: n*százmillió, n*milliárd.

Informatika el adás: Hardver

Grafikus csővezeték és az OpenGL függvénykönyvtár

1. Az utasítás beolvasása a processzorba

ARM Cortex magú mikrovezérlők

GPU alkalmazása az ALICE eseménygenerátorában

Szenzorhálózatok programfejlesztési kérdései. Orosz György

GPGPU és számítások heterogén rendszereken

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Átírás:

Párhuzamos és Grid rendszerek (10. ea) GPGPU Szeberényi Imre BME IIT <szebi@iit.bme.hu> Az ábrák egy része az NVIDIA oktató anyagaiból és dokumentációiból származik. Párhuzamos és Grid rendszerek BME-IIT Sz.I. M Ű E G Y E T E M 1 7 8 2 2013.04.15. - 1 -

Általános célú GPU A programozható vertex és fragment shaderek beépítésével általános célú eszközzé vált. Vektorprocesszor (SIMD), de pipeline egységek is vannak benne (MISD). Jellemzően SIMD Programozás: CUDA, OpenCl, Cg, Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 2 -

Egy példa NVIDIA Quadro FX5800 grafikus kártya PCIe x16 240 CUDA mag 4 GB DDR3 78 GFlos double 933 Gflops single 189 W 300Millió háromszög / sec NVIDIA CUDA Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 3 -

Compute Unified Device Arch. SM MEM SM MEM SM MEM SM MEM Global memory Multiprocessor SMEM M Core PCIe Threadblock Host CPU Per-block Shared Memory Memory Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 4 -

CUDA modell Ún. thread modell (SIMT) A szálak ütemezésével nem kell a programozónak foglalkozni. Elrejti a konkrét architektúrát Támogatja a heterogén feldolgozás (CPU+GPU) Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 5 -

Grid-be szervezett szálak Many blocks of threads... SM MEM SM MEM SM MEM SM MEM Global Memory Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 6 -

Block ID & Thread ID Minden szálnak és blokknak van egyedi azonosítója. Block ID: 1D v 2D Thread ID: 1D, 2D, v. 3D griddim, blockidx blockdim, threadidx Host Kernel 1 Kernel 2 Device Grid 1 Grid 2 Block (0, 0) Block (0, 1) Block (1, 0) Block (1, 1) Block (1, 1) (0,0,1) (1,0,1) (2,0,1) (3,0,1) Thread (0,0,0) Thread (1,0,0) Thread (2,0,0) Thread (3,0,0) Thread (0,1,0) Thread (1,1,0) Thread (2,1,0) Thread (3,1,0) Courtesy: NDVIA Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 7 -

Szálak kommunikációja Szálak párhuzamosan futnak. Sorrendjük nem meghatározható Csak egy blokban levő szálak tudnak kommunikálni egymással. A blokkok futási sorrendje nem meghatározott. warp általában 32 szál Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 8 -

Host kommunikáció Kernel 0 Kernel 1... Per-device Global Memory... Sequential Kernels Host memory cudamemcpy() Device 0 memory Device 1 memory Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 9 -

C nyelv kiegészítései Függvény típus módósítói: global void my_kernel() { } device float my_device_func() { } Változók típusmódosítói:: constant float my_constant_array[32]; shared float my_shared_array[32]; Beépített változók: dim3 griddim; // Grid dimension dim3 blockdim; // Block dimension dim3 blockidx; // Block index dim3 threadidx; // Thread index Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 10 -

C/C++ megkötések Kernel kód csak a GPU memóriáját éri el Nem lehet rekurzió Nincs változó argumentumszám Nincs static Nincs dinamikus polimofrizmus Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 11 -

Függvény deklaráció device float DeviceFunc() global void KernelFunc() host float HostFunc() Hol hajtódik végre? device device host Honnan hívható? device host host Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 12 -

Memória elérés Minden thread tudja: Írni/olvasni a thread regisztereket Írni/olvasni a lokalis memóriát Írni/olvasni a shared memóriát Írni/olvasni a globális memóriát Olvasni a konstans memóriát Host Grid Block (0, 0) Block (1, 0) Shared Memory Shared Memory Registers Registers Registers Registers Thread (0, 0) Thread (1, 0) Thread (0, 0) Thread (1, 0) Global Memory Constant Memory Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 13 -

Változó helye Variable declaration Memory Scope Lifetime int var; register thread thread int array_var[10]; local thread thread shared int shared block block shared_var; device int global grid application global_var; constant int constant grid application constant_var; Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 14 -

Elérés sebessége Variable declaration Memory Penalty int var; register 1x int array_var[10]; local 100x shared int shared shared_var; 1x device int global 100x global_var; constant int constant constant_var; 1x Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 15 -

Példa Vektor négyzetgyöke Bemenet/kimenet: input, output vektor Host program Device program Threadblock Per-block Shared Memory Memory Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 16 -

Példa (sqrt #1) // Device code global void sqrtvec(const double* in, } double* out, int N) { int i = blockdim.x * blockidx.x + threadidx.x; if (i < N) out[i] = sqrt(in[i]); int main() {... sqrtvec<<<20, 256>>>(d_inp, d_res, SIZE);... } Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 17 -

Példa (sqrt #2) int main() { double *h_inp, *h_res, *d_inp, *d_res; size_t size = 100 * sizeof(double); h_inp = (double*)malloc(size); h_res = (double*)malloc(size); cudamalloc((void**)&d_inp, size); cudamalloc((void**)&d_res, size); for (int i = 0; i < SIZE; i++) h_inp[i] = i*i; cudamemcpy(d_inp, h_inp, size, cudamemcpyhosttodevice); sqrtvec<<<1, 100>>>(d_inp, d_res, 100); cudamemcpy(h_res, d_res, size, cudamemcpydevicetohost);... cudatreadexit(); return 0; } Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 18 -

Versenyhelyzet threadid:0 threadid:1917 vector[0] = 5; vector[0] = 1;...... a = vector[0]; a = vector[0]; Mi az a változó értéke a 0. ill. 191. szálban? Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 19 -

Atomi művelet atomic{add, Sub, Exch, Min, Max, Inc, Dec, CAS, And, Or, Xor} CAS: int compare_and_swap(int* register, } int oldval, int newval){ int old_reg_val = *register; if(old_reg_val == oldval) *register = newval; return old_reg_val; Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 20 -

Szinkronizációs veszély global void global_max(int* values, int* gl_max){ } int i = threadidx.x + blockdim.x * blockidx.x; int val = values[i]; atomicmax(gl_max,val); A gyakori közös memória hozzáférés miatt a szálak elakadnak, szinkronozódnak. Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 21 -

Kicsit jobb max. keresés global void global_max(int* values, int* max, int *regional_maxes, int num_regions) { int i = threadidx.x + blockdim.x * blockidx.x; int val = values[i]; int region = i % num_regions; if(atomicmax(&reg_max[region],val) < val){ atomicmax(max,val); } } Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 22 -

Vezérlés divergencia A ClearSpeed-nél már megismert probléma, ami rontja a párhuzamosítás hatékonságát. Branch Path A Path B Párhuzamos és Grid rendszerek BME-IIT Sz.I. 2013.04.15. - 23 -