Verteilte Programmierung und numerische Algorithmen
Veranstalter: Prof. Dr. Peter Buchholz
Die Vorlesung führt in die Grundlagen der parallelen Programmierung ein. Dazu wird nach einem kurzen Einführungskapite ein Überblick über parallele Rechnerarchitekturkonzepte und den aus den Konzepten resultierenden Konsequenzen für die parallele Porgrammierung gegeben. .Anschließend beschäftigen wir uns mit theoretischen Konzepten zur Realisierung und Bewertung paralleler Programme. Im darauf folgenden Kapitel werden numerische Algorithmen aus unterschiedlichen Bereichen vorgestellt und die Möglichkeiten der Parallelisierung dieser Algorithmen wird erläutert. Der zweite Teil der Vorlesung widmet sich konkreten Programmierkonzepten und -bibliotheken zur Realisierung paralleler Software. Dazu werden der Standard MPI zur so genannten Message-Passing-Programmierung, sowie Pthreads und OpenMP zur Thread-Programmierung vorgestellt. Ferner wird ein kurzer Überblick über CUDA zur Programmierung von GPUs gegeben. 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.
Die Vorlesung basiert im Wesentlichen 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.
Web-Seiten zur den verwendeten Programmierbibliotheken
- Blatt 1 (Verbindungsnetzwerke, Einbettungen) Blatt 1
- Blatt 2 (Verbindungsnetzwerke, Routing) Blatt 2
- Blatt 3 (Caches) Blatt 3
- Blatt 4 (Paralelitätskonzepte) Blatt 4
- Blatt 5 (Parallele Vektor-Matrix-Algorithmen) Blatt 5
- Blatt 6 (Kommunikationsoperationen) Blatt 6
- Blatt 7 (MPI) Blatt 7
- Blatt 8 (MPI, Pthreads) Blatt 8
- Blatt 9 (Pthreads, OpenMP) Blatt 9