MERGESORT PARALEL T.G. Structuri Multiprocesor 10. 01. 2012
Prezentarea problemei MergeSort: algoritm de tip divide et impera, de complexitate O(n log n) pentru sortarea unui vector Pasi: 7 3 6 12
7 3 7
6 12 3
6
3 7
12 6 12
3 6 7 12 MERGESORT PARALEL
2
Paralelizare in MPI Numar fix de noduri, dat de la tastatura Fiecare nod (thread) se poate ocupa de cate un subsir al setului de baza • adancimea arborelui este fixa 1000 elem • comunicatia prin mesaje: de sus NOD 0 in jos la transmiterea datelor & 500 elem 500 elem de jos in sus la transmiterea NOD 1 NOD 2 rezultatelor 250 elem 250 elem 250 elem 250 elem • nodurile-frunza: aplica NOD 3 NOD 4 NOD 5 NOD 6 quicksort pentru a-si sorta sau: elementele
1000 elem
NOD 0 500 elem
500 elem
NOD 0 250 elem
NOD 0
NOD 2 250 elem
NOD 1
250 elem
NOD 2
250 elem
• 4 noduri in loc de 7 • fiecare nod realizeaza o munca aproximativ egala
NOD 3 MERGESORT PARALEL
3
Paralelizare in OpenMP
Numar variabil de thread-uri, in functie de cat este nevoie Fiecare thread lucreaza pe propriul subsir din sir, interclasand cele doua jumatati (sortate) ale acestuia Memorie partajata: nu mai este nevoie de transmiterea datelor intre fire de executie; pe un “arbore” se porneste de jos in sus Fara quicksort! 8 elem Thread 0 4 elem
4 elem
Thread 0 2 elem
Thread 1 2 elem
Thread 0
Thread 1
2 elem
Thread 2
2 elem
Thread 3
14 426 6317 7471 6 237 327 778 88 Thrd 0 ThrdThrd 1 Thrd 0 2 Thrd 3
Thrd 0
Thrd 1
MERGESORT PARALEL
4
Paralelizare in pthread Algoritm asemanator OpenMP Numarul initial de thread-uri este 2^n (cea mai mica putere a lui 2 >= n) si ajunge in final la 1 Fork/join pentru lansarea si reunirea thread-urilor
MERGESORT PARALEL
5
MPI
Rezultate OpenMP
3.8 3.7 3.6 3.5 3.4
100 500 1000 10000 elemente elemente elemente elemente
2 1.5 1 0.5 0
pthread 3 2 1 0
MERGESORT PARALEL
6
Rezultate comparative 4 3.5 3 2.5
100 500 1000 10000
2 1.5 1 0.5
0 MPI
OpenMP
pthread
MERGESORT PARALEL
7
Concluzii Timpul rularii in MPI cu un numar fix de 100 noduri se mentine constant, in jur de 3 secunde OpenMP si pthread s-au dovedit a fi mult mai rapide in fiecare caz OpenMP este mai rapid decat pthread: este modelul de programare cu cele mai bune rezultate
MERGESORT PARALEL
8