7
Probleme de sincronizare in algoritmii paraleli si distribuiti 1 Introducere In orice algoritm paralel sau distribuit este necesar sa se coordoneze, intr-o anumita masura, activitatile diferitelor procesoare. Aceasta coordonare este adesea pusa in aplicare prin impartirea algoritmului in etape. Pe durata fiecarei etape, fiecare procesor trebuie sa execute o serie de calcule care depind de rezultatele calculelor altor procesoare din fazele anterioare, cu toate acestea, calendarul de calcule al unui procesor in timpul unei faze poate fi independent de calendarul de calcule al altor procesoare in aceeasi faza. Toate interactiunile au loc la sfarsitul fiecarei faze. Numim astfel de algoritmi algoritmi sincroni, si in continuare, ii vom compara cu alti algoritmi, numiti asincroni, pentru care nu exista notiunea de faze si coordonarea calculelor diferitelor procesoare este mai putin stricta. 2 Algoritmi sincroni Presupunem ca un sir de calcule este impartit in segmente consecutive, numite faze si numerotate 1, 2,... . Calculele in fiecare faza sunt impartite intre n procesoare ale unui sistem de calcul. In timpul unei faze t, fiecare procesor i face anumite calcule folosind datele problemei alaturi de informatiile pe care le primeste de la alte procesoare in timpul fazelor anterioare 1, 2,...,t - 1. Procesorul i trimite apoi informatii sub forma de mesaje catre toate celelalte procesoare P (i, t) ⊂{1, 2,...,n} si apoi trece la faza t +1. O presupunere implicita aici este faptul ca toate calcule diferitelor procesoare pot fi efectuate independent, intr-o faza, si ca momentul lor de executie este irelevant. Acest lucru este necesar pentru algoritmii distribuiti care reproduc rezultatele algoritmului serial original la sfarsitul fiecarei faze. In unele cazuri, un procesor poate sa nu stie de la ce procesoare sa astepte un mesaj in timpul unei faze, asta inseamna ca un procesor j poate sa nu stie multimea {i|j P (i, t)}. Se considera urmatorul proces iterativ: x i (t + 1) = f i (x 1 (t),...,x n (t)),i =1,...n (1) unde variabila x i este actualizata de procesorul i. Un algoritm distribuit corespunzator poate fi pus in aplicare prin asocierea fazelor cu momentele de timp t. Cerinta aici este ca fiecare procesor i sa actualizeze variabila x i folosind procesul iterativ (1) si apoi sa trimita un mesaj cu valoarea actualizata tuturor procesoarelor j pentru care x i apare in mod explicit in functia f j . Astfel, multimea de procesoare P (i, t) care a primit un mesaj de la i in faza t este o multime a tuturor procesoarelor j pentru care (i, j ) este un arc in graful de dependenta. Consideram cazul in care procesul iterativ (1) este implementat pe o masina cu memorie partajata. Un procesor trimite un mesaj la toate procesoarele simultan scriind-ul in memoria partajata. Sa presupunem ca un procesor va incepe un calcul a unei noi faze numai dupa ce toate mesajele fazei precedente au fost scrise in memoria partajata. Avem astfel un caz special al modelului precedent, unde P (i, t)= {1, 2,...,n} si receptarea mesajului se realizeaza simultan pentru toate procesoarele. Un astfel de algoritm distribuit se numeste sincron. Algoritmul sincron este matematic echivalent cu un algoritm guvernat de un ceas global, unul pentru care inceputul fiecarei faze si sfarsitul receptionarii mesajelor se realizeaza simultan pentru toate procesoarele. In scopul de a pune in aplicare un algoritm sincron intr-un sistem distribuit, avem nevoie de un mecanism de sincronizare. Un astfel de algoritm este numit synchronizer. 1

Probleme de sincronizare in algoritmii paraleli si distribuitiid.inf.ucv.ro/~cpopirlan/ecnpd/curs3.pdf · Figure 1: Implementarea sincronizarii globale O alta abordare este aceea

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Probleme de sincronizare in algoritmii paraleli si distribuitiid.inf.ucv.ro/~cpopirlan/ecnpd/curs3.pdf · Figure 1: Implementarea sincronizarii globale O alta abordare este aceea

Probleme de sincronizare in algoritmii paraleli si distribuiti

1 IntroducereIn orice algoritm paralel sau distribuit este necesar sa se coordoneze, intr-o anumita masura, activitatilediferitelor procesoare. Aceasta coordonare este adesea pusa in aplicare prin impartirea algoritmului in etape.Pe durata fiecarei etape, fiecare procesor trebuie sa execute o serie de calcule care depind de rezultatelecalculelor altor procesoare din fazele anterioare, cu toate acestea, calendarul de calcule al unui procesor intimpul unei faze poate fi independent de calendarul de calcule al altor procesoare in aceeasi faza. Toateinteractiunile au loc la sfarsitul fiecarei faze. Numim astfel de algoritmi algoritmi sincroni, si in continuare,ii vom compara cu alti algoritmi, numiti asincroni, pentru care nu exista notiunea de faze si coordonareacalculelor diferitelor procesoare este mai putin stricta.

2 Algoritmi sincroniPresupunem ca un sir de calcule este impartit in segmente consecutive, numite faze si numerotate 1, 2, . . . .Calculele in fiecare faza sunt impartite intre n procesoare ale unui sistem de calcul. In timpul unei faze t,fiecare procesor i face anumite calcule folosind datele problemei alaturi de informatiile pe care le primeste dela alte procesoare in timpul fazelor anterioare 1, 2, . . . , t − 1. Procesorul i trimite apoi informatii sub formade mesaje catre toate celelalte procesoare P (i, t) ⊂ {1, 2, . . . , n} si apoi trece la faza t+ 1.

O presupunere implicita aici este faptul ca toate calcule diferitelor procesoare pot fi efectuate independent,intr-o faza, si ca momentul lor de executie este irelevant. Acest lucru este necesar pentru algoritmii distribuiticare reproduc rezultatele algoritmului serial original la sfarsitul fiecarei faze. In unele cazuri, un procesorpoate sa nu stie de la ce procesoare sa astepte un mesaj in timpul unei faze, asta inseamna ca un procesor jpoate sa nu stie multimea {i|j ∈ P (i, t)}.

Se considera urmatorul proces iterativ:

xi(t+ 1) = fi(x1(t), . . . , xn(t)), i = 1, . . . n (1)

unde variabila xi este actualizata de procesorul i.Un algoritm distribuit corespunzator poate fi pus in aplicare prin asocierea fazelor cu momentele de timp

t. Cerinta aici este ca fiecare procesor i sa actualizeze variabila xi folosind procesul iterativ (1) si apoi satrimita un mesaj cu valoarea actualizata tuturor procesoarelor j pentru care xi apare in mod explicit in functiafj . Astfel, multimea de procesoare P (i, t) care a primit un mesaj de la i in faza t este o multime a tuturorprocesoarelor j pentru care (i, j) este un arc in graful de dependenta.

Consideram cazul in care procesul iterativ (1) este implementat pe o masina cu memorie partajata. Unprocesor trimite un mesaj la toate procesoarele simultan scriind-ul in memoria partajata. Sa presupunem caun procesor va incepe un calcul a unei noi faze numai dupa ce toate mesajele fazei precedente au fost scrisein memoria partajata. Avem astfel un caz special al modelului precedent, unde P (i, t) = {1, 2, . . . , n} sireceptarea mesajului se realizeaza simultan pentru toate procesoarele.

Un astfel de algoritm distribuit se numeste sincron. Algoritmul sincron este matematic echivalent cu unalgoritm guvernat de un ceas global, unul pentru care inceputul fiecarei faze si sfarsitul receptionarii mesajelorse realizeaza simultan pentru toate procesoarele. In scopul de a pune in aplicare un algoritm sincron intr-unsistem distribuit, avem nevoie de un mecanism de sincronizare. Un astfel de algoritm este numit synchronizer.

1

Page 2: Probleme de sincronizare in algoritmii paraleli si distribuitiid.inf.ucv.ro/~cpopirlan/ecnpd/curs3.pdf · Figure 1: Implementarea sincronizarii globale O alta abordare este aceea

2.1 Sincronizarea globalaIdeea este de a lasa fiecare procesor detectat atunci cand toate mesajele trimise in timpul unei faze au fostprimite, si doar apoi sa inceapa calculul in cadrul etapei urmatoare. Cel mai simplu mod de a efectuareasincronizarea globala este prin utilizarea de timeout.

Presupunem ca nu exista nici un ceas global accesibil tuturor procesoarelor, dar in schimb, fiecare pro-cesor poate masura cu precizie lungimea oricarui interval de timp folosind un ceas local. Sa presupunem caexista o limita superioara cunoscuta Tp pentru timpului necesar fiecarui procesor i pentru a executa calculeledintr-o faza, si pentru mesajele aferente trimise de catre i. Sa presupunem, de asemenea, ca exista un intervalde timp (necunoscut) de lungime cunoscuta Tf in care toate procesoarele au inceput prima faza. Apoi, sin-cronizarea va fi efectuata in cazul in care fiecare procesor i incepe faza k in k(Tp + Tj) unitati de timp dupace acesta a inceput prima faza. Figura 1 ilustreaza acest proces. Dificultatea aceastei metode este faptul calimitele Tp si Tf pot fi prea conservatoare sau indisponibile.

Figure 1: Implementarea sincronizarii globale

O alta abordare este aceea prin care fiecare procesor trimite un mesaj de terminare a fazei curente catretoate procesoarele dupa ce stie ca toate mesajele sale pentru o anumita faza au fost primite. Presupunem cafiecare mesaj trimis este recunoscut printr-un mesaj de raspuns trimis de receptor catre transmitator, astfelincat fiecare procesor stie ca in cele din urma toate mesajele pe care le trimite in timpul unei faze au fost prim-ite, moment in care se poate emite un mesaj de terminare faza. Odata ce un procesor a trimis propriul mesajde terminare de faza si a primit mesajele corespunzatoare de la toate celelalte procesoare, se pot continuacalculele din etapa urmatoare.

Intr-un sistem cu memorie partajata, aceasta metoda este conceptual simpla prin utilizarea de variabilespeciale, care sunt accesibile tuturor procesoarelor (ca exemplu avem semafoarele, monitoarele). Ideea debaza este aceea ca aceste variabile iau la un moment dat valori care indica faptul ca un procesor a termint fazacurenta si poate trece la faza urmatoare.

Intr-un sistem bazat pe transmitere de mesaje, sincronizarea globala poate fi implementata cu ajutorulunui arbore ce are un nod special, desemnat ca radacina (root). Mesajele de terminare a fazelor procesoarelorsunt colectate de root, incepand de la frunze. Odata ce radacina a primit mesaje de incetare a fazelor dela toate procesoarele, poate trimite un mesaj de initiere a fazei urmatoare tuturor procesoarelor, si fiecareprocesor poate incepe o noua faza la primirea acestui mesaj (figura 2).

Se poate observa ca aceasta metoda necesita, in esenta, o acumulare intr-un singur nod, urmata de oemisiune a unui singur nod.

2

Page 3: Probleme de sincronizare in algoritmii paraleli si distribuitiid.inf.ucv.ro/~cpopirlan/ecnpd/curs3.pdf · Figure 1: Implementarea sincronizarii globale O alta abordare este aceea

Figure 2: Sincronizarea globala folosind un arbore

2.2 Sincronizarea localaIdeea principala a acestei metode este ca, daca un procesor stie mesajele pe care sa le astepte in fiecare faza,atunci poate incepe o noua faza dupa ce a primit toate aceste mesaje. In particular, procesorul j poate incepecalculul unei noi faze t + 1 dupa ce a primit mesaje de fazei precedente t de la toate procesoarele i dinmultimea {i|j ∈ P (i, t)}.

Nu este necesar pentru un procesor sa stie daca oricare alte mesaje trimise in timpul fazei t (inclusivproprii mesaje) au fost primite, deci nu este nevoie sa se piarda timpul de asteptare pentru ca aceste receptiisa fie finalizate si sa fie confirmate. Atunci cand procesorul j nu stie multimea {i|j ∈ P (i, t)}, dar in schimbcunoaste o multime Sj ⊃ {i|j ∈ P (i, t)}, schema poate fi modificata astfel incat toate nodurile i ∈ Sj cuj /∈ P (i, j) trimit un mesaj catre j in cadrul fazei t.

3 Algoritmi asincroniTimpul total de executie a multor algoritmi poate fi adesea substantial redus printr-o implemenatre asincrona.Analiza algoritmilor asincroni distribuiti ofera un contrast preliminar si informal cu algoritmii sincroni.

Avand in vedere un algoritm distribuit, pentru fiecare procesor, exista o multime de timpi in care proce-sorul executa calculele, si alti timpi la care procesorul primeste mesaje de la celelalte procesore. Algoritmuleste numit sincron daca el este matematic echivalent cu unul pentru care timpul de calcul, transmiterea sireceptionarea mesajelor sunt fixe.

Spunem ca algoritmul este asincron in cazul in care timpul (prin urmare si ordinea calculelor si receptareamesajelor de la procesoare) poate varia pe scara larga pentru doua executii diferite ale algoritmului.

Pentru a analiza in contrast, ne putem gandi la un algoritm distribuit ca la o colectie de algoritmi locali.Fiecare algoritm local este executat de un procesor diferit si foloseste ocazional date generate de alti algoritmilocali.

3

Page 4: Probleme de sincronizare in algoritmii paraleli si distribuitiid.inf.ucv.ro/~cpopirlan/ecnpd/curs3.pdf · Figure 1: Implementarea sincronizarii globale O alta abordare este aceea

In cazul cel mai simplu de algoritm sincron, calendarul operatiunilor desfasurate de fiecare procesor estecomplet determinat si este aplicat cu ajutorul unui ceas global.

Un tip mai complex de algoritmi sincroni este unul in care momentul exact al operatiunilor desfasuratede fiecare algoritm local nu este prestabilit, dar algoritmii locali inca mai trebuie sa astepte la momenteleprestabilite ca datele sa devina disponibile.

Un exemplu de algoritm asincron este atunci cand algoritmii locali nu asteapta date predeterminate pentrua deveni disponibile; ei continua sa calculeze, incearca sa rezolve problema data cu orice date se intampla safie disponibile la momentul dat.

Cel mai extrem tip de algoritm asincron este cel ce poate tolera modificari in datele problemei sau in sis-temul de calcul distribuit, fara a se reporni de la un punct initial. Aceasta situatie apare in principal in retelelede date, in cazul in care nodurile si legaturile de comunicare nu pot fi reparate sau diferiti algoritmi distribuiticare controleaza reteaua sunt executati. In unele retele, cum ar fi retelele mobile de pachete radio, schimbarilein topologia retelei pot fi frecvente. In alte retele, astfel de schimbari pot fi rare, dar timpul de executie alalgoritmului poate fi atat de mare astfel ca probabilitatea de aparitie a unei modificari topologice in timp cealgoritmul se executa este foarte mica. De exemplu exista situatii in care algoritmul trebuie sa functionezechiar daca au loc erori in ceea ce priveste nodurile sau legaturile retelei. Exista o serie de dificultati aici. Inprimul rand, trebuie sa se stie mereu care sunt nodurile si legaturile care au dat erori; aceste informatii potavea un impact asupra algoritmului distribuit. In al doilea rnd, un nod sau o legatura cu erori va afecta, deobicei, algoritmul. Pentru a face fata situatiei, algoritmul ar trebui sa fie capabil sa se adapteze la esec sau artrebui sa fie anulata eroarea si sa fie repornit algoritmul (figura 3).

Figure 3: Exemplu de dificultate de comunicare

4

Page 5: Probleme de sincronizare in algoritmii paraleli si distribuitiid.inf.ucv.ro/~cpopirlan/ecnpd/curs3.pdf · Figure 1: Implementarea sincronizarii globale O alta abordare este aceea

3.1 Metode de relaxare asincroneConsideram un sistem cu n procesoare si o problema de punct fix n-dimensionala, unde dorim sa aflam unvector x = (x1, . . . , xn) ce satisface:

xi = fi(x1, . . . , xn), i = 1, . . . n (2)

unde fi sunt functii date de n variabile. Presupunem ca fiecare procesor i updateaza variabila xi conformrelatiei (2) pornind de la un set de date initiale.

O implementare sincrona a algoritmului necesita ca procesorul i sa nu realizeze updatarea k pana nua primit toate rezultatele de care are nevoie in cadrul functiei fi din etapa k − 1. In aceasta situatie aparprobleme de sincronizare:

• Procesorul i dupa ce updateaza variabila xi trebuie sa ramana idle in timp ce asteapta mesaje de la alteprocesoare (figura 4). In particular, o comunicare lenta incetineste intregul calcul.

Figure 4: Exemplu de comunicare cu intarziere

Figure 5: Exemplu de comunicare lenta (canal de comunicare lent/ procesor lent)

• Procesoarele care sunt rapide, fie pentru ca au o putere de calcul mare, fie pentru ca au putine calculede efectuat, trebuie sa astepte ca procesoarele mai lente sa-si termine iteratiile (figura 5).

Intr-o versiune asincrona a algoritmului precedent exista o flexibilitate mai mare in ceea ce privestefolosirea informatiilor primite de la alte procesoare. In cadrul etapei k, pentru updatarea variabilei procesoru-lui i, pot fi folosite date de la etapele trecute, nu neaparat cele mai recente rezultate. De exemplu, procesorul

5

Page 6: Probleme de sincronizare in algoritmii paraleli si distribuitiid.inf.ucv.ro/~cpopirlan/ecnpd/curs3.pdf · Figure 1: Implementarea sincronizarii globale O alta abordare este aceea

i poate executa uptatarea din cadrul etapei k folosind rezultate de la procesorul j de la etapa k + 10, si inacelasi timp procesorul j poate sa execute faza k + 100 folosind rezultate din faza k − 10 a procesorului i.

Viteza de calcul si de comunicare poate fi diferita pentru procesoare diferite si de aceea pot exista multipleintarzieri de comunicare. Aceste viteze si intarzieri pot varia foarte mult pe masura ce algorimul progreseaza.Exista deasemena flexibilitate in ceea ce priveste conditiile initiale ale fiecarui procesor, variabila xi disponi-bila initial poate diferi de la un procesor la altul.

Procesoarele pot deasemenea executa mai multe iteratii daca nu sunt fortate sa astepte rezultate mairecente pentru diferite variabile. Exista pericolul ca astfel de rezultate sa nu fie eficiente deoarece folosescinformatii care nu mai sunt valabile. Totusi, atunci cand functioneza, algoritmii asincroni reduc penalizarilede sincronizare si obtin mai rapid o solutie a problemei (figura 6).

Figure 6: Diagrama de timp pentru algoritmi sincroni/asincroni

Un dezavantaj important al algoritmilor asincroni este acela ca ei pot distruge proprietatea de convergentape care o are un algoritm atunci cand este executat sincron. Astfel sunt cazuri in care trebuiesc impuse limitariin ceea ce privesti intarzierile care pot exista pentru a se garanta convergenta algoritmului. In toate cazurile,analiza algorimilor asincroni este considerata a fi mai dificila decat cea a algoritmilor sincroni.

Algoritmii asincroni pot oferi un avantaj important in ceea ce priveste metodele de relaxare si acest lucrupoate fi observat analizand metodele Jacobi si Seidel-Gauss pentru rezolvarea problemelor de punct fix.

Metoda Jacobi genereaza un sir x(t) = (x1(t), . . . , xn()t) cu ajutorul relatiei

xi(t+ 1) = fi(x1(t), . . . , xn(t)), i = 1, . . . , n (3)

plecand de la un set de date initiale.Metoda Seidel-Gauss foloseste o formula ce utilizeaza cea mai recenta updatare a unei variabile:

x1(t+ 1) = fi(x1(t), . . . , xn(t))

x2(t+ 1) = fi(x1(t+ 1), x2(t), . . . , xn(t))

. . . . . . . . .

xn(t+ 1) = fi(x1(t+ 1), . . . , xn−1(t+ 1), xn(t))

6

Page 7: Probleme de sincronizare in algoritmii paraleli si distribuitiid.inf.ucv.ro/~cpopirlan/ecnpd/curs3.pdf · Figure 1: Implementarea sincronizarii globale O alta abordare este aceea

Figure 7: Metoda Jacobi - algoritm sincron si asincron

Metoda Jacobi este mai potrivita pentru implementari distribuite si este in esenta echivalenta cu algoritmidistribuiti sincroni. Metoda Seidel-Gauss nu este foarte potrivita pentru implementari paralele si distribuite.Este totusi posibil ca algoritmii asincroni sa mareasca viteza metodei Seidel-Gauss in comparatie cu metodaJacobi fara sa sacrifice paralelismul metodei Jacobi (figura 7).

7