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



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

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

Párhuzamos és Grid rendszerek

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

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

Magas szintű optimalizálás

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

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

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

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

Jurek Zoltán, Tóth Gyula

CUDA haladó ismeretek

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

4. Funkcionális primitívek GPUn

GPGPU-k és programozásuk

Flynn féle osztályozás Single Isntruction Multiple Instruction Single Data SISD SIMD Multiple Data MISD MIMD

GPU-Accelerated Collocation Pattern Discovery

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

HP-SEE projekt eredményei

Grafikus csővezeték 1 / 44

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

ISA szimulátor objektum-orientált modell (C++)

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

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

Párhuzamos programozási platformok

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

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

Párhuzamos programozási platformok

Big Data. A CERN, mint a. egyik bölcsője... Barnaföldi Gergely Gábor. Berényi Dániel & Biró Gábor & Nagy-Egri Máté Ferenc & Andrew Lowe

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

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

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

GPGPU. Architektúra esettanulmány

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

LabView Academy. Alapismeretek II.

Bevezetés a programozásba Előadás: A const

Programozás 5. Dr. Iványi Péter

Győri HPC kutatások és alkalmazások

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

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

Párhuzamos programok futásának kiértékelése Scalasca profiler segítségével

Hozzáférés a HPC-hez, kezdő lépések (előadás és demó)

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

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

Java és web programozás

FIR SZŰRŐK TELJESÍTMÉNYÉNEK JAVÍTÁSA C/C++-BAN

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

Bevezetés a párhuzamos programozási koncepciókba

Az MTA Cloud a tudományos alkalmazások támogatására. Kacsuk Péter MTA SZTAKI

GPU-k a gravitációs hullám kutatásban

Assembly. Iványi Péter

Introduction to 8086 Assembly

Eichhardt Iván GPGPU óra anyagai

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

Bevezetés a programozásba. 9. Előadás: Rekordok

Párhuzamos és Grid rendszerek

Programozas 1. Strukturak, mutatok

Eichhardt Iván GPGPU óra anyagai

Computer Architecture

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

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

OpenCL Kovács, György

AliROOT szimulációk GPU alapokon

Nemlineáris optimalizálási problémák párhuzamos megoldása grafikus processzorok felhasználásával

MATLAB alapismeretek I.

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

GPU Lab. 5. fejezet. A C++ fordítási modellje. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

Nagy adattömbökkel végzett FORRÓ TI BOR tudományos számítások lehetőségei. kisszámítógépes rendszerekben. Kutató Intézet

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Flynn-féle architektúra modell. Párhuzamos és Grid rendszerek (8. ea) egy vektorprocesszor. Belső felépítés. ClearSpeed gyorsító kártya MTAP

Occam 1. Készítette: Szabó Éva

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

NIIFI HPC Szolgáltatás

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Hozzunk ki többet abból amink van. Fehér Lajos

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

Az NIIF új szuperszámítógép infrastruktúrája Új lehetőségek a kutatói hálózatban

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

A számítógépek felépítése. A számítógép felépítése

Utolsó módosítás:

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

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

Párhuzamos és Grid rendszerek

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

Alternatív processz állapot és statisztika lekérdezési módszer a Linux kernelben

Programozási nyelvek (ADA)

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

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Rőczei Gábor Szeged, Networkshop

Pénzügyi algoritmusok

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

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Hitachi Flash Újdonságok. Szokol Zsolt Senior Solution Consultant 2016 március

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

Átírás:

GPU, mint szuperszámítógép II. ( 1 ) Grafikus kártyák, mint olcsó szuperszámítógépek - II. tanuló szeminárium Jurek Zoltán, Tóth Gyula SZFKI, Röntgendiffrakciós csoport

GPU, mint szuperszámítógép II. ( 2 ) Vázlat I. Motiváció Beüzemelés C alapok CUDA programozási modell, hardware adottságok II. Tippek (pl. több GPU egyidejű használata) Könyvtárak (cufft, cublas,...) GPU számolás CUDA programozás nélkül III. Optimalizálás...

GPU, mint szuperszámítógép II. ( 3 ) Emlékeztető

GPU, mint szuperszámítógép II. ( 4 ) Heterogén számolások Grafikus kártya ~ coprocesszor: saját processzorok saját memória host másol rá adatot host indítja a számolást rajta host visszamásolja az eredményt CUDA modell + C kiterjesztés Host computer + Device

GPU, mint szuperszámítógép II. ( 5 ) Fizikai felépítés Reg Reg Global S H A R E D N db multiprocessor (MP) ( N = 1..30.. ) M db singleprocessor(sp) / MP float: M=8 ( double: M=1 ) Single Instruction Multiple Data (SIMD) Memória: Global: lassú, ~GB Register: gyors, 16384/Block Shared: gyors, 16kB

GPU, mint szuperszámítógép II. ( 6 ) Futtatási modell Device Grid Block 0 Kernel: GPU-n futó objektum A threadek a kernelt hajtják végre Thread 0 A grid thread blockokból áll Thread 1... Thread bsize-1... Block nblck-1 Thread 0 Thread 1... Thread bsize-1 A blockok számát és méretét (execution configuration) a host alkalmazás állítja be Mindegyik thread azonosítja magát blockidx, threadidx (blockon belül), blockdim, griddim idx = blockidx.x * blockdim.x + threadidx.x

GPU, mint szuperszámítógép II. ( 7 ) Futtatási modell Pl. 512 szál / Grid blockdim.x griddim.x 32 16 Grid dim.: 1 vagy 2 Block dim.: 1, 2 vagy 3 64 8 threadidx., threadidx.y, threadidx.z Pl. 64 szál / Block blockdim.x blockdim.y 64 1 32 2

GPU, mint szuperszámítógép II. ( 8 ) GPU memória Mem. láthatóság sebesség Global grid lassú Shared block gyors Register thread gyors

GPU, mint szuperszámítógép II. ( 9 ) Fizikai végrehajtás Egy Blockot egy MP számol Minden Block SIMD csoportokra van osztva: warp a warp threadjei fizikailag egyszerre hajtódnak végre a warp (ma) 32 szálból áll (0-31,32-63,...)

GPU, mint szuperszámítógép II. ( 10 ) CUDA kódszerkezet device void mykernel(float *v, int D, float c) { } int main(void) { cudamallochost((void**) &h, s); cudamalloc( (void**) &d, s) ; cudamemcpy( d, h, s, cudamemcpyhosttodevice); dim3 gridd (30); dim3 blockd (16,16); mykernel <<< gridd, blockd >>> (d, D, 2.0f); cudamemcpy( h, d, s, cudamemcpydevicetohost); cudafreehost(h); cudafree(d); }

GPU, mint szuperszámítógép II. ( 11 ) GPU memória Memória - foglalás Global: pl. host (CPU) kódrészben: cudamalloc( (void**)&g, memsize); Register: a kernelben ( device függvény) pl. változó deklarálása: float r; Shared: kernelben pl. shared float s[1000][4];

GPU, mint szuperszámítógép II. ( 12 ) GPU memória Memória - adattranszfer Értékadással, pl. Global - Register r = g[2] ; Global - Shared s[0][0] = g[1] ; Shared - Global g[0] = s[0][0] ;

GPU, mint szuperszámítógép II. ( 13 ) Tippek

GPU, mint szuperszámítógép II. ( 14 ) Tippek nvcc flagek: -emu : emuláció CPU-n (- printf,debug) -keep : megőrzi a fordítás közbenső fájljait -arch sm_13 ; -arch compute_13 : double support -arch sm_10 ; -arch compute_10 : lekorlátozás Több végrehajtási konfiguráció (számítási háló, computational grid) kipróbálása (griddim, blockdim) Hibakezelés (ld. Supercomputing for the masses)

GPU, mint szuperszámítógép II. ( 15 ) Tippek Profiler (cudatoolkit) Debugger (cudatoolkit) Kártyalefagyás esetén: kill -9 application PID várni perceket root-ként: rmmod nvidia ; modprobe nvidia lib készítése (ld.: példaprogramok)

GPU, mint szuperszámítógép II. ( 16 ) Tippek: időmérés GPU-n: cudaevent_t start, stop; cudaeventcreate( &start ) ; cudaeventcreate( &stop ) ; cudaeventrecord( start, 0 ); { } cudaeventrecord( stop, 0 ); cudaeventelapsedtime( &elapsedtimeinms, start, stop); ld. pl. bandwidthtest.cu forráskód (SDK)

GPU, mint szuperszámítógép II. ( 17 ) Tippek: időmérés CPU-n: struct timespec start, end; clock_gettime(clock_realtime, &start); { } cudathreadsynchronize(); //non-blocking GPU kernel! clock_gettime(clock_realtime, &stop); time_elapsed = (stop.tv_sec - start.tv_sec) + (double)(stop.tv_nsec - start.tv_nsec) / 1000000000 ); Megj: GPU kernel aszinkron végrehajtás - CPU/GPU párhuzamos számolás

GPU, mint szuperszámítógép II. ( 18 ) Tippek: több kártya egy gépben OpenMP + CUDA

GPU, mint szuperszámítógép II. ( 19 ) Tippek: több kártya egy gépben int num_gpus, gpu_id, cpu_thread_id, num_cpu_threads; cudagetdevicecount(&num_gpus); omp_set_num_threads(num_gpus); #pragma omp parallel private(cpu_thread_id,gpu_id) { cpu_thread_id = omp_get_thread_num(); num_cpu_threads = omp_get_num_threads(); cudasetdevice(cpu_thread_id % num_gpus); cudagetdevice(&gpu_id); dim3 gpu_threads( ); dim3 gpu_blocks( ); cuda_kernel <<< gpu_blocks,gpu_threads >>> (d,x); } https://www.wiki.ed.ac.uk/display/ecdfwiki/use+multiple+gpu+devices+with+openmp+and+cuda

GPU, mint szuperszámítógép II. ( 20 ) Portland CUDA fortran http://www.pgroup.com/resources/cudafortran.htm

GPU, mint szuperszámítógép II. ( 21 ) Könyvtárak

GPU, mint szuperszámítógép II. ( 22 ) Könyvtárak Optimalizált könyvtárak használata jelentősen felgyorsíthatja kódfejlesztésünket. Pl. - BLAS (Basic Linear Algebra Subprograms) - FFTW (Fast Fourier Transform)

GPU, mint szuperszámítógép II. ( 23 ) Könyvtárak Optimalizált könyvtárak használata jelentősen felgyorsíthatja kódfejlesztésünket. Pl. - BLAS (Basic Linear Algebra Subprograms) - FFTW (Fast Fourier Transform) CUDA megvalósítás (Toolkit része): - CUBLAS - CUFFT De jól át kell gondolni, hogyan használjuk!

GPU, mint szuperszámítógép II. ( 24 ) Pl. CUBLAS Alapmodell Létrehozzuk a vektor/mátrix objektumokat a GPU-n (host - device adattranszfer) Meghívjuk a CUBLAS függvényeket (számolás GPU-n) Visszaolvassuk az eredményeket (device - host adattranszfer)

GPU, mint szuperszámítógép II. ( 25 ) Pl. CUBLAS GPU számolás vs. Host-device adattranszfer N elemű vektor (v), N*N elemű mátrix (M) esetén: # aritm. # adat#aritm/ műveletek transzfer átvitt adat c*v, v*v O(N) O(N) O(1) M*v O(N2) O(N2) O(1) M*M O(N3) O(N2) O(N)

GPU, mint szuperszámítógép II. ( 26 ) Pl. CUBLAS GPU számolás vs. Host-device adattranszfer N elemű vektor (v), N*N elemű mátrix (M) esetén: #aritm/ átvitt adat c*v, v*v O(1) M*v O(1) M*M O(N) O(1): a teljesítmény erősen függ host- dev sávszélességtől (4GB/s -> csak ~GFLOP) O(N): jelentős gyorsulás érhető el

GPU, mint szuperszámítógép II. ( 27 ) Pl. CUBLAS Összefoglalva: O(1) aritm./transzfer esetén a cél minél tovább a GPU-n tartani az adatokat, minél több műveletet végezni rajta O(N) aritm./transzfer esetén nagy gyorsulás várható; célszerű az O(1) műveleteket is Megj.: Thunking (auto mem. alloc, cpy + GPUcalc): egyszerűbb használat, de jelentős lassulás (~2-4x)

GPU, mint szuperszámítógép II. ( 28 ) GPU számolás CUDA programozás nélkül

GPU, mint szuperszámítógép II. ( 29 ) Portland accelerator int main(void) { #include <accelmath.h> int main(void) { #pragma acc region {... } {... } } }

GPU, mint szuperszámítógép II. ( 30 ) Portland accelerator Fordítás: pgcc sample.c -O3 -ta=nvidia -Minfo -fast

GPU, mint szuperszámítógép II. ( 31 ) Portland accelerator Regularizált gravitációs párkölcsönhatás #pragma acc region { for (i=0; i<n; i=i+1) { for (j=i+1; j<n; j=j+1) { dx0 = xi[i][0] - xi[j][0]; dx1 = xi[i][1] - xi[j][1]; dx2 = xi[i][2] - xi[j][2]; yyy = (dx0*dx0 + dx1*dx1) + (dx2*dx2+eps2) ; xxx = - m[i]*m[j] / ( sqrtf(yyy) * yyy ) ; ai[i][0] += xxx * dx0 ; ai[i][1] += xxx * dx1 ; ai[i][2] += xxx * dx2 ; ai[j][0] -= xxx * dx0 ; ai[j][1] -= xxx * dx1 ; ai[j][2] -= xxx * dx2 ; } } }

GPU, mint szuperszámítógép II. ( 32 ) Portland accelerator Regularizált gravitációs párkölcsönhatás Fordítási üzenet: 237, Accelerator restriction: size of the of an array depends on values computed in 238, Accelerator restriction: size of the of 'm' is unknown Accelerator restriction: size of the of 'xi' is unknown Accelerator restriction: one or more have unknown size Loop not vectorized: data dependency GPU copy this loop GPU copy GPU copy arrays

GPU, mint szuperszámítógép II. ( 33 ) Portland accelerator Regularizált gravitációs párkölcsönhatás #pragma acc region { for (i=0; i<n; i=i+1) { for (j=0; j<n; j=j+1) { dx0 = xi[i][0] - xi[j][0]; dx1 = xi[i][1] - xi[j][1]; dx2 = xi[i][2] - xi[j][2]; yyy = (dx0*dx0 + dx1*dx1) + (dx2*dx2+eps2) ; xxx = - m[i]*m[j] / ( sqrtf(yyy) * yyy ) ; ai[i][0] += xxx * dx0 ; ai[i][1] += xxx * dx1 ; ai[i][2] += xxx * dx2 ; // ai[j][0] -= xxx * dr[0] ; // ai[j][1] -= xxx * dr[1] ; // ai[j][2] -= xxx * dr[2] ; } } }

GPU, mint szuperszámítógép II. ( 34 ) Portland accelerator Regularizált gravitációs párkölcsönhatás Fordítási üzenet: 235, Generating copyin(xi[0:natom-1][0:2]) Generating copyin(m[0:natom-1]) Generating copyout(ai[0:natom-1][0:2]) Generating compute capability 1.0 kernel Generating compute capability 1.3 kernel 237, Loop is parallelizable Accelerator kernel generated 237, #pragma acc for parallel, vector(32) Non-stride-1 accesses for array 'xi' Non-stride-1 accesses for array 'ai' 244, Complex loop carried dependence of 'ai' prevents parallelization Loop carried reuse of 'ai' prevents parallelization Inner sequential loop scheduled on accelerator

GPU, mint szuperszámítógép II. ( 35 ) Portland accelerator Regularizált gravitációs párkölcsönhatás Futásidők (N=65536) Idők [s] 1 CPU PGI acc. (trivial) CUDA kód 52 5 (~10x) 0.27 (~200x) A CPU kód szervezésétől erősen függhet a GPUs gyorsítás hatékonysága! Irodalom pl.: http://www.pgroup.com/resources/accel.htm http://www.pgroup.com/lit/articles/insider/v1n1a1.htm http://www.pgroup.com/lit/articles/insider/v1n2a1.htm http://www.pgroup.com/lit/articles/insider/v1n3a1.htm

GPU, mint szuperszámítógép II. ( 36 ) HMPP Workbench a directive-based compiler for hybrid computing

GPU, mint szuperszámítógép II. ( 37 ) Magasabb szintü nyelvek + CUDA Természetes a CUDA kiterjesztés, ha lehetőség van C-ben írt modulok használatára Python PyCUDA Matlab - mex - nvmex http://developer.nvidia.com/object/matlab_cuda.html - GPUmat / Jacket Ügyelni kell a nyelvek közötti adatátvitel többletidejére!

GPU, mint szuperszámítógép II. ( 38 ) Matlab + CUDA GPUMat

GPU, mint szuperszámítógép II. ( 39 ) Matlab + CUDA GPUMat

GPU, mint szuperszámítógép II. ( 40 ) Újdonság: nvidia Fermi http://developer.nvidia.com/object/gpucomputing.html