1 / 17

Softwarepraktikum C++ LEDA

Parallelisierung Partitionierung Zusammenführung. Softwarepraktikum C++ LEDA. www.schepers.us/swp/index.htm. Quick- Sort. Klassischer Quicksort Alogirithmus auf einem Array und mit einer Partitionierungsfunktion. void quicksort(<int> &array, int begin, int end) ‏ { int middle;

risa-king
Download Presentation

Softwarepraktikum C++ LEDA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Parallelisierung Partitionierung Zusammenführung SoftwarepraktikumC++ LEDA www.schepers.us/swp/index.htm Herresthal & Schepers

  2. Herresthal & Schepers Quick- Sort • 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; }

  3. Herresthal & Schepers • Parallelisierung des Partitionierungsschrittes von Quicksort • Paralleles Vertauschen der sortierten Elemente Aufgabe • Durchführung von Benchmarks

  4. 5 2 3 2 9 0 9 5 1 3 9 0 1 6 4 3 Array der Größe 16 Ausgangssituation Herresthal & Schepers

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

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

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

  8. Herresthal & Schepers void qsort(int begin, int end) Wichtige Teilbereiche • - 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

  9. Herresthal & Schepers 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 & Schepers 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 & Schepers 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 & Schepers

  13. Benchmarks Fragestellung: „Speedup“ bei Nutzung von mehreren Threads Threads Teilproblemgröße 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. Herresthal & Schepers

  14. Benchmarks ? Folgerung: Fragestellung „Speedup“ bei Nutzung von mehreren Threads - Ein Speedup ist zu erkennen Threads Teilproblemgröße 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). Herresthal & Schepers

  15. Benchmarks Herresthal & Schepers

  16. Herresthal & Schepers Fragen? www.schepers.us/swp/

  17. Herresthal & Schepers Ende Danke für ihre Aufmerksamkeit! www.schepers.us/swp/

More Related