Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

C++ LEDA SWP SS 08Herresthal & Schepers1 Softwarepraktikum C++ LEDA Parallelisierung - Partitionierung - Zusammenführung www.schepers.us/swp/index.htm.

Ähnliche Präsentationen


Präsentation zum Thema: "C++ LEDA SWP SS 08Herresthal & Schepers1 Softwarepraktikum C++ LEDA Parallelisierung - Partitionierung - Zusammenführung www.schepers.us/swp/index.htm."—  Präsentation transkript:

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!


Herunterladen ppt "C++ LEDA SWP SS 08Herresthal & Schepers1 Softwarepraktikum C++ LEDA Parallelisierung - Partitionierung - Zusammenführung www.schepers.us/swp/index.htm."

Ähnliche Präsentationen


Google-Anzeigen