Peter Buchholz (Tel.: (0231) 755 4746),
Email: peter.buchholz@udo.edu
Sprechstunde: Donnerstag 10:00-11.30 und n.V.
Moderne PCs sind mit Mehrkernprozessoren und leistungsfähigen Graphikkarten ausgestattet. Darüber hinaus stehen oftmals mehrere vernetzte PCs zur Verfügung. Um die dadurch vorhandenen Ressourcen an Rechenkapazität und Speicherplatz zu nutzen, müssen für rechen- und speicherintensive Anqwendungen parallele Algorithmen eingesetzt und implementiert werden. Die Vorlesung führt in die Grundlagen der parallelen Programmierung von vernetzten PCs ein. Dazu wird ein kurzer Überblick über parallele Rechnerarchitekturkonzepte gegeben. Anschließend beschäftigen wir uns mit theoretischen Konzepten zur Realisierung und Bewertung paralleler Programme sowie parallelen Programmierparadigmen. Den Schwerpunkt der Vorlesung bilden konkrete Programmierkonzepte und -bibliotheken zur Realisierung paralleler Software. Es werden der Standard MPI zur so genannten Message-Passing-Programmierung, sowie Pthreads und OpenMP zur Thread-Programmierung vorgestellt. Falls noch Zeit bleibt, soll darüber hinaus eine kurze Einführung in CUDA zur Programmierung von Graphikkarten gegeben werden. Auch wenn Anbindungen der genannten Programmierumgebungen an unterschiedliche Programmiersprachen existieren, sind die Sprachen C und C++ doch die am weitesten verbreiteten Sprachen zur Realisierung paralleler Programme. Die Vorlesung nutzt deshalb C und C++ als Basissprachen und stellt die konkreten Algorithmen in diesen Sprachen vor. Grundkenntnisse in C und/oder C++ werden deshalb vorausgesetzt oder müssen vor Beginn des praktischen Teils der Vorlesung erworben werden.
Anwendungsbeispiele werden insbesondere aus dem Bereich der numerischen Mathematik gewählt, da diese Anwendungen ein sehr großes Parallelisierungspotenzial besitzen. Es werden nur numerische Basisprobleme wie die Multiplikation von Matrizen oder die Lösung linearer Gleichungssysteme untersucht, so dass über die im Informatikstudium üblichen Mathematikkenntnisse hinaus keine weiteren spezifischen mathematischen Vorkenntnisse erforderlich sind.
1) | Einführung | Folien |
2) | Parallele Rechnerarchitekturen | Folien |
3) | Parallele Programmiermodelle | Folien |
4) | Message-Passing-Programmierung mit MPI | Folien |
5) | Thread-Programmierung mit Pthreads und OpenMP | Folien |
6) | Paralleles Rechnen auf GPUs und hybride Ansätze | Folien |
7) | Beispiele paralleler Algorithmen | Folien |
Folien werden vorlesungsbegeitend zur Verfügung gestellt!
In den Übungen sollen die theoretischen und konzeptionellen Inhalte der Vorlesung vertieft werden. Insbesondere soll das praktische Arbeiten in den drei behandleten Programmierumgebungen eingeübt werden. Dies setzt voraus, dass die Teilnehmerinnen und Teilnehmer, die Übungsaufgaben praktisch bearbeiten, also wirklich programmieren! MPI, Pthreads, openMP und CUDA sind als freie Software unter Linux verfügbar.
Die Bearbeitung der Übungsaufgaben ist nicht Voraussetzung für die Modulprüfung, wird aber trotzdem dringend empfohlen.
Es ist geplant, an den folgenden Terminen Übungen durchzuführen. Diese Termine sind vorläufig und können sich noch ändern.
Datum | Inhalt | Ü-Blatt |
25.10. | Blatt 1 (grundlegende Konzepte) | Blatt 1 |
8.11. | Blatt 2 (Caches) | Blatt 2 |
22.11. | Blatt 3 (Speicherkonsistenz, Schliefenparallelität, Threads)) | Blatt 3 |
6.12. | Blatt 4 (MPI) | Blatt 4 |
20.12. | Blatt 5 (MPI) | Blatt 5 |
10.1. | Blatt 6 (PThreads) | Blatt 6 |
24.1. | Blatt 7 (OpenMP) | Blatt 7 |
Übungsblätter werden als pdf-Dateien übungsbegleitend zur Verfügung gestellt.
Große Teile der Vorlesung basieren auf dem folgenden Buch
Das Buch ist als eBook in der TU-Bibliothek frei verfügbar.
Weitere relevante Bücher
Web-Seiten zur den verwendeten Programmierbibliotheken