ºÚÁÏ´«ËÍÃÅ

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.
  • ܲú³Ü²Ô²µ±ð²Ô: 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 ܲú³Ü²Ô²µ±ð²Ô statt. Wer keine Vorkenntnisse zu C++ hat, sollte diese Gelegenheit nutzen.

±Ê°ùü´Ú³Ü²Ô²µ±ð²Ô

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:

  • 16. April 2015: ,  (Paket mit einem interaktiven Werkzeug zur Simulation einer Teilmenge von CSP, aktualisiert am 20. April 2015, um neuere bison-Versionen zu unterstützen)
  • 21. April 2015: Fortsetzung zu CSP,
  • 30. April 2015:
  • 8. Mai 2015:
  • 21. Mai 2015:
  • 22. Mai 2015:
  • 28. Mai 2015: ,  (Beispiel zum rekursiven Teile- und Herrsche-Pattern mit OpenMP)
  • 11. Juni 2015: ,  (Trivialbeispiel zu MPI),  (Werkzeug zur Messung der Versandzeiten bei MPI)
  • 12. Juni 2015: ,  (Trivialbeispiel für das Master/Worker-Pattern mit MPI),  (das Beispiel in CSP),  (Austesten der Pufferung bei MPI_Send / MPI_Recv bis zum Deadlock),  (das Deadlock-Beispiel in CSP),  (analog, aber mit Pufferung)
  • 18. Juni 2015: ,  (einfaches Beispiel zu Scatter & Gather),  (Jacobi-Verfahren mit eindimensionaler Aufteilung),  (Jacobi-Verfahren mit zweidimensionaler Aufteilung, eingebettet ist eine ältere Fassung der von Dr. Michael Lehn)
  • 25. Juni 2015: ,  (CUDA-Programm, das die wichtigsten Merkmale einer Nvidia-Karte ausgibt),  (Trivialfassung mit Aggregierung durch die CPU),  (Fassung mit blockweiser Aggregierung durch die Kernel-Funktionen)
  • 2. Juli 2015: ,  (Matrix-Matrix-Multiplikation mit CUDA)
  • 9. Juli 2015:  (OpenCL-Beispiele: opencl-compile, opencl-properties und opencl-simpson; das Makefile ist vorbereitet für Linux mit CUDA und nvcc im Pfad und für OS X mit Xcode und clang)
  • (Stand: 2. Juli 2015)

ܲú³Ü²Ô²µ±ð²Ô

  • Melden Sie sich bitte für die Teilnahme in den ܲú³Ü²Ô²µ±ð²Ô bei  an.
  • Die ܲú³Ü²Ô²µ±ð²Ô sind zeitintensiv und integraler Teil einer praxisorientierten Vorlesung. Die Inhalte aus den ܲú³Ü²Ô²µ±ð²Ô sind prüfungsrelevant, die Teilnahme an den ܲú³Ü²Ô²µ±ð²Ô ist aber nicht Voraussetzung zur Prüfungsanmeldung.
  • (Abgabe am 24. April; zu CSP und zur ), Materialien: ,  (), , Beispiellösung: ,  (Nim-Spiel)
  •  (Abgabe am 8. Mai; zu Nichtdeterminismus in CSP und zu ), Beispiellösung: ,  (Nim-Spiel)
  • (Abgabe am 22. Mai; zu Fork-and-Join-Pattern mit Threads und den gegenseitigen Ausschluss bei einer gemeinsamen Datenstruktur), Beispiellösung:  (pgrep)
  • (Abgabe am 29. Mai; Implementierung eines neuen Synchronisierungsmechanismus auf Basis von Bedingungsvariablen), Beispiellösung:  (Bedingungen und Bedingungsmengen)
  • (Abgabe am 12. Juni; Jacobi-Verfahren wahlweise direkt mit Threads oder mit OpenMP), Materialien:  (bei OpenMP ist hier noch „-fopenmp“ bei CXXFLAGS und LDFLAGS hinzuzufügen), , Beispiellösung:  (Jacobi-Verfahren mit Threads)
  •  (Abgabe am 20. Juni; Finden bestimmter Primzahl-Konstellationen in einem Intervall mit MPI), Beispiellösung:
  •  (Abgabe am 26. Juni; Visualisierung der Mandelbrotmenge mit MPI), Materialien:  (Werkzeug und Funktion, die es erlauben, die Erzeugung der JPG-Datei herauszufaktorisieren), Beispiellösung: 
  • (Abgabe am 3. Juli; auf dem Fork-and-Join-Pattern beruhender Ray-Tracer mit Hilfe von CUDA), Materialien: , Beispiellösung: 
  • (Abgabe am 9. Juli zur letzten Vorlesung; globale zwei-dimensionale Aggregierung für den Abbruchtest des Jacobi-Verfahrens auf Basis von CUDA), Materialien: , Beispiellösung: 

Materialien

  • (Online-Fassung des Buchs von Tony Hoare über CSP)
  • , ,

Kontakt

Dr. Andreas F. Borchert
Helmholtzstr. 20
Raum 1.22