Parallele Programmierung mit C++

Ziel der Vorlesung ist es, parallele Anwendungen insbesondere auf technischer Ebene zu modellieren und effizient zu implementieren. Die Inhalte sind sehr praxisorientiert und bieten eine Übersicht der gängigsten Parallelisierungstechniken und Architekturen. C++ kommt hier zum Einsatz, da es die einzige moderne Programmiersprache ist, die bei allen vorgestellten Techniken eingesetzt werden kann.

Termine

  • Vorlesung: Donnerstag, 14-16 Uhr, Helmholtzstraße 18, Raum E20. Am 11. und 12. Juni finden zwei Vorlesungen hintereinander statt, d.h. der Übungstermin am 12. Juni wird überwiegend für die Vorlesung genutzt. Am 16. Juli findet wegen einer terminlichen Kollision keine Vorlesung statt. Die letzte Vorlesung ist somit am 9. Juli.
  • Übungen: Freitag, 14-16 Uhr, Helmholtzstraße 22, Raum E18. Der letzte Übungstermin ist am 3. Juli.

Inhalt

  • Modellierung paralleler Systeme mit der Prozessalgebra CSP
  • Architekturen paralleler Systeme, Speichermodelle
  • Parallelisierungstechniken: Threads, OpenMP, MPI, GPUs mit CUDA und OpenCL
  • Design-Patterns paralleler Systeme

Voraussetzungen

Es werden einführende Vorlesungen in die praktische Informatik vorausgesetzt. Hilfreich (aber nicht zwingend notwendig) wären grundlegende Kenntnisse in

  • systemnaher Programmierung,
  • Unix/Linux einschließlich der Shell-Ebene und
  • Netzwerkprogrammierung, insbesondere TCP/IP und BSD-Sockets, wie sie beispielsweise in Systemnahe Software II vermittelt werden.

Eine Einführung in C++ findet zu Beginn in den Übungen statt. Wer keine Vorkenntnisse zu C++ hat, sollte diese Gelegenheit nutzen.

Prüfungen

Die Vorlesung ist für die Master-Studiengänge Mathematik, Wirtschaftsmathematik, Informatik und Medieninformatik vorgesehen. Bei den Bachelor-Studiengängen Informatik und Software-Engineering kann dies als Schwerpunktfach gewählt werden. (Die Einzelheiten dazu lassen sich dem Modulhandbuch entnehmen.) Die Prüfung erfolgt mündlich zu individuell verabredeten Terminen.

Vorlesungen

Begleitend zur Vorlesungen werden hier kapitelweise die zugehörigen Vortragsfolien und ggf. weitere Materialien veröffentlicht:

Übungen

  • Melden Sie sich bitte für die Teilnahme in den Übungen bei SLC an.
  • Die Übungen sind zeitintensiv und integraler Teil einer praxisorientierten Vorlesung. Die Inhalte aus den Übungen sind prüfungsrelevant, die Teilnahme an den Übungen ist aber nicht Voraussetzung zur Prüfungsanmeldung.
  • Blatt 1 (Abgabe am 24. April; zu CSP und zur Einführung in C++), Materialien: Makefile, gcc-makedepend (Manualseite), Nim.hpp, Beispiellösung: handshake.csp01.tar.gz (Nim-Spiel)
  • Blatt 2 (Abgabe am 8. Mai; zu Nichtdeterminismus in CSP und zu dynamischen Polymorphismus in C++), Beispiellösung: dnsreq.csp, 02.tar.gz (Nim-Spiel)
  • Blatt 3 (Abgabe am 22. Mai; zu Fork-and-Join-Pattern mit Threads und den gegenseitigen Ausschluss bei einer gemeinsamen Datenstruktur), Beispiellösung: 03.tar.gz (pgrep)
  • Blatt 4 (Abgabe am 29. Mai; Implementierung eines neuen Synchronisierungsmechanismus auf Basis von Bedingungsvariablen), Beispiellösung: 04.tar.gz (Bedingungen und Bedingungsmengen)
  • Blatt 5 (Abgabe am 12. Juni; Jacobi-Verfahren wahlweise direkt mit Threads oder mit OpenMP), Materialien: Makefile (bei OpenMP ist hier noch „-fopenmp“ bei CXXFLAGS und LDFLAGS hinzuzufügen), gen-mp.pl, Beispiellösung: 05.tar.gz (Jacobi-Verfahren mit Threads)
  • Blatt 6 (Abgabe am 20. Juni; Finden bestimmter Primzahl-Konstellationen in einem Intervall mit MPI), Beispiellösung: 06.tar.gz
  • Blatt 7 (Abgabe am 26. Juni; Visualisierung der Mandelbrotmenge mit MPI), Materialien: converter.tar.gz (Werkzeug und Funktion, die es erlauben, die Erzeugung der JPG-Datei herauszufaktorisieren), Beispiellösung: 07.tar.gz
  • Blatt 8 (Abgabe am 3. Juli; auf dem Fork-and-Join-Pattern beruhender Ray-Tracer mit Hilfe von CUDA), Materialien: vorlage.tar.gz, Beispiellösung: 08.tar.gz
  • Blatt 9 (Abgabe am 9. Juli zur letzten Vorlesung; globale zwei-dimensionale Aggregierung für den Abbruchtest des Jacobi-Verfahrens auf Basis von CUDA), Materialien: jacobi.tar.gz, Beispiellösung: 09.tar.gz
  • Alle Folien zu dem Crashkurs in C++ in einem PDF-Dokument

Kontakt

Dr. Andreas F. Borchert
Helmholtzstr. 20
Raum 1.22