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

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

Algorithmen und Datenstrukturen
der Universität Oldenburg
Sortieren I - Bubblesort -
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Felder sortieren. Aufgabe: Die Zahlen eines Feldes sollen der Größe (zuerst die kleinste Zahl) nach sortiert werden.
WS 03/04 Algorithmentheorie 03 - Randomisierung Prof. Dr. S. Albers Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (09 - Weitere Sortierverfahren) Prof. Th. Ottmann.
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
Bubbelsort und Quicksort Vortrag von Rolf Heitzenröder
Informatikunterricht mit Java
Java programmieren mit JavaKara
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Rekursion mit Listen: Quicksort
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
Parallel Programming Proofs ( yay !)
Informatik 1 Letzte Übung.
Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz.
Dynamische Datentypen
2.4 Rekursion Klassifikation und Beispiele
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Grundlegende Sortieralgorithmen
Programmieren in C Sortieren, Suchen
Javelin Internet-based parallel computing using Java.
Sortieralgorithmen Greedy Sortieren: Sortieren durch Auswahl, Einfügen und Austauschen Divide-and-Conquer-Sortieren: Quicksort und merge sort Foliensatz.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Selection-Sort Insertion-Sort Bubble-Sort.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Rekursion-
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung Binärer Suchbaum I-
M a r c – o l i v e r p a h l Informatik II – Kapitel 12 „Sortier-Algorithmen“ Zusammenfassung des Kapitel 12 Küchlin, Weber, Einführung in die Informatik,
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Tutorium Software-Engineering SS14 Florian Manghofer.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Kapitel 4 Traveling Salesman Problem (TSP)
Einführung in die Wahrscheinlichkeitsrechnung
Motoremissionen mobiler Anlagen – Stand der Technik
Suchen und Sortieren.
Das Verdauungssystem Präsentiert von Theresa
Neue Unterrichtsmaterialien zur Teilchenphysik Philipp Lindenau CERN | Herzlich willkommen! Präsentation mit Notizen hinterlegt!
Aktuelle Aspekte des Europäischen Zivilprozessrechts
Eine kleine Einführung in das Projekt „Mausefallenauto“
Produktionsfaktoren 1 Ökonomische Handlungsprinzipen
Rekursion – Speicherverwaltung
Von Cem, Maurice und lars
 Präsentation transkript:

C++ LEDA SWP SS 08Herresthal & Schepers1 Softwarepraktikum C++ LEDA Parallelisierung - Partitionierung - Zusammenführung

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

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

Herresthal & Schepers4 C++ LEDA SWP SS 08 Array der Größe Ausgangssituation

Herresthal & Schepers5 C++ LEDA SWP SS Schritt: Teilen (und herrschen) Array der Größe Pivot: Unsortierte Teilfelder Sortierte Teilfelder Pivot 2. Schritt: Partitionierung

Herresthal & Schepers6 C++ LEDA SWP SS Schritt: Zusammenführung Restriktion: Thread_num-1 Vertauschungen (hier 2) Pivot Pivot:5

Herresthal & Schepers7 C++ LEDA SWP SS Schritt: Zusammenführung Restriktion: Thread_num-1 Vertauschungen (hier 2) Pivot Pivot: Und nun… weiter in der Rekursion

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

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)

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

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

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)

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 ^41,645871,515951,393141, ^50,958710,662180,618550, ^60,001830,001120,001110,00113 Threads Das Array [10^7] besteht aus Integer (Zufallszahlen). Die Zeiteinheit ist Sekunden.

Herresthal & Schepers14 C++ LEDA SWP SS 08 Teilproblemgröße ^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).

Herresthal & Schepers15 C++ LEDA SWP SS 08 Benchmarks

Herresthal & Schepers16 C++ LEDA SWP SS 08 Fragen?

Herresthal & Schepers17 C++ LEDA SWP SS 08 Ende Danke für ihre Aufmerksamkeit!