Hauptinhalt

Verteilte Programmierung und numerische Algorithmen

Vorlesung WS 17/18 (3 SWS Vorlesung, Nr. 042415, 1 SWS Übung, Nr. 042416 )

Verteilte Programmierung und numerische Algorithmen

Zeit:    
  • Di 10:15 - 11:45, OH 16 - R. 205
  • Mi 10:15 - 11:45, OH 16 - R. 205

 

 

Veranstalter:

Peter Buchholz (Tel.: (0231) 755 4746),

Email: peter.buchholz@udo.edu

Sprechstunde: Donnerstag 10:00-11.30 und n.V.

 

Inhalt der Vorlesung:

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.

 

Gliederung der Vorlesung
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!

Übungen

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.

Literatur

Große Teile der Vorlesung basieren auf dem folgenden Buch

  • T. Rauber, G. Rünger. Parallele Programmierung. Springer 3. Aufl. 2012

Das Buch ist als eBook in der TU-Bibliothek frei verfügbar.

Weitere relevante Bücher

  • P. Pacheco. An Introduction to Parallel Programming. Morgan Kaufman 2011.
  • D. P. Bertsekas, J. N. Tsitsiklis. Parallel and Distributed Computation - Numerical Methods. Prentice Hall 1989.
  • S. Hoffmann, R. Lienhart. OpenMP. Springer Informatik im Fokus 2008.
  • W. Gropp; T. Hoefler, R. Thakur, E. Lusk. Using Advanced MPI:Modern Features of the Message-Passing Interface. MIT Press 2014.
  • R. Farber. CUDA: application design and development. NVIDIA 2011.

Web-Seiten zur den verwendeten Programmierbibliotheken