Download presentation
Presentation is loading. Please wait.
1
Paralelno programiranje Uvod
T. Dadić
2
Pregled Pojmovi i terminologija
Arhitektura računala s paralelnom memorijom Modeli paralelnih programa Oblikovanje paralelnih programa Primjeri paralelnih algoritama Zaključak
3
Pojmovi i terminologija: Što je paralelno izvođenje?
Tradicionalni softver je pisan za sekvencijalno izvođenje. Paralelno izvođenje je istovremena uporaba više strojnih resursa (prije svega procesora) u izračunu jedinstvenog problema – programa.
4
Pojmovi i terminologija: Zašto paralelno izvođenje?
Skraćenje vremena izračuna složenih problema Novčana ušteda : vrijeme je novac Rješenje problema memorijskog limita To je budućnost programiranja
5
Zašto paralelno izvođenje? Vrijeme izvođenja
Vrijeme potrebno za obavljanje nekog zadatka je funkcija: Moći procesora : instrukcijski skup, veličina registarskog polja, veličina cache memorije Frekvencije ciklusa Veličine radne memorije Vremena pristupa radnoj memoriji
6
Zašto paralelno izvođenje? Mooreov zakon
7
Dosegnute granice Stupanj integracije blizu fizikalnog limita
Povećanje frekvencije ciklusa zahtjeva vodeno hlađenje Rješenje: integracija više jezgri na istom čipu Potrebno: znanje paralelnog programiranja, tako da se iskoriste hardverske mogućnosti
8
Pojmovi i terminoligija: Flynnova klasična taksonomija
Razlikovanje višeprocesne arhitekture prema operacijama i podacima SISD – Single Instruction, Single Data SIMD – Single Instruction, Multiple Data MISD – Multiple Instruction, Single Data MIMD – Multiple Instruction, Multiple Data
9
Flynnova klasična taksonomija: SISD
Slijedno Aktivna je samo jedna instrukcija i samo jedan podatak u svakom ciklusu
10
Flynnova klasična taksonomija: SIMD
Sve procesne jedinice izvode istu instrukciju u svakom ciklusu. Svaka procesna jedinica operira nad različitim podacima - operandima.
11
Flynnova klasična taksonomija: SIMD
Različite instrukcije operiraju nad jedinstvenim podatkom. Rijetka upotreba u praksi. Primjer: Više različitih kriptografskih algoritama nastoje “probiti” istu kodiranu poruku.
12
Flynnova klasična taksonomija: MIMD
Izvođenje različitih operacija nad različitim podacima. Najčešći oblik paralelnog izvođenja.
13
Pojmovi i terminologija: Opći pojmovi
Zadatak – diskretna logička sekcija posla / programa Paralelni zadatak – zadatak koji se može izvesti s više procesora istovremeno uz zajamčenu sigurnost rezultata (isti kao da se izvodi sekvencijalno) Komunikacija – izmjena podataka između paralelnih zadataka Sinkronizacija – koordinacija paralelnih zadataka u realnom vremenu, jer je izlaz jednog zadatka ulaz drugog
14
Pojmovi i terminologija: Još neki pojmovi
Zrnatost (Granularnost) – omjer obavljenog posla i komunikacije dvaju zadataka Krupna zrnatost – visoka razina izračuna, niska razina komunikacije Sitna zrnatost – niski stupanj izračuna, visoka razina komunikacije Tara paralelizacije – višak posla u odnosu na sekvencijalni izračun Sinkronizacija Komunikacija – izmjena zajedničkih podataka Tara kao rezultat kompilacije, poziva bibliotečnih funkcija, alata, operacijskog sustava itd.
15
Pojmovi i terminologija: Amdahlov zakon
Ubrzanje = 1 / (1 – P), gdje je P udio dijela programa koji se može izvoditi paralelno. Ubrzanje = 1 / (S + P/N), gdje je S sekvencijalni udio programa, P paralelni, a N broj procesora
16
Pojmovi i terminologija: Amdahlov zakon
17
Memorijska arhitektura paralelnog izvođenja: Zajednička memorija
Svi procesi pristupaju jedinstvenoj memoriji kao globalnom adresnom prostoru. Izmjena pdataka je brza. Nedostatak skalabilnosti memorije i CPU
18
Memorijska arhitektura: Raspodijeljena memorija
Svaki procesor ima svoju vlastitu memoriju Skalabilno, nema tare zbog koherencije cache memorija. Programer osigurava detalje međuprocesne komunikacije.
19
Modeli paralelnog programiranja
Postoji apstrakcija hardverske (i memorijske) arhitekture Primjeri: Zajednička memorija (Shared memory) Niti (Threads) Izmjena poruka (Message Passing) Paralelni podaci (Data Parallel)
20
Modeli paralelnih programa: Model zajedničke memorije
Programer vidi memoriju kao zajedničku (dijeljenu) bez obzira na hardversku implementaciju. Katanci (Locks) i semafori se koriste radi upravljanja pristupom zajedničkim memorijskim lokacijama. Razvoj programa jednostavniji, jer nema potrebe za izravnim specificirajem komunikacije između zadataka.
21
Modeli paralelnih programa: Model niti (Threads)
Jedan procesor može imati više usporednih – konkurentskih putanja izvođenja. Tipično se koristi s modelom zajedničke memorije. Programer je odgovoran za određivanje paralelnosti.
22
Modeli paralelnih programa: Message Passing Model
Zadaci izmjenjuju podatke slanjem i primanjem poruka. Tipično se koristi s arhitekturom raspodijeljene (distribuirane) memorije. Transfer podataka zahtjeva kooperativne operracije svakog procesa. Operaciji slanja korespondira operacija primanja. MPI (Message Passing Interface) je standardizirano sučelje za izmjenu poruka.
23
Modeli paralelnih programa: Data Parallel Model
Zadaci provode iste operacije nad skupom podataka. Svaki zadatak radi s disjunktnim podskupom podataka (particijom). Model je uspješan s arhitekturama zajedničke i distribuirane memorije.
24
Oblikovanje paralelnih programa: Automatska paralelizacija
Automatski: Kompilator analizira programski kod i identificira mogućnosti paralelizacije. Analiza uključuje izračun je li paralelizacija stvarno doprinosi skraćenju vremena izračuna. Petlje su najčešći cilj automatske paralelizacije.
25
Oblikovanje paralelnih programa: Manualna paralelizacija
Razumjeti problem Problemi koji se mogu paralelizirati Izračun potencijalne energije svake od nekoliko tisuća molekula u kemiskim spojevima Umnožak matrica Pretraživanja (stabla, baze podataka) Simulacije Problemi koji se ne mogu paralelizirati: Fibonacci serija Levenštajnova udaljenost Dinamičko programiranje – tekući podatak je funkcija prethodnika
26
Oblikovanje paralelnih programa: Dekompozicija domene
Svaki zadatak obrađuje jednu particiju podataka.
27
Oblikovanje paralelnih programa: Funkcionalna dekompozicija
Svaki zadatak provodi jednu funkciju sveukupnog posla
28
Primjeri paralelnih algoritama: Obrada polja
Sekvencijalno rješenje Provođenje neke funkcije nad 2D poljem Jedan procesor polazi od početnog elementa polja, i provodi funkciju sve do završnog elementa polja. Moguće paralelno rješenje Dati svakom procesoru jednu particiju polja Svaki procesor napreduje svojom particijom.
29
Primjeri paralelnih algoritama: Par-nepar transponirani sort
Ideja se zasniva na bubble sortu, ali usporedno uspoređujući elemente na neparnim indeksima sa susjedom, a potom elemente na parnim indeksima. Ako polje ima n elemenata, a sustav n/2 procesora, složenost algoritma je O(n).
30
Parallel Algorithm Examples: Odd Even Transposition Sort
Initial array: 6, 5, 4, 3, 2, 1, 0 6, 4, 5, 2, 3, 0, 1 4, 6, 2, 5, 0, 3, 1 4, 2, 6, 0, 5, 1, 3 2, 4, 0, 6, 1, 5, 3 2, 0, 4, 1, 6, 3, 5 0, 2, 1, 4, 3, 6, 5 0, 1, 2, 3, 4, 5, 6 Worst case scenario. Phase 1 Phase 2 ONLY 7 PASSES!
31
Other Parallelizable Problems
The n-body problem Floyd’s Algorithm Serial: O(n^3), Parallel: O(n log p) Game Trees Divide and Conquer Algorithms
32
Zaključak Paralelno izvođenje je brzo.
Postoji više pristupa i modela paralelnom izvođenju. Paralelno izvođenje je budućnost programiranja.
33
2 Sinkrono paralelno računalo sa zajedničkom memorijom
Model PRAM računala Primjeri PRAM algoritama Algoritam zbroja prefiksa Algoritam +reduciranje Algoritam +prescan Algoritam uz zadani broj procesora Primjene algoritma zbroja prefiksa Najveći element u nizu Alokacija procesora Radix sort algoritam
34
Model PRAM računala RAM model slijednog računala
Konstantan broj registara Neograničen broj memorijskih lokacija, gdje su adrese prirodni brojevi U ocjeni vremenske i prostorne složenosti Svaka strojna operacija se obavlja u jednoj jedinici vremena Svaka memorijska lokacija je jedna jedinica prostora
35
Model PRAM računala Paralel RAM je MIMD model računala sa zajedničkom memorijom PRAM ima proizvoljan broj procesora PRAM je sinkrono računalo: svi procesori izvode jednu – bilo koju različitu instrukciju – u jednoj jedinici vremena (lock step) Često se u razvoju algoritama uzima inačica PRAM-a sa zadanim brojem procesora
36
Model PRAM računala Skup osnovnih pseudoinstrukcija se proćiruje ključnom rječju PARALELNO Pristup memoriji Isključivo jednom procesoru u određenom momentu Konkurentno – više procesora odjesnom, pri čemu samo jedan procesor uspjeva u pisanju podatka u memoriju (CW), a svi uspjevaju u čitanju (CR)
37
Primjer PRAM algoritma
paralelno (za svaki element vektora V[i]) V[i]++; Postoji značajan skup temeljnih algoritama za PRAM model – komponiraju se u izgradnji složenijih paralelnih algoritama (building blocks) Izgradnja algoritama za PRAM: teorijska i akademska disciplina
38
Primjeri PRAM algoritma
Algoritmi manipulacije grafovima Povezanost dijelova grafa Udaljenost čvorova liste od datog čvora Eulerov put u grafu (dubina čvorova, broj pod-čvorova, najbliži roditeljski čvor datih pod-čvorova Operacije sa slabo popunjenim matricama, gdje se povezanost elemenata matrice daje grafom FFT – brza Fourierova transformacija
39
Primjeri PRAM algoritama
Algoritmi paralelnog sortiranja Radix sort, quick sort Operacije nad stablima Rješavanje problema pretraživanjem stabla Primjer: šah – prosječna partija završava nakon 50 poteza bijelog, a prosječni faktor grananja je 35 Dakle, stablo ima 35^100 čvorova Pretraživanje regularnih izraza Svi počeci zadanog uzorka u velikom tekstu Algoritmi računalne geometrije Vidljivost točaka u 3D krajoliku Algebarski algoritmi Aritmetika polinoma matrične operacije sustav linearnih jednadžbi
40
Algoritam zbroja prefiksa
Jedna od najčešće korištenih komponenti u razvoju algoritama (building block) Iako u nazivu ima zbroj, odnosi se na bilo koju asocijativnu binarnu operaciju ®, za koju vrijedi (a ® b) ® c = a ® (b ® c) Definicija problema: zadan je asocijativni binarni operator ® i uređeni skup (niz) od n elemenata: [a0, a1,..., an-1]. Operacija zbroja prefiksa vraća uređeni skup: [a0, (a0 ® a1), ..., (a0 ® a1 ®... ® an-1)]
41
Primjer zbroja prefiksa
Operator ® ≡ + Ulazni vektor: [3, 1, 7, 0, 4, 1, 6, 3] Izlazni vektor: [3, 4, 11, 11, 15, 16, 22, 25] tj. 3 4 = 3 + 1 11 = 11 = 15 = itd. Pretpostavka: elementi niza zapisani su u memoriji slijedno (vektor) ili Kao povezana lista
42
Zbroj prefiksa slijedno
algoritam zbroj_prefiksa(Ulaz[ ], Izlaz[ ]) i := 0; zbroj := 0; dok i < Len(Ulaz[ ]) činiti zbroj := zbroj + Ulaz[i]; Izlaz[i] := zbroj; i++; Složenost slijednog algoritma: O(n), gdje je n = Len(Ulaz[ ]) = Len(Izlaz[ ])
43
Operacija prescan Ulaz: [a0, a1, ..., an-1] Izlaz:
[I, a0, (a0 ® a1), ..., (a0 ® a1 ®... ®an-1)] Početni element Izlaza[ ] prescan operacije je neutralni elemen operacije ®, npr: 0 za zbrajanje 1 za množenje
44
Operacija reduciranja
Ulaz: [a0, a1, ..., an-1] Izlaz: (a0 ® a1 ®... ®an-1) Za ulazni vektor vraća skalar, tj. Samo zadnji element vektora kojeg vraća scan. npr. Zbroj svih elemenata vektora, ako je operacija ® zbrajanje. Najprije definiramo paralelni algoritam za reduciranje, a pomoću njega za prescan i scan za PRAM model računala.
45
Operacija reduciranja
algoritam +reduciranje(A[ ]) n := Len(A[ ]); za d:=0 .. log2(n) -1 činiti paralelno( za i:=0..n-1, korak 2^(d+1)) A[i+2^(d+1)-1] += A[i+2^d -1]; Implementacija pomoću binarnog stabla Postupak je moguć radi asocijativnosti operacije
46
Operacija reduciranja
Dubina stabla: log2(n), npr. log2(8)=3
47
Određivanje indeksâ 8 8 7 4 4 4 3 7 2 2 2 1 2 5 2 3 7 1 2 3 4 5 6 7 1 47
48
Operacija reduciranja
A[i+2^(d+1)-1] += A[i+2^d -1]; d = 0 i = 0 : A[0+2^1-1] += A[0+2^0-1] ≡ A[1]+=A[0] i = 2 : A[2+2^1-1] += A[2+2^0-1] ≡ A[3]+=A[2] i = 4 : A[4+2^1-1] += A[4+2^0-1] ≡ A[5]+=A[4] i = 6 : A[6+2^1-1] += A[6+2^0-1] ≡ A[7]+=A[6] d = 1 i = 0 : A[0+2^2-1] += A[0+2^1-1] ≡ A[3]+=A[1] i = 4 : A[4+2^2-1] += A[4+2^1-1] ≡ A[7]+=A[5] D=2 i = 0 : A[0+2^3-1] += A[0+2^2-1] ≡ A[7]+=A[3]
49
Operacija +prescan Algoritam down_sweep(A[ ]) n := Len(A[ ]);
za d = log(n) , korak -1 činiti paralelno( za i := 0 .. n-1 korak 2^(d+1)) tmp := A[i+2^d-1]; A[i+2^d-1 ] := A[i+2^(d+1)-1]; A[i+2^(d+1)-1] += tmp;
50
Algoritam zbroja prefiksa
algoritam +prescan(A[ ]) +reduciranje(A[ ]); down_sweep(A[ ]); Složenost algoritma na jednom procesoru 2*(log(n))*n/2 , Složenost uz n/2 procesora O(log(n))
51
Ideja algoritma uz zadani broj procesora
Uz konstantan broj procesora p, gdje je p < n/2, svaki procesor zbraja n/p elemenata. Rezultat procesora i je u psuma[i]. Dužina niza psuma[] je p = broj procesora. Niz psuma[] se prosljeđuje ranije uvedenom algoritmu bez ograničenja broja procesora. Sljedeći algoritam radi nad nizom A[] duljine n uz ograničeni broj procesora p.
52
Algoritam uz zadani broj procesora
algoritam +reduciranje(A[ ], psuma[], p) n := len(A[]); paralelno za i:=0 .. p-1 činiti // p = broj procesora elem := n/p; //broj elemenata niza za pi poc := (n/p)*i; // početni indeks ako n % p != 0 onda ako i < n % p onda elem++; poc += min(i, n % p); psuma[i] := A[poc]; za j:=1..elem -1 činiti psuma[i] += A[poc + j]; +reduciranje(psuma[]); // len(psuma[])=p 52
53
algoritam +prescan(A[ ], n, p) // n = len(A[] +reduciranje(A[], n, psuma[], p); down_sweep( psuma[], p); paralelno za i:=0 .. p-1 činiti // p = broj procesora elem := n/p; //broj elemenata niza za pi poc := (n/p)*i; // početni indeks ako n % p != 0 onda ako i < n mod p onda elem++; poc += min(i, n % p); prethodni := A[poc]; A[poc] := psuma[i]; za j:=1..elem -1 činiti temp := A[poc+j]; A[poc+j]:=prethodni + A[poc+j-1]; prethodni := temp; 53
54
Brentovo pravilo Broj operacija prethodnog algoritma je 2*(n/p + log(p)), pa je vremenska složenost O(n/p + log(p)). Neka proizvoljni paralelni algoritma radi na neograničenom broju procesora uz složenost O(log(n)). Složenost datog algoritma prilagođenog ograničenom broju procesora p, gdje je p < n/2, ne može biti manja od O(n/p + log(p)). 54
55
Asinkrono paralelno računalo sa zajedničkom memorijom
Zajednička memorija Pristupno vrijeme T=d >1 CPU1 CPU2 CPU2 Pristupno vrijeme T=1 Lokalna memorija Lokalna memorija Lokalna memorija 55
56
aPRAM i PRAM Svi algoritmi za sinkroni PRAM model instrukcije na različitim procesorima obavljaju sinkrono u lock step modu aPRAM Procesori su međusobno neovisni i nesinkronizirani Brzine procesora se razlikuju Globalno čitanje / pisanje Lokalno čitanje / pisanje Vrijeme globalnog pristupa je značajno veće od vremena lokalnog pristupa d = vrijeme globalnog pristupa / vrijeme lokalnog pristupa > 1 Uzastopni pristup memoriji istog procesora je ulančan (pipelined) 56
57
Primjer liste Početni čvor vezane liste
Lista ima n elemenata, ali ne znamo početni čvor i – ti element liste pokazuje na j-ti, sljedeći element liste Formira se niz M[n] Svakom elementu liste se pridružen procesor i-ti proceor izvodi program: paralelno za i:= 0..n činiti M[i] := 0; M[j] := 1; ako M[i] = 0 onda početak := i; Paralelno se izvode 3 operacije, pa složenost označavamo O(1) 57
58
Primjer liste Sinkroni PRAM ovaj algoritam izvodi korektno
aPRAM ima problem: i-ti procesor ne može znati je li procesor pridružen čvoru liste koji pokazuje na i-ti i koji treba upisati u M[i] zakasnio ili ne postoji (dakle i je glava liste). Kako bi odluka i-tog procesora bila sigurna, svi se procesori moraju sinkronizirati. 58
59
aPRAM računalo Sastoji se od p procesora
Svaki procesor ima lokalnu memoriju i može pristupati zajedničkoj globalnoj memoriji Svaki procesor radi neovisno o drugim procesorima (nema globalnog takta) Svaki procesor izvodi svoj niz instrukcija Postoje četiri vrste instrukcija Globalno čitanje Globalno pisanje Lokalne operacije Sinkronizacija skupa procesora S (svi ili dio) – čekanje da svi procesori dođu do istog koraka 59
60
aPRAM računalo Sinkronizacija svih procesora zove se ograda (barrier)
Lokalni programi aPRAM-a sastoje se od niza asinkronih odsječaka odvojenih sinkronizacijskim ogradama Zadnja instrukcija svakog programa je uvijek ograda. Procesori mogu asinkrono pristupati globalnoj memoriji, ali samo jedan procesor može pristupiti istoj globalnoj lokaciji unutar istog asinkronog odsječka. 60
61
Složenost aPRAM operacija
Svaka lokalna operacija ima trajanje 1 vremenske jedinice. Globalni pristup ima trajanje d > 1 vremenskih jedinica Uzima se preklapanje instrukcija pristupa globalnoj memoriji kod višestrukog pristupa lokacijama u slijedu, npr: d + k -1 uz k uzastopnih pristupa. B je vrijeme potrebno za sinkronizaciju svih p procesora Uzimamo da vrijedi: 2 <= d <= B <= p Program mora raditi bez obzira na zastoj nekog od procesora. 61
62
Prilagodba PRAM algoritma aPRAM-u
Kad god je moguće iskoristiti PRAM algoritme i prilagoditi ih aPRAM modelu Najjednostavnije: jedna PRAM instrukcija se može prikazati u tri koraka: Globalno čitanje Lokalno računanje Globalno pisanje Uzimamo da se PRAM algoritam izvodi na p procesora PRAM algoritam možemo simulirati s jednakim ili manjim brojem aPRAM procesora. 62
63
Prilagodba PRAM algoritma uz jednaki broj procesora
Umetanje ograde nakon svakog čitanja i pisanja Jedna PRAM instrukcija na aPRAM računalu: d ciklusa za globalno čitanje B ciklusa za ogradu 1 ciklus za lokalnu instrukciju d ciklusa za globalno pisanje Jedna PRAM instrukcija se izvede za 2B+2d+1 ciklusa na aPRAM računalu Složenost je O(B) jer je B > d. 63
64
Prilagodba PRAM algoritma uz p / B procesora
Trošak sinkronizacije znatno raste s porastom broja procesora – upotrebljava se manje procesora Neka su indeksi PRAM procesora 0...p-1. Svaki aPRAM procesor (s indeksom i) simulira rad B PRAM procesora Trošak sinkronizacije p / B procesora je B. Svaki aPRAM procesor izvodi: Čitanje za B PRAM procesora u d + B -1 ciklusa Ograda B ciklusa B lokalnih instrukcija za B ciklusa Pisanje za B PRAM procesora u d + B – 1 ciklusa 64
65
Složenost algoritma uz p / B procesora
Složenost je 5B+2d-2, dakle O(B) Ako je složenost PRAM algoritma O(t), onda ovako izgrađeni aPRAM algoritam ima složenost O(B*t) Za veliki broj problema posebno su razvijeni aPRAM algoritmi manje složenosti. 65
66
MPI – Message Passing Interface
Ideja: paralelno izvršavati program na više računala MPI standard: definira mehanizam za razmjenu poruka (message passing) između računala Distribuirani sustav: labavo povezani sustavi putem lokalne mreže Razlog standardizacije: prenosivost programa na različite distribuirane sustave Naš cilj: upoznati MPI standard i osnovne MPI komunikacijske funkcije 66
67
MPI – Povijest 1993: osnovan MPI forum – 40-tak industrijskih i istraživačkih organizacija 1994: objavljen MPI standard 1.1 1997: objavljen MPI standard 2.0 Standard definira komunikaciju porukama – razmjenu podataka između procesa 67
68
MPI – Značajke Broj procesa u MPI programu je konstantan tijekom izvršavanja Svi procesi obično izvode isti program (SPDM model), međutim mogu se pokrenuti i različiti programi (MPMD model) MPMD model se može simulirati uvrštavanjem više funkcija u jedan SPMD program 68
69
MPI – vrste komunikacije
Svaki sa svakim (point-to-point) – direktna komunikacija između dva procesa Grupna (collective) komunikacija između grupe procesa – jedan šalje, a svi članovi grupe primaju poruku Sinkrona komunikacija Asinkrona komunikacija Primjeri implementacije: MPICH2, MS-MPI, MPI.net (+WinHCP_2008) 69
70
Osnovne MPI funkcije Obavezni mehanizmi
Otkriti ukupan broj procesa (size) Identificirati vlastiti proces u grupi procesa rank = 0..size – 1 Poslati poruku određenom procesu Primiti poruku (od određenog procesa) MPI uključuje preko 120 funkcija, ali je neophodno mnogo manje – desetak Prikazujemo funkcije zapisane C# jezikom 70
71
MPI.NET Objekti Environment - okruženje za odvijanje komunikacije
Intrcommunicator – osigurava komunikaciju između svih MPI procesa Communicator.world – svi MPI procesi Svojstva Communicator.world.Size – ukupan broj MPI procesa Communicator.world.Rank – identifikator proces 71
72
MPI.NET osnovne metode Communicator.Send<string>(string msg, int d, int t) msg – poruka d – rank primatelja (destination) t – oznaka (tag) poruke Communicator.Receive<string>(int s, int t) s – rank izvora (source) 72
73
Razmjena poruka Poruka se sastoji od zaglavlja i sadržaja int MPI_Send
int MPI_Recv void *buf int count MPI_dataType int dest int tag MPI_Comm Sadržaj int source MPI_Status void *buf int count MPI_dataType int tag MPI_Comm 73
74
Uvjeti uspjeha komunikacije
Rank pošiljatelja i primatelja su valjani ( 0 .. Size-1) Isti komunikator (Communicator) Iste oznake poruke (tag) Odgovarajući memorijski prostor Završetak Slanje : poslana varijabla je slobodna za pisanje Primanje: varijabla se može čitati Načini point-to-point komunikacije Blokirajući – povratak iz funkcije slanja / primanja znači završetak u gore navedenom smislu Neblokirajući – povratak iz funkcije odmah, potrebna naknadna provjera završetka u gore navedenom smislu 74
75
Određenost u MPI programima
MPI programski model je u osnovi neodređen: Redoslijed prijema poruka poslanih od više procesa nije određen Redoslijed prijema više poruka istog procesa je određen, odgovara redoslijedu slanja Programer je odgovoran za postizanje determinizma – upotrebom parametara komunikatora, source i tag 75
76
Primjer: Pozdrav svima !
mpi_01.exe: isti program za sve procese smpd.exe – d: Simple Multi-Purpose Daemon parallel process manager (Intel) mpiexec.exe –n 8 mpi_01.exe rogram se izvršava na istom računalu uz pomoć 8 procesa mpiexec.exe –hosts 2 A 1 B 1 mpi_01.exe program se izvršava a računalima A i B 76
77
Kružna komunikacija Intracommunicator comm = Communicator.world;
int to = comm.Rank % comm.Size; Send(msg, to, 0); msg = Receive(comm.Rank -1, 0); 77
78
Globalna komunikacija
Slanje podataka svim procesima ili prijem podataka od svih procesa Pravila globalne operacije: Svi procesi u grupi moraju pozvati određenu funkciju Sve funkcije su blokirajuće Nema oznake (tag) ni primatelja (desc) poruke Količina poslanih podataka mora odgovarati količini primljenih podataka 78
79
Metode globalne komunikacije
Broadcast – korijenski (root) proces šalje svima isti podataka svi kojima nije rank = root primaju podatke Scatter – root šalje element polja A[rank] procesur rank Gatter – root skuplja podatke os svih procesa 79
80
Globalna sinkronizacija
Svi procesi koji pripadaju grupi komunikatora comm sinkroniziraju se funkcijom: Communicator.Barrier() Proces pozivač izlazi iz funkcije nakon što svi procesi u grupi comm pozovu funkciju Ako procesi ulaze u funkciju stohastički, izlaze iz nje istovremeno, dakle sinkronizirani su 80
81
Primjer potpunog zastoja
Je li program ispravan (komunikacija sinkronizirajuća)? Switch(rank) { case 0: MPI_Bcast(buf1, count, type, 0, comm); MPI_Bcast(buf2, count, type, 1, comm); break; case 1: MPI_Bcast(buf2, count, type, 1, comm); MPI_Bcast(buf1, count, type, 0, comm); } 81
82
Kritični odsječak Programski segment koji piše zajedničku varijablu
Nepredvidivi rezultati Var x T1 X := x + 1; T2 X := x + 1; T3 X := x + 1; 82
83
Kritični odsječak Nepredvidiv redoslijedi operacija čitaj / piši T1
x = 0 T1 Čita 0 x = 0 T2 Čita 0 x = 1 T1 Piše 1 x = 1 T2 Piše 1 Očekivano x = 2, postignuto x = 1 ! 83
84
Rješenje problema Problem zbog nadmetanja u pristupu podacima (data race) Rješenje: Serijalizacija Nepromjenjivost podatka Izolacija podatka (svaki zadatak radi s kopijom, na kraju se rezultati “sumiraju”) Naizmjeničan prolazak kroz kritični odsječak 84
85
Problem potpunog zastoja
Problem može nastati kada dva zadatka T1 i T2 trebaju dva zajednička sredstva S1 i S2. T1 drži sredstvo S1 T2 čeka sredstvo S1 S1 T1 T2 S2 T1 čeka sredstvo S2 T2 drži sredstvo S2 Problem: niti jedna nit nema oba potrebna sredstva i ne može napredovati. Obje niti čekaju zauvijek nedostajuće sredstvo i nikada neće završiti posao. 85
86
Zadaci za vježbu 1) Pronaći najveći elemen u nizu A[] duljine n.
2) Provjeriti je li niz A[] uređen (poredan). 3) Izračunati i ispisati n! Za n takav da je n! <= 10^9, tj. Za n=0..12 ZBROJ PREFIKSA (+prefix) algoritam ? ASOCIJATIVNA OPERACIJA ! Podaci u NIZU ! For k = 0 .. N činiti FAKT = 1 For i=1 .. K činiti FAKP *=i; ispisati(K ! , FAKT); 86
87
Zadaci za vježbu 4) Zadan je niz A[] od n elemenata. Napisati paralelni algoritam koji će izračunati broj različitih elemenata niza. Npr. Niz A[]={1, 2, 2, 3, 1, 2, 3, 5} ima 4 različita elementa. 87
88
Oblikovanje paralelnog algoritma
Faze oblikovanja paralelnog algoritma Podjela Razmjena podataka Aglomeracija Pridruživanje računalima i procesorima 88
89
Željena svojstva paralelnog algoritma
Razvoj paralelnog algoritma nije moguće svesti na recept, ali je poželjan metodički pristup Svojstva koja želimo postići paralelnim algoritmom Istodobnost – izvođenje (što) više radnji istovremeno Skalabilnost – prilagodljivost proizvoljnom broju fizičkih procesora (i jezgri) Lokalnost – što povoljniji omjer pristupa lokalnoj memoriju u odnosu na udaljenu Modularnost – upotrebljivost dijelova algoritma u različitim paralelnim programima 89
90
Faze oblikovanja paralelnog algoritma
Podjela – dekompozicija problema na manje cjeline Komunikacija – utvrđivanje potrebne razmjene podataka: putem zajedničke memorije ili MPI Aglomeracija – skupovi zadataka i komunikacijskih kanala se grupiraju u logičke cjeline radi smanjenja broja zadataka i opsega komunikacije Pridruživanje – dodjela zadataka računalu/procesoru: unaprijed ili dinamički tijekom izvođenja 90
91
Podjela Cilj: definirati sitnozrnatu podjelu posla na dijelove koji se mogu izvoditi istodobno Podjela posla može se koncentrirati na podjelu podataka (domene) ili izračuna (funkcija) Postići podjelu koja ne zahtjeva redudantnost podataka ili računanja 91
92
Provjera podjele Definira li podjela broj zadataka za red veličine veći od broja procesora Izbjegava li podjela višestruko računanje i umnožavanje istih podataka Jesu li zadaci podjednake veličine radi ujednačenog opterećenja procesora Povećava li se broj zadataka s povećanjem veličine problema – dobra skalabilnost. Postoje li alternativne podjele Postoje li druge mogućnosti paralelizacije 92
93
Komunikacija Utvrđuju se zadaci koji zavise jedan od drugom
Rezultat jednog zadatka ulaz drugog zadatka Kako se podaci izmjenjuju: zajedničkom memorijom ili pomoću MPI Cilj: smanjiti ukupnu količinu komunikacije i omogućiti paralelnu komunikaciju Podjela komunikacije Lokalna / globalna Strukturirana (stablo, prsten)/ nestrukturirana Statička / dinamička Sinkrona / asinkrona 93
94
Aglomeracija Smanjiti “trošak” komunikacije povećanjem zrnatosti
Održati skalabilnost programa Smanjiti trošak implementacije 94
95
Pridruživanje Na kojem računalu / procesoru će se pojedini zadatak izvoditi Dvije jednostavne nasuprotne strategije Zadaci koji ne zavise jedan o drugom dodjeljuju se različitim procesorima Zadaci koji često komuniciraju dodjeljuju se istom procesoru Općenito, problem pridruživanja je NP kompleksan Najjednostavnija je jednolika raspodjela Radi ujednačavanja opterećenja procesora obavlja se algoritamsko pridruživanje (task scheduling) 95
96
Podjela podataka pomoću kolekcija
Polje FIFO red LIFO red Bag Dictionary 96
97
Problem T1 Brojac(q) T2 Prazan(q) 1 1 Prazan(q) X = Izvuci(q) 1 Greška
Y = Izvuci(q) 97
98
Koordinacija zadataka u rješenju kvadratne jednadžbe I
T1: D=b^2 - 4ac T2: D=sqrt(T1.r.D) T3: x1:=(-b+T2.r.D)/(2a) T4: x2:=(-b-T2.r.D)/(2a) 98
99
Koordinacija zadataka u rješenju kvadratne jednadžbe II
T1: D=sqrt(b^2 – 4ac) T2: A2=a*2 T3: x1:=(-b+T1.r.D)/(T2.r.A2) T4: x2:=(-b-T1.r.D)/(T2.r.A2) 99
100
Reference A Library of Parallel Algorithms, www-2.cs.cmu.edu/~scandal/nesl/algorithms.html Internet Parallel Computing Archive, wotug.ukc.ac.uk/parallel Introduction to Parallel Computing, Parallel Programming in C with MPI and OpenMP, Michael J. Quinn, McGraw Hill Higher Education, 2003 The New Turing Omnibus, A. K. Dewdney, Henry Holt and Company, 1993 100
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.