Sunteți pe pagina 1din 20

ALGORITMUL FLOYD-WARSHALL

PREZENTAREA ALGORITMULUI PARALEL IMPLEMENTAT N C FOLOSIND MPI

INTRODUCERE
Algoritmul Floyd-Warshall este folosit n diverse domenii des ntalnite, de la controlul avioanelor de pe un anumit aeroport pn la jocuri informatice, rolul principal fiind acela de gsire a drumului de cost minim ntre un obiect principal i o tint anume.

Fie G=(V, E) un graf orientat, unde V are n elemente (n noduri) i E are m elemente (m muchii) memorat prin matricea ponderilor. Se cere ca pentru dou noduri x,y citite s se determine lungimea minim a drumului de la nodul x la nodul y. Prin lungimea unui drum nelegem suma costurilor arcelor care l alcatuiesc.

PAII ALGORITMULUI
Se genereaza matricea costurilor
1 1
2 5

3 3

4 1

0
1 0 5

2
0

8 0

2
3

Se ncearc pentru oricare pereche de noduri i,j s se obin drumuri mai scurte prin noduri intermediare k. Acest lucru se determin comparnd lungimea lanului a[i,j] cu lungimea lanului care trece prin k( k lund valori de la 1 la n) i dac: a[i,j] > a[i,k]+a[k,j] atunci se atribuie: a[i,j]:= a[i,k]+a[k,j]

PSEUDOCOD SECVENIAL
Input: n numrul de arce; a[0..n-1, 0..n-1] matricea de cost; Output: Matricea a coninnd cel mai scurt drum dintre dou noduri.
for k 0 to n-1 for k 0 to n-1 for j 0 to n-1 temp = a[i][k] + a[k][j] if temp < a[i][j] then a[i][j] temp endfor endfor endfor

PSEUDOCOD SECVENIAL
Pseudocodul anterior poate fi uor de modificat pentru a salva i drumurile efective. Reconstituirea drumurilor se face n mod recursiv.
for k 0 to n-1 for k 0 to n-1 for j 0 to n-1 temp = a[i][k] + a[k][j] if temp < a[i][j] then a[i][j] temp path[i][j] k endfor endfor endfor

COMPLEXITATEA ALGORITMULUI SECVENIAL


numrul maxim de iteraii N fiecare iteraie pentru N noduri

pentru fiecare nod N-1 noduri intermediare

Algoritmul are complexitatea de calcul n timp: O(N3)

ALGORITMUL PARALEL
n implementarea paralel a algoritmului Floyd-Warshall vom avea de luat n considerare gsirea unor soluii pentru:
Partiionarea algoritmului Comunicarea dintre procese Maparea pe coloane sau pe rnduri Deadlocks

PARTIIONARE
Algoritmul secvenial execut aceeai operaie de n3 ori n algoritmul paralel aplicm domain decomposition i mprim

matricea a n cele n2 elementele ale sale. Fiecare element va avea asociat cte un task Task-uri

a[i,j ] este obinut din procesul corespunztor lui i,j ( i * n +j) ex: a[2,3] obinut n urma procesului 2*5 + 3 = 13

PARTIIONARE
Algoritmul secvenial execut aceeai operaie de n3 ori.

n algoritmul paralel fiecare din cele n2 elementele ale

matricei a va avea asociat cte un task. Vom aplica domain decomposition.

a) Prelucrm a[2, 3]

b) Pentru k = 1, accesm a[1, 3] si a[2, 1]

c) a[k, x] trimite valoarea sa catre a[x, y]

d) a[x, k] trimite valoarea sa catre a[y, x]

10

COMUNICAREA DINTRE PROCESE


Prelucrarea elementului a[i, j] necesit valorile elementelor a[i, k] si

a[k, j]. Astfel la o iteraie k: fiecare element din rndul k transmite valoarea sa elementelor din coloana n care se afl; fiecare element din coloana k transmite valoarea sa elementelor din rndul n care se afl; Putem actualiza toate elementele din a simultan n aceeai iteraie k, fiindc actualizarea lui a[i, j] nu depinde de actualizarea elementelor a[i, k] si a[k, j]: a[i, k] := min(a[i, k], a[i, k] + a[k, k]) a[k, j] := min(a[k, j], a[k, k] + a[k, j])

11

MAPAREA PE COLOANE SAU PE RNDURI


Mapare pe randuri
Mapare pe coloane

Indiferent de varianta aleas, broadcast-ul dintre dou procese va dura: ceil(log p) * ( + n/) Maparea pe rnduri este mai uoar i mai eficient!

Deadlock
Deadlock: atunci cnd un proces ateapt dup o condiie care nu va fi niciodat adevrat. Exemplu de situaii: 2 procese: amndou primesc nainte s trimit; Send tag-ul nu este acelasi cu receive tag ;
float a, b, c; int mpiRank; // Rang-ul procesului MPI MPI_Status status; ... if (mpiRank == 0) { MPI_Recv(&b, 1, MPI_FLOAT, 1, MPI_Send(&a, 1, MPI_FLOAT, 1, } else if (mpiRank == 1) { MPI_Recv(&a, 1, MPI_FLOAT, 0, MPI_Send(&b, 1, MPI_FLOAT, 0, }

0, MPI_COMM_WORLD, &status); 0, MPI_COMM_WORLD);

0, MPI_COMM_WORLD, &status); 0, MPI_COMM_WORLD);

13

IMPLEMENTAREA PARALEL
void( compute_shortest_paths( int id, int p, dtype **a, int n){ int i,j,k; int offset; /*local index of broadcast row*/ int root; /*process controlling row to be bcast*/ int *tmp; /*holds the broadcast row*/ tmp =(dtype*) malloc (n*sizeof(dtype)); for (k = 0; k < n; k++){ root = BLOCK_OWNER(k,p,n); if (root == id) { offset = k* BLOK_LOW(id,p,n); for(j = 0; j < n; j++) tmp[j] = a[offset][j]; } MPI_BCAST(tmp, n, MPI_TYPE, root, MPI_COMM_WORLD); for( i = 0; i < BLOCK_SIZE(id, p, n); i++) for (j = 0; j < n; j++) a[i][j]=MIN(a[i][j],a[i][k]+tmp[j]); }

14

ANALIZAREA PERFORMANEI
Cele dou loop-uri interne: (n2 / p) Broadcast ctre p procesoare: (n log p) Loop-ul exterior: (n) Complexitate final: (n * (n log p + n2 / p)) =

(n3 / p + n2 log p)

15

ANALIZAREA TIMPULUI DE EXECUIE(1)

n n / p n n log p ( 4n / )
Message-passing time Messages per broadcast Iterations of outer loop Cell update time

Iterations of inner loop Iterations of middle loop Iterations of outer loop

16

ANALIZAREA PERFORMANTEI
Timpul total de execuie este estimativ, deoarece se ignor faptul c pot fi suprapuneri ntre procesare i comunicare:
P 0
P 1 P 2 P 3 Send Ateapt Proceseaz

17

ANALIZAREA PERFORMANTEI
Se observ n figura anterioar c spre exemplu procesul 1 nu poate

s i updateze poriunea lui de matrice pn cnd nu primete rndul 0 de la procesul 0.


Din acest motiv, dup fiecare iteraie, fiecare proces ateapt

aceeai durat de timp: ceil(log p) *

18

ANALIZAREA TIMPULUI DE EXECUIE(2)

n n / p n n log p log p 4n /
Message transmission Message-passing time Messages per broadcast Iterations of outer loop Cell update time

Iterations of inner loop Iterations of middle loop Iterations of outer loop

19

ANALIZAREA PERFORMANEI
Performana prezis vs. performana actual Timpul de executie (sec) Procesul 1 2 Prezis 25.54 13.02 Actual 25.54 13.89

3
4 5 6 7 8

9.01
6.89 5.86 5.01 4.40 3.94

9.60
7.29 5.99 5.16 4.50 3.98

20

BIBLIOGRAFIE
Cormen, Thomas H., Leiserson, Charles E., Rivest,

Ronald L. (1990). Introduction to Algorithms (1st ed.). MIT Press and McGraw-Hill. Section 26.2, "The Floyd Warshall algorithm", pp. 558565;

S-ar putea să vă placă și