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

Termine:

  • Vorlesung: Donnerstag, 10-12 Uhr, Helmholtzstraße 22, Raum E.03.
  • Übungen: Freitag, 14-16 Uhr, Helmholtzstraße 18, Raum E.20.  Am 26. Mai und am 16. Juni finden keine Übungen statt.

Da die Vorlesungstermine am 25. Mai und am 15. Juni wegen Feiertagen ausfallen, werden diese in anderen Wochen nachgeholt, indem der Übungstermin am Freitag für die Vorlesung genutzt wird. Die am 25. Mai ausgefallene Vorlesung wird am Freitag, den 2. Juni, zum Termin der Übungen nachgeholt. Die am 15. Juni wegen Fronleichnam ausfallende Vorlesung wird am Freitag, den 23. Juni, zum Termin der Übungen nachgeholt.

Der erste Vorlesungstermin ist am 20. April 2017.

Die letzte Vorlesung ist am 20. Juli 2017, die letzten Übungen am 14. Juli 2017.

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.

Folien zur Einführung in C++:

Übungsblätter:

BlattAusgabeAbgabePDFMaterialLösung
121. April 201728. April 2017blatt01.pdfNim.tar.gzautomat.csp fehlfunktion.csp Nim-loesung.tar.gz
228. April 20175. Mai 2017blatt02.pdfhandshake.csp udp.csp nim.tar.gz
35. Mai 201712. Mai 2017blatt03.pdfmapped_file.hppengine.hpp pgrep.cpp
412. Mai 201719. Mai 2017blatt04.pdfcondition.hppcondition.cpp
519. Mai 20172. Juni 2017blatt05.pdfgdk-pixbuf-demo.cpp gen-mp.plbarrier.hpp, jacobi-thread.hpp, jacobi.hpp, matrix.hpp und testit.cpp
62. Juni 20179. Juni 2017blatt06.pdfchash.hpp
79. Juni 201723. Juni 2017blatt07.pdfMakefile, jacobi.hpp und testit.cpp
823. Juni 201730. Juni 2017blatt08.pdfMakefile, integer.hpp, mpi-primes.cpp, primes.hpp, primes.cpp
930. Juni 20177. Juli 2017blatt09.pdf
107. Juli 201714. Juli 2017blatt10.pdfvorlage.tar.gztracer.tar.gz
1114. Juli 201720. Juli 2017blatt11.pdfvorlage.tar.gzcuda-jacobi-1.tar.gz (Beispiel-Lösung entsprechend der Übungsaufgabe), cuda-jacobi-2.tar.gz (schnellere Variante mit einem dynamisch wachsenden Gitter)

Kontakt

Dr. Andreas F. Borchert
Helmholtzstr. 20
Raum 1.23