Paralelno programiranje Uvod

Slides:



Advertisements
Similar presentations
UVOD U PARALELNO RAČUNARSTVO SA OSVRTOM NA MPI
Advertisements

Programiranje kroz aplikacije
1.6. Pohrana podataka.
Programi zasnovani na prozorima
PRIJENOS PODATAKA.
Petlje WHILE – WEND.
Završni rad: Postupci za učenje asocijativnih pravila
PONAVLJANJE CheckBox Koristi se za rešavanje zadataka gde je potrebno omogućiti uključivanje ili isključivanje jedne ili više opcija. Važna svojstva: –Checked.
Algoritamske/programske strukture
Algoritmi raspoređivanja
Struktura i princip rada računara
Uvod u projekte Rijeka,
Programiranje - Blokovi naredbi i logički tipovi –
OSNOVE PROGRAMIRANJA U PROGRAMSKOM JEZIKU
The Present Perfect Continuous Tense
Programiranje Uvod Nikola Vlahović.
Microsoft Office 2007 MS Office je programski paket koji sadrži više programa: MS Word – program za obradu teksta MS Excel – program za izradu tabela sa.
Multimedijalna e-Learning platforma
Quick Basic.
SEMINARSKI RAD MS WORD.
Petlje FOR - NEXT.
REPEAT…UNTIL Naredbe ciklusa.
KAKO RADI INTERNET.
Uvod u HTML Zoltan Geller 2017
Europski dan programiranja
Izrada web-stranica.
Reference ćelije i opsega
Elektrotehnički fakultet – Podgorica Operativni sistemi
14 UNUTRAŠNJE I ANONIMNE KLASE
Armin Teskeredzic Zagreb, Hrvatska,
Arrays and strings -1 (nizovi i znakovni nizovi)
LAPLACEOVA TRANSFORMACIJA
Sveučilište u Splitu Medicinski fakultet
Arhitektura računarskog sistema
OSNOVE PROGRAMIRANJA U PROGRAMSKOM JEZIKU
Page Layout Podešavanje stranica.
MessageBox.
Sustavi za praćenje i vođenje procesa
Pojmovi digitalnog zapisa
PROGRAMSKI JEZIK PASCAL
MATEMATIČKI FAKULTET, UNIVERZITET U BEOGRADU
Osnovni simboli jezika Pascal
Razvojne okoline Kolegij: Programski jezik C++ Ak. god. 2017/2018
FAKULTET KEMIJSKOG INŽENJERSTVA I TEHNOLOGIJE
Do While ... Loop struktura
Virtualizacija poslovnih procesa metodom „Swimlane“ dijagrama
Programiranje – Small Basic
Memorije Vrste memorija i osnovni pojmovi Ispisne memorije
posljednja faza razvoja podatkovnih komunikacija
Seminar iz predmeta Sustavi za praćenje i vođenje procesa
Strukture podataka i algoritmi 5. VRIJEME IZVRŠAVANJA ALGORITMA
Nizovi.
C++ WORKSHOP Šimec Tino - FOI.
Skup instrukcija procesora
Analiza varijance prof. dr. sc. Nikola Šakić.
Naredbe u php-u.
Programski jezik C++ - Vježbe - 5. dio
Programski jezik Python
VAŽNOST ČITANJA U NIŽIM RAZREDIMA OSNOVNE ŠKOLE
Kratkotrajne veze žena i muškaraca
Izranjajuća Inteligencija
LimeSurvey Uvjetni prikaz pitanja Internetska istraživanja
1. Sigurno u virtualnom svijetu
7. Baze podataka Postavke MS Accessa.
Ponavljanje Pisana provjera
Programiranje - Naredbe za kontrolu toka programa – 1. dio
INTERPOLACIJA PO DIJELOVIMA POLINOMIMA
Vježbenica 2: struktura grananja – 2.dio
Kako zaštititi privatnost na facebooku
2. Sklopovlje i programska podrška
Presentation transcript:

Paralelno programiranje Uvod T. Dadić 09.11.2013.

Pregled Pojmovi i terminologija Arhitektura računala s paralelnom memorijom Modeli paralelnih programa Oblikovanje paralelnih programa Primjeri paralelnih algoritama Zaključak

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.

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

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

Zašto paralelno izvođenje? Mooreov zakon

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

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

Flynnova klasična taksonomija: SISD Slijedno Aktivna je samo jedna instrukcija i samo jedan podatak u svakom ciklusu

Flynnova klasična taksonomija: SIMD Sve procesne jedinice izvode istu instrukciju u svakom ciklusu. Svaka procesna jedinica operira nad različitim podacima - operandima.

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.

Flynnova klasična taksonomija: MIMD Izvođenje različitih operacija nad različitim podacima. Najčešći oblik paralelnog izvođenja.

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

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.

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

Pojmovi i terminologija: Amdahlov zakon

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

Memorijska arhitektura: Raspodijeljena memorija Svaki procesor ima svoju vlastitu memoriju Skalabilno, nema tare zbog koherencije cache memorija. Programer osigurava detalje međuprocesne komunikacije.

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)

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.

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.

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.

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.

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.

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

Oblikovanje paralelnih programa: Dekompozicija domene Svaki zadatak obrađuje jednu particiju podataka.

Oblikovanje paralelnih programa: Funkcionalna dekompozicija Svaki zadatak provodi jednu funkciju sveukupnog posla

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.

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).

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!

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

Zaključak Paralelno izvođenje je brzo. Postoji više pristupa i modela paralelnom izvođenju. Paralelno izvođenje je budućnost programiranja.

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

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

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

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)

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

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

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

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)]

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 = 3 + 1 + 7 11 = 3 + 1 + 7 + 0 15 = 3 + 1 + 7 + 0 + 4 itd. Pretpostavka: elementi niza zapisani su u memoriji slijedno (vektor) ili Kao povezana lista

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[ ])

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

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.

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

Operacija reduciranja Dubina stabla: log2(n), npr. log2(8)=3

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

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]

Operacija +prescan Algoritam down_sweep(A[ ]) n := Len(A[ ]); za d = log(n)-1 .. 0, 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;

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))

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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Kružna komunikacija Intracommunicator comm = Communicator.world; int to = comm.Rank % comm.Size; Send(msg, to, 0); msg = Receive(comm.Rank -1, 0); 77

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

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

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

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

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

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

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

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

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

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

Oblikovanje paralelnog algoritma Faze oblikovanja paralelnog algoritma Podjela Razmjena podataka Aglomeracija Pridruživanje računalima i procesorima 88

Ž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

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

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

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

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

Aglomeracija Smanjiti “trošak” komunikacije povećanjem zrnatosti Održati skalabilnost programa Smanjiti trošak implementacije 94

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

Podjela podataka pomoću kolekcija Polje FIFO red LIFO red Bag Dictionary 96

Problem T1 Brojac(q) T2 Prazan(q) 1 1 Prazan(q) X = Izvuci(q) 1 Greška Y = Izvuci(q) 97

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

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

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, www.llnl.gov/computing/tutorials/parallel_comp/#Whatis 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