Softwarepraktikum C LEDA Parallelisierung Partitionierung Zusammenfhrung www schepers

  • Slides: 17
Download presentation
Softwarepraktikum C++ LEDA Parallelisierung - Partitionierung - Zusammenführung www. schepers. us/swp/index. htm C++ LEDA

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

Klassischer Quicksort Alogirithmus - auf einem Array - und mit einer Partitionierungsfunktion void quicksort(<int>

Klassischer Quicksort Alogirithmus - auf einem Array - und mit einer Partitionierungsfunktion void quicksort(<int> &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; } Quick- Sort C++ LEDA SWP SS 08 Herresthal & Schepers 2

 Parallelisierung des Partitionierungsschrittes von Quicksort Paralleles Vertauschen der sortierten Elemente Durchführung von Benchmarks

Parallelisierung des Partitionierungsschrittes von Quicksort Paralleles Vertauschen der sortierten Elemente Durchführung von Benchmarks Aufgabe C++ LEDA SWP SS 08 Herresthal & Schepers 3

Array der Größe 16 5 2 3 2 9 0 9 5 1 3

Array der Größe 16 5 2 3 2 9 0 9 5 1 3 9 0 1 6 4 3 Ausgangssituation C++ LEDA SWP SS 08 Herresthal & Schepers 4

1. Schritt: Partitionierung Teilen (und herrschen) 2. Array der Größe 16 Pivot: 5 2

1. Schritt: Partitionierung Teilen (und herrschen) 2. Array der Größe 16 Pivot: 5 2 3 2 9 0 9 5 1 3 9 0 1 6 4 3 Unsortierte Teilfelder Sortierte 0 2 2 3 9 Pivot C++ LEDA SWP SS 08 Teilfelder 1 3 5 9 9 Pivot Herresthal & Schepers 0 1 3 4 6 Pivot 5

3. Schritt: Zusammenführung Restriktion: Thread_num-1 Vertauschungen (hier 2) 0 2 2 3 9 4

3. Schritt: Zusammenführung Restriktion: Thread_num-1 Vertauschungen (hier 2) 0 2 2 3 9 4 Pivot C++ LEDA SWP SS 08 1 3 5 9 1 9 3 Pivot Herresthal & Schepers Pivot: 5 0 1 9 3 9 4 9 6 Pivot 6

3. Schritt: Zusammenführung Restriktion: Thread_num-1 Vertauschungen (hier 2) 0 2 2 3 4 1

3. Schritt: Zusammenführung Restriktion: Thread_num-1 Vertauschungen (hier 2) 0 2 2 3 4 1 3 5 1 3 Pivot 0 2 2 3 4 1 3 5 1 3 0 Pivot: 5 0 9 9 9 6 Pivot 9 9 9 6 Und nun… weiter in der Rekursion C++ LEDA SWP SS 08 Herresthal & Schepers 7

Wichtige Teilbereiche void qsort(int begin, int end) - Pivot Element bestimmen (erstes Element) -

Wichtige Teilbereiche void qsort(int begin, int end) - Pivot Element bestimmen (erstes Element) - Ort der Eigentlichen Rekursion - Aufruf der Funktion parallel_partition int parallel_partition(int b, int e) - 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 C++ LEDA SWP SS 08 Herresthal & Schepers 8

Class par Die Klasse par (Parameter) besteht aus folgenden public int Werten: Werte die

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) C++ LEDA SWP SS 08 Herresthal & Schepers 9

Class par Werte die für die swap Funktion wichtig sind int l_swap; => Beginn

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 C++ LEDA SWP SS 08 Herresthal & Schepers 10

void partition(void par) Klassische Partitionierungsfunktion von Quicksort Besonderheit: Übergabe der Parameter durch einen eigenen

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 C++ LEDA SWP SS 08 Herresthal & Schepers 11

Thread 1 …. . Thread n-1 Thread n void partition(void p) C++ LEDA SWP

Thread 1 …. . Thread n-1 Thread n void partition(void p) C++ LEDA SWP SS 08 Thread 1 …. . Thread n-1 void Swap(void p) Herresthal & Schepers 12

Benchmarks Fragestellung: „Speedup“ bei Nutzung von mehreren Threads Teilproblemgröße Threads 1 2 3 4

Benchmarks Fragestellung: „Speedup“ bei Nutzung von mehreren Threads Teilproblemgröße Threads 1 2 3 4 10^4 1, 64587 1, 51595 1, 39314 1, 44904 10^5 0, 95871 0, 66218 0, 61855 0, 61098 10^6 0, 00183 0, 00112 0, 00111 0, 00113 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). Die Zeiteinheit ist Sekunden. C++ LEDA SWP SS 08 Herresthal & Schepers 13

Benchmarks Folgerung: Fragestellung „Speedup“ bei Nutzung von mehreren Threads ? Teilproblemgröße - Ein Speedup

Benchmarks Folgerung: Fragestellung „Speedup“ bei Nutzung von mehreren Threads ? Teilproblemgröße - Ein Speedup ist zu erkennen Threads 1 2 3 4 10^4 1, 6458 s 1, 085 1, 184 1, 135 10^5 0, 9587 s 1, 447 1, 549 1, 156 10^6 0, 0018 s 1, 633 1, 648 1, 619 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). C++ LEDA SWP SS 08 Herresthal & Schepers 14

Benchmarks C++ LEDA SWP SS 08 Herresthal & Schepers 15

Benchmarks C++ LEDA SWP SS 08 Herresthal & Schepers 15

Fragen? www. schepers. us/swp/ C++ LEDA SWP SS 08 Herresthal & Schepers 16

Fragen? www. schepers. us/swp/ C++ LEDA SWP SS 08 Herresthal & Schepers 16

Danke für ihre Aufmerksamkeit! Ende www. schepers. us/swp/ C++ LEDA SWP SS 08 Herresthal

Danke für ihre Aufmerksamkeit! Ende www. schepers. us/swp/ C++ LEDA SWP SS 08 Herresthal & Schepers 17