na biurku Wojciech De bski 22.01.2015
- co to jest? High Performance Computing most generally refers to the practice of aggregating computing power in a way that delivers much higher performance than one could get out of a typical desktop computer or workstation in order to solve large problems in science engineering or business. pp.1
Historia (Supercomputing) pp.2
Obliczenia szeregowe i ro wnoległe podział według M. Flyna Klasyczny komputer for(i=0;i<n;i++) c[i] = a[i] + b[i]; c[0] = a[0] + b[0]; c[1] = a[1] + b[1];... c[n] = a[n] + b[n]; pp.3
Obliczenia szeregowe i ro wnoległe Image processing (GPU) a a[0] a[1] a[2] a[3] a[4] = ==> a * 0.5 a[0]*0.5 a[1]*0.5 a[2]*0.5 a[3]*0.5 a[4]*0.5 pp.4
Obliczenia szeregowe i ro wnoległe Analiza sygnalow (procesory DSP) a b = = sin(x) cos(x) a[0]=sin(x) b[0]=cos(x) a[1]=sin(x) b[1]=cos(x) a[2]=sin(x) b[2]=cos(x)... pp.5
Obliczenia szeregowe i ro wnoległe Symulacja pola falowego pp.6
Dwie podstawowe konfiguracje superkomputero w F systemy rozproszone - wiele niezalez nych jednostek obliczeniowych komunikujacych sie ze soba poprzez zewnetrzn a siec F systemy upakowane gdzie wszystkie jednostki obliczeniowe dziela wspo lna pamiec przez kto ra wymieniaja informacje pp.7
Architektury komputero w - wspo lna pamiec pp.8
Architektury komputero w - oddzielna pamiec pp.9
Klastry obliczeniowe - klasyczne rozwiazanie z dzielona pamieci a pp.10
Architektury komputero w - hybrydy pp.11
Organizacja klastro w pp.12
MPI - Message Passing Interface pp.13
MPI - Message Passing Interface ro wnoległe dodanie wektoro w ~c = ~a + ~b for(i=0;i<n;i++) c[i]= a[i] + b[i] for (i=0;i<=nx;i++) MPI_Send(&c33[i][0] nz+1 MPI_FLOAT dest21 MPI_COMM_WORLD); for (i=0;i<=nx;i++) MPI_Send(&c44[i][0] nz+1 MPI_FLOAT dest21 MPI_COMM_WORLD);.. for (i=0;i<=nxs;i++) sxm[i][0]=xs+(float)i*dxs;.. for (dest=1;dest<=all_proc-1;dest++) { MPI_Recv(&pom 1 MPI_INT dest101 MPI_COMM_WORLD &status); printf ("Proc:%d Transfer succeed!\n"pom);} pp.14
Shared memory model pp.15
Shared memory + heterogeneous environment pp.16
GPGPU - general purpose graphic processing units pp.17
GPGPU - Tesla K80 F 4992 procesory potokowe F pamiec 24Gb F zegar 1 GHz F wydajnos c 6 Tflops pp.18
Cel seminarium - pytania 1. Jak wykorzystac wielo-rdzeniowos c naszych PC to w? 2. Jak wykorzystac posiadane karty graficzne jako akceleratory obliczeniowe (GPGPU)? bez koniecznos ci stawania sie zawodowym programista uczenia nowego jezyka programowa nia budowy kart graficznych itp. pp.19
Odpowiedz Wykorzystac modele programowania ro wnoległego dla architektury wspo łdzielonej pamieci: F OpenMP3 F OpenMP4 pp.20
Wsparcie dla OpenMP F kompilator gcc ver. 3.* ver 4.* (OpenMP3) F kompilator gcc ver 5.* (styczen 2015) (OpenMP4) pp.21
Co to jest OpenMP? OpenMP (ang. Open Multi-Processing) jest interfejs programowania aplikacji (API) umoz liwiaja cy tworzenie programo w komputerowych dla systemw wieloprocesorowych z pamieci Składa sie ze a dzielona. zbioru dyrektyw kompilatora bibliotek oraz zmiennych s rodowiskowych majacych wpływ na sposb wykonywa nia programu. pp.22
Informacje o OpenMP: http://openmp.org/wp/ pp.23
Model programowania ro wnoległego OpenMP F Zadanie dzielone jest pomiedzy watki F Watki do obliczen uz ywaja prywatnych kopii zmiennych kto re sa niedostepne dla innych watko w F Watki komunikuja sie przez zmienne wspo łdzielone (zmienne shared) lub dodatkowe mechanizmy synchronizacji watko w (np. tzw barrier) F niebezpieczen stwo tzw. data race pp.24
Podstawowa struktura: watki f or(i = 0; i < N ; i + +)c[i] = a[i] + b[i] f or(i = 0; i < 10; i + +) f or(i = 11; i < 20; i + +) f or(i = 21; i < 30; i + +) c[i] = a[i] + b[i] c[i] = a[i] + b[i] c[i] = a[i] + b[i] pp.25
Uz ywanie pamieci pp.26
Co musi zrobic programista F podac kto ra czes c ma byc zro wnoleglona F okres lic kto re zmienne sa prywatne dla kaz dego z watko w F okres lic warunki synchronizacji Reszte pracy wykona za nas kompilator! pp.27
Przykład petla for #include<stdio.h> #include<math.h> #define NS 10000 int main() { double sum=0x; long unsigned int i; #pragma omp parallel for private (i) reduction(+:sum) for (i=0; i<ns; i++) sum+=exp(-i*i); printf("sum=%g\n"sum); return; } pp.28
Kompilacja: gcc e1.c -fopenmp -lm -o e1 pp.29
Przykład 2 Uwaga na hazard czasowy: nigdy nie wiadomo kto ry watek skon czy prace pierwszy pp.30
KONIEC Prepared: 21 stycznia 2015 W prezentacji wykorzystano materiały z Wikipedii oraz Nvidi pp.31