Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Schwanhild Adelsberger Geändert vor über 10 Jahren
1
C++ LEDA SWP SS 08Herresthal & Schepers1 Softwarepraktikum C++ LEDA Parallelisierung - Partitionierung - Zusammenführung www.schepers.us/swp/index.htm
2
Herresthal & Schepers2 C++ LEDA SWP SS 08 Quick- Sort void quicksort( &array, int begin, int end) { int middle; if (begin < end) { middle = partition(array, begin, end); quicksort(array, begin, middle); quicksort(array, middle+1, end); } return; } Klassischer Quicksort Alogirithmus - auf einem Array - und mit einer Partitionierungsfunktion
3
Herresthal & Schepers3 C++ LEDA SWP SS 08 Aufgabe Parallelisierung des Partitionierungsschrittes von Quicksort Paralleles Vertauschen der sortierten Elemente Durchführung von Benchmarks
4
Herresthal & Schepers4 C++ LEDA SWP SS 08 Array der Größe 16 3461093159092325 Ausgangssituation
5
Herresthal & Schepers5 C++ LEDA SWP SS 08 1. Schritt: Teilen (und herrschen) Array der Größe 16 5232909513901643 Pivot: 022391359901346 Unsortierte Teilfelder Sortierte Teilfelder Pivot 2. Schritt: Partitionierung
6
Herresthal & Schepers6 C++ LEDA SWP SS 08 3. Schritt: Zusammenführung Restriktion: Thread_num-1 Vertauschungen (hier 2) 022391359901346 Pivot 94 9913 Pivot:5
7
Herresthal & Schepers7 C++ LEDA SWP SS 08 3. Schritt: Zusammenführung Restriktion: Thread_num-1 Vertauschungen (hier 2) 00223 4 Pivot 6 999 135 13 Pivot:5 0223 4 135 13 0 5 6 999 Und nun… weiter in der Rekursion
8
Herresthal & Schepers8 C++ LEDA SWP SS 08 void qsort(int begin, int end) - Pivot Element bestimmen (erstes Element) - Ort der Eigentlichen Rekursion - Aufruf der Funktion parallel_partition - Berechnung der Teilfelder (Ablage der Parameter in eigene Klasse) - Anlegen und Aufrufen der Threads (Nach Beendigung der Threads) -sequentielle Berechnung der Zusammenführung - Aufrufen von n-1 Threads mit der Swap Funktion int parallel_partition(int b, int e) Wichtige Teilbereiche
9
Herresthal & Schepers9 C++ LEDA SWP SS 08 Class par Die Klasse par (Parameter) besteht aus folgenden public int Werten: Werte die Partitionierungsfunktion wichtig sind: int l; => linkes Element der Partition int r;=> rechtes Element der Partition int i;=> Rückgabewert (Position des Pivot Elementes)
10
Herresthal & Schepers10 C++ LEDA SWP SS 08 Class par Werte die für die swap Funktion wichtig sind int l_swap;=> Beginn des linken Intervalls int r_swap;=> Beginn des rechten Intervalls int swap_amount; => Anzahl der zu tauschenden Elemente
11
Herresthal & Schepers11 C++ LEDA SWP SS 08 void partition(void par) Klassische Partitionierungsfunktion von Quicksort Besonderheit: Übergabe der Parameter durch einen eigenen Datentyp void swap(void par) Vertauscht intern sequentiell Besonderheit: Übergabe der Parameter durch einen eigenen Datentyp
12
Herresthal & Schepers12 C++ LEDA SWP SS 08 Thread 1…..Thread n-1Thread n void partition(void p) Thread 1…..Thread n-1 void Swap(void p)
13
Herresthal & Schepers13 C++ LEDA SWP SS 08 Fragestellung: Speedup bei Nutzung von mehreren Threads Benchmarks Das Testsystem ist ein Quadcore - Xeon Prozessot, 8 Gb Ram, ubuntu 64-bit, das Program ist kompiliert mit gcc 4.1. Teilproblemgröße 1234 10^41,645871,515951,393141,44904 10^50,958710,662180,618550,61098 10^60,001830,001120,001110,00113 Threads Das Array [10^7] besteht aus Integer (Zufallszahlen). Die Zeiteinheit ist Sekunden.
14
Herresthal & Schepers14 C++ LEDA SWP SS 08 Teilproblemgröße 1234 10^41,6458s1,0851,1841,135 10^50,9587s1,4471,5491,156 10^60,0018s1,6331,6481,619 Threads Benchmarks Speedup bei Nutzung von mehreren Threads Folgerung: Fragestellung ? - Ein Speedup ist zu erkennen Das Testsystem ist ein Quadcore - Xeon Prozessot, 8 Gb Ram, ubuntu 64-bit, das Program ist kompiliert mit gcc 4.1. Das Array [10^7] besteht aus Integer (Zufallszahlen).
15
Herresthal & Schepers15 C++ LEDA SWP SS 08 Benchmarks
16
Herresthal & Schepers16 C++ LEDA SWP SS 08 Fragen? www.schepers.us/swp/
17
Herresthal & Schepers17 C++ LEDA SWP SS 08 Ende www.schepers.us/swp/ Danke für ihre Aufmerksamkeit!
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.