Download - Paralelno programiranje II
![Page 1: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/1.jpg)
Paralelno programiranje II
Analiza zavisnosti
Struktura algoritma
Podržavajuće strukture
Komunikacioni šabloni
1
![Page 2: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/2.jpg)
4 Korakaparalelizacijeprograma
2
Sekvencijalna obrada
1. dekompozicija
2. dodela
p0 p1
p2 p3
3. orkestracija
p0 p1
p2 p3
4. preslikavanje
J0 J1
J2 J3
![Page 3: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/3.jpg)
Evo algoritma.Gde je paralelizam?
Dekompozicija zadataka
Paralelizam u aplikaciji
Dekompozicija podataka
Ista obrada puno podataka
Dekompozicija protočne obrade
Linije sklapanja podataka
Lanci proizvođača-potrošača
3
VLD
split
ZigZag
IQuantization
IDCT & Saturation
MotionVectorDecode
VLD
join
PictureReorder
ColorConversion
Display
MotionCompensationMotionCompensation
MotionCompensation
![Page 4: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/4.jpg)
Analiza zavisnosti
Ako su data dva zadatka, kako odrediti da li se oni mogu sigurno/ispravno izvršiti paralelno?
4
![Page 5: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/5.jpg)
Bernštajnov uslov
Ri skup mem. lokacija koje čita zadatak Ti (ulaz)
Wj skup lokacija u koje piše zadatak Tj (izlaz)
Dva zadatka, T1 i T2, mogu biti paralelna ako:
Ulaz T1 nije deo izlaza T2
Ulaz T2 nije deo izlaza T1
Izlazi T1 i T2 se ne preklapaju
5
![Page 6: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/6.jpg)
Primer: Da li ova dva zadatka mogu biti paralelna?
6
R1={x,y}, W1={a}, R2={x,z}, W2={b}
R1 ∩ W2 = {x,y} ∩ {b} = Ø
R2 ∩ W1 = {x,z} ∩ {a} = Ø
W1 ∩ W2 = {b} ∩ {a} = Ø
T1
a = x + y
T2
b = x + z
![Page 7: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/7.jpg)
Četiri projektantska prostora
Izražavanje algoritma
I Pronalaženje paralelizma
Izlaganje konkurentnih zadataka
II Struktura Algoritma
Preslikavanje zadataka na procese radi korišćenja paralelniharhitektura
Konstruisanje programa
III Pomoćne strukture
Šabloni koda i struktura podataka
IV Izvedbeni mehanizmi
Mehanizmi niskog nivoa, koji se koriste za pisanje paralelnihprograma
7
![Page 8: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/8.jpg)
Projektantski prostor:Struktura algoritma
Sledeći korak je preslikavanje zadataka na jedinice izvršenja (procesi/niti)
Važno je razmotriti
Broj jedinica izvršenja koje podržava ciljna platforma
Cenu deljenja informacije između jedinica izvršenja
Izbegavati suvišno ograničavanje implementacije
Radi dobro na ciljnoj platformi
Dovoljno fleksibilna da se lako adaptira za različite arhitekture
8
![Page 9: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/9.jpg)
Glavni princip organizovanja
Kako odrediti strukturu algoritma, koja predstavlja preslikavanje zadataka na jedinice izvršenja?
Paralelizam obično određuje glavni princip organizovanja
Organizovanje po zadacima
Organizovanje po dekompoziciji podataka
Organizovanje po toku podataka
9
![Page 10: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/10.jpg)
Organizacija po zadacima
Rekurzivni program => podeli i zavladaj
Nerekurzivni program => paralelizam zadataka
10
Rekurzivan?Podeli i
zavladajda
Paralelizam
zadataka
![Page 11: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/11.jpg)
Paralelizam zadataka
Praćenje zraka (ray tracing)
Obrada za svaki zrak je odvojena i nezavisna
Dinamika molekula
Obrada neograničenih sila, neke zavisnosti
Zajednički faktori
Zadaci su pridruženi iteracijama petlje
Zadaci su uglavnom poznati na početku obrade
Svi zadaci se ne moraju završiti da bi se došlo do konačnog rešenja
11
![Page 12: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/12.jpg)
Podeli i zavladaj (divide & conquer)
Za rekurzivni program: podeli i zavladaj
Podproblemi ne moraju biti uniformni (iste veličine)
Može zahtevati dinamičko uravnoteženje opterećenja
12
problem
podproblem podproblem
međurezultat međurezultat
rešenje
reši
podproblem
reši
podproblem
reši
podproblem
reši
podproblem
![Page 13: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/13.jpg)
Organizovanje po podacima
Operacije na centralnoj strukturi podataka
Nizovi i linearne strukture podataka
Rekurzivne strukture podataka
13
Rekurzivni?Rekurzivni
podacida
Geometrijska
dekompozicija
![Page 14: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/14.jpg)
Geometrijska dekompozicija
Simulator gravitacionih tela
Izračunati sileizmeđu parovatela i ažurirati sile na pojedina tela
14
pos
acc
VEC3D acc[NUM_BODIES] = 0;
for (i = 0; i < NUM_BODIES - 1; i++) {
for (j = i + 1; j < NUM_BODIES; j++) {
// Displacement vector
VEC3D d = pos[j] – pos[i];
// Force
t = 1 / sqr(length(d));
// Components of force along displacement
d = t * (d / length(d));
acc[i] += d * mass[j];
acc[j] += -d * mass[i];
}
}
![Page 15: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/15.jpg)
Rekurzivni podaci
Obrade nad listama, stablima, ili grafovima
Obično se pokazuje da je jedini način da se reši problem, da se sekvencijalno ide kroz struktu podataka
Ali, pojavljuju se i prilike da se operacije preoblikuju tako da se izloži paralelizam
15
![Page 16: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/16.jpg)
Primer rekurzivnih podataka:Pronalaženje korena
Ako je data šuma usmerenih stabala sa korenom, pronađi koren stabla koje sadrži čvor
Paralelni pristup: za svaki čvor pronađi prethodnikovog prethodnika, ponavljaj dok ima izmena
O(log n) naspram O(n)
16
1
2
3
4
5
6
7
1
2
3
4
5
6
7
1
2
3
4
5
6
7
![Page 17: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/17.jpg)
Kompromis:Količina posla naspram paralelizma
Paralelno prestruktuiranje algoritma za pronalaženje korena dovodi do O(log n) naspram O(n) za sekvencijalan pristup
Većina strategija zasnovanih na ovoj strategiji dopuštaju povećanje ukupne količine posla radi skraćenja vremena izvršenja na osnovu iskorišćenog paralelizma
17
![Page 18: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/18.jpg)
Organizacija po toku podataka
U nekim aplikacionim domenima, tok podataka određuje redosled zadataka
Regularan, u jednom smeru, uglavnom stabilan tok
Iregularan, dinamički, nepredvidivi tok podataka
18
Regularan?Protočna
obradada
Koordinacija
na bazi
događaja
![Page 19: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/19.jpg)
Propusnost protočne obrade naspram kašnjenja (latency)
Paralelizam protočne obrade je ograničen brojem stepeni protočne obrade
Radi dobro ako je vreme punjenja i pražnjenja protočne obrade malo u odnosu na vreme obrade
Mera performanse je obično propusnost
Stopa kojom se podaci pojavljuju na kraju protočne obrade (npr. broj okvira u sekundi)
Kašnjenje protočne obrade je važno za aplikacije u realnom vremenu
Vremenski interval od ulaza podataka u protočnu obradu do izlaza
19
![Page 20: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/20.jpg)
Koordinacija zasnovana na događajima
U ovom šablonu, interakcija zadataka radi obrade podataka se dešava u nepredvidivim intervalima vremena
U aplikacijama koje koriste ovaj šablon moguća su međusobna blokiranja zadataka (deadlock)
20
![Page 21: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/21.jpg)
Podržavajuće strukture
SPMD (Single Program Multiple Data)
Paralelizam petlje
Vodeći/Radnik (Master/Worker)
Grananje/Pridruživanje (Fork/Join)
21
![Page 22: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/22.jpg)
SPMD šablon
Jedan program više podataka: stvara programe iz jednog izvornog koda, koji se izvršavaju na više procesora
Inicijalizacija
Dobavljanje jedinstvenog identifikatora
Izvršenje istog programa na svakom procesoru
Identifikator i ulazni podaci dovode do različitog ponašanja
Distribuiranje podataka
Dovršavanje (finalizacija)
22
![Page 23: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/23.jpg)
Primer SPMD:Paralelna numerička integracija
23
Računanje broja numeričkom integracijom funkcije f(x)=4/(1+x2) nad intervalom (0,1).
static long num_steps = 100000;
void main()
{
int i;
double pi, x, step, sum = 0.0;
step = 1.0 / (double) num_steps;
for (i = 0; i < num_steps; i++){
x = (i + 0.5) * step;
sum = sum + 4.0 / (1.0 + x*x);
}
pi = step * sum;
printf(“Pi = %f\n”, pi);
}
1
4
2
x
f(x)
![Page 24: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/24.jpg)
Računanje Pi sa integracijom (MPI)
24
static long num_steps = 100000;
void main(int argc, char* argv[])
{
int i_start, i_end, i, myid, numprocs;
double pi, mypi, x, step, sum = 0.0;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
MPI_BCAST(&num_steps, 1, MPI_INT, 0,
MPI_COMM_WORLD);
i_start = myid * (num_steps/numprocs)
i_end = i_start + (num_steps/numprocs)
step = 1.0 / (double) num_steps;
for (i = i_start; i < i_end; i++) {
x = (i + 0.5) * step
sum = sum + 4.0 / (1.0 + x*x);
}
mypi = step * sum;
MPI_REDUCE(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM,
0, MPI_COMM_WORLD);
if (myid == 0)
printf(“Pi = %f\n”, pi);
MPI_Finalize();
}
![Page 25: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/25.jpg)
Distribucija posla:Po bloku naspram Po ciklusu
25
static long num_steps = 100000;
void main(int argc, char* argv[])
{
int i_start, i_end, i, myid, numprocs;
double pi, mypi, x, step, sum = 0.0;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
MPI_BCAST(&num_steps, 1, MPI_INT, 0,
MPI_COMM_WORLD);
i_start = myid * (num_steps/numprocs)
i_end = i_start + (num_steps/numprocs)
step = 1.0 / (double) num_steps;
for (i = myid; i < num_steps; i += numprocs) {
x = (i + 0.5) * step
sum = sum + 4.0 / (1.0 + x*x);
}
mypi = step * sum;
MPI_REDUCE(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM,
0, MPI_COMM_WORLD);
if (myid == 0)
printf(“Pi = %f\n”, pi);
MPI_Finalize();
}
![Page 26: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/26.jpg)
SPMD izazovi
Razdeliti podatke korektno
Korektno kombinovati rezultate
Ostvariti ravnomernu raspodelu posla
Za programe koji zahtevaju dinamičko uravnoteženje opterećenja, neki drugi šablon je pogodniji
26
![Page 27: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/27.jpg)
Šablon paralelizma petlje
Mnogi programi su izraženi korišćenjem iterativnih konstrukcija
Modeli programiranja kao što je OpenMP obezbeđuju direktive za automatsku dodelu iteracija petlje pojedinim jedinicama izvršenja
Posebno dobar kada se kod ne može masovno prestruktuirati
27
#pragma omp parallel for
for(i = 0; i < 12; i++)
C[i] = A[i] + B[i];
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
i = 11
![Page 28: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/28.jpg)
Šablon vodeći/radnik (1/2)
28
AB
CD E
vodeći
C
E
AB D
izvršioci
![Page 29: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/29.jpg)
Šablon vodeći/radnik (2/2)
Posebno relevantan za probleme koji koriste paralelizam zadataka gde zadaci nemaju zavisnosti
Zastiđujuće paralelni programi (embarrissingly parallel)
Glavni izazov je određivanje kada je ceo problem obrađen (postoji potpuno rešenje)
29
![Page 30: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/30.jpg)
Šablon grananja/pridruživanja
Zadaci se stvaraju dinamički
Zadaci mogu stvoriti još zadataka
Zadacima se rukuje u skladu sa njihovim odnosima
Zadatak predak stvara nove zadatke (grananje) zatim čeka da se završe (pridruživanje) pre nego nastavi sa obradom
30
![Page 31: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/31.jpg)
Komunikacioni šabloni
Tačka-tačka (point-to-point)
Slanje svima (broadcast)
Redukcija (reduction)
31
![Page 32: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/32.jpg)
Serijska redukcija
32
Kada operator redukcije nije asocijativan
Obično ga prati slanje rezultata svima
Npr. serijsko skupljanje A[0], A[1], A[2], A[3] u čvoru koji ima A[0]:
Skupi A[1], dobija se A[0:1]
Skupi A[2], dobija se A[0:2]
Skupi A[3], dobija se A[0:3]
Kraj
![Page 33: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/33.jpg)
Redukcija zasnovna na stablu
n koraka za 2^n jedinica izvršenja
Kada je operator redukcije asocijativan
Posebno atraktivan ako je rezultat potreban samo jednom zadatku
33
A[0] A[1] A[2]
A[0:1]
+
A[3]
A[2:3]
+
+
A[0:3]
![Page 34: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/34.jpg)
Rekurzivno-udvajajuća redukcija
n koraka za 2^n jedinica izvršenja
Ako svim jedinicama izvršenja treba rezultat redukcije
34
A[0] A[1] A[2]
+
A[3]
A[0:1] A[0:1] A[2:3] A[2:3]
+ + +
+ + + +
A[0:3] A[0:3] A[0:3] A[0:3]
![Page 35: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/35.jpg)
nastavak...Rekurzivno-udvajajuća redukcija
Bolja od pristupa zasnovanog na stablu sa slanjem svima (broadcast)
Svaka jedinica izvršenja ima kopiju redukovanog rezultata na kraju n koraka
U pristupu zasnovanom na stablu sa slanjem svima
Redukcija uzima n koraka
Slanje svima ne može započeti dok se redukcija ne završi
Slanje svima uzima n koraka (zavisno od arhitekture)
O(n) naspram O(2n)
35
![Page 36: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/36.jpg)
Šabloni paralelizacije
Za kraj sažetak
36
![Page 37: Paralelno programiranje II](https://reader031.vdocuments.site/reader031/viewer/2022012021/6169b37711a7b741a34a6822/html5/thumbnails/37.jpg)
Struktura algoritma i organizacija
Šabloni se mogu komponovati hijerarhijski tako da program koristi više od jednog šablona
37
Paralelizam
zadataka
Podeli i
zavladaj
Geometrijska
dekompozicija
Rekurzivni
podaci
Protočna
obrada
Koordinacija
na bazi
događaja
SPMD **** *** **** ** *** **
Paralelizam
petlje
**** ** ***
Vodeći/
Radnik
**** ** * * **** *
Grananje/
pridruživanje
** **** ** **** ****