Vorlesung Parallele Programmierung

Die parallele Programmierung gewinnt immer mehr an Bedeutung, da heutzutage bereits Mobiltelefone und Laptops über mehrere Prozessorkerne verfügen. Supercomputer besitzen teilweise sogar mehrere Millionen Kerne und haben sich als ein nützliches und mittlerweile unverzichtbares Werkzeug für viele Wissenschaftsbereiche etabliert. Die dadurch möglichen Analysen und Simulationen haben es erlaubt, den wissenschaftlichen Erkenntnisgewinn in vielen Bereichen deutlich zu steigern.

Die optimale Nutzung dieser Komponenten ist allerdings keine einfache Aufgabe, weshalb Wissenschaftlerinnen und Wissenschaftler bei der Entwicklung effizienter Anwendungen vor immer neue Herausforderungen gestellt werden. Für die parallele Programmierung ist daher ein tiefergehendes Verständnis der Hard- und Softwareumgebung sowie möglicher Fehlerursachen unabdingbar.

In der Vorlesung werden die Grundlagen der parallelen Programmierung gelehrt; die Übungen dienen der praktischen Anwendung und Umsetzung der erworbenen Kenntnisse in der Programmiersprache C.

Im Rahmen der Vorlesung werden einige der wichtigsten Themengebiete betrachtet: Hard- und Softwarekonzepte (Mehrkernprozessoren, Prozesse/Threads, NUMA etc.), unterschiedliche Ansätze zur parallelen Programmierung (OpenMP, POSIX Threads, MPI) sowie Werkzeuge zur Leistungsanalyse und Fehlersuche (Skalierbarkeit, Deadlocks, Race Conditions etc.). Zusätzlich werden Gründe und Lösungsansätze für Leistungsprobleme diskutiert und alternative Ansätze für die parallele Programmierung vorgestellt. Beispiele und Probleme werden anhand realer wissenschaftlicher Anwendungen veranschaulicht.

Veranstaltungsdaten

  • Vorlesung: Montag 15:15-16:45 Uhr (G02-111)
  • Übungen: Dienstag 09:15-10:45 Uhr (G22A-113), Dienstag 11:15-12:45 Uhr (G22A-105)
  • Kontakt: Michael Kuhn und Michael Blesel

Lernziel

Die Teilnehmenden lernen, parallele Programme mit verschiedenen Programmieransätzen zu erstellen, zur Ausführung zu bringen und im Ablauf zu optimieren. Außerdem werden weitere Konzepte zur Parallelisierung vermittelt und in den Übungen praktisch umgesetzt.

Voraussetzungen

Notwendige Voraussetzungen für die Vorlesung:

  • Praktische Kenntnis einer Programmiersprache und die Fähigkeit, einfache Programme zu erstellen

Empfohlene Vorkenntnisse:

  • Kenntnis der Grundmechanismen von Betriebssystemen (z. B. Technische Informatik)
  • Grundkenntnisse in Rechnerarchitekturen

Zeitplan der Vorlesung

  • 14.10.2024: Introduction (Folien)
  • 21.10.2024: Performance Analysis and Optimization (Folien, Materialien)
  • 28.10.2024: Hardware Architectures (Folien)
  • 04.11.2024: Parallel Programming (Folien, Materialien)
  • 11.11.2024: Programming with OpenMP (Folien, Materialien)
  • 18.11.2024: Operating System Concepts (Folien, Materialien)
  • 25.11.2024: Programming with POSIX Threads (Folien, Materialien)
  • 02.12.2024: Programming with MPI (Folien, Materialien)
  • 09.12.2024: Networking and Scalability (Folien)
  • 16.12.2024: Advanced MPI and Debugging (Folien, Materialien)
  • 06.01.2025: Feiertag
  • 13.01.2025: Parallel I/O (Folien)
  • 20.01.2025: Gastvorlesung
  • 27.01.2025: Research Talks und Nachbesprechung

Zeitplan der Übungen

  • 14.10.2024: Einführung (Blatt 0, Blatt 1, Materialien)
    • Deadline: 26.10.2024, 23:59
  • 21.10.2024: Debugging (Blatt 2, Materialien)
    • Deadline: 02.11.2024, 23:59
  • 04.11.2024: Leistungsoptimierung einer seriellen Anwendung (Blatt 3, Materialien)
    • Deadline: 09.11.2024, 23:59
  • 11.11.2024: Parallelisierung mit OpenMP und Parallelisierungsschema (Blatt4, Materialien)
    • Deadline: 23.11.2024, 23:59
  • 25.11.2024: Parallelisierung mit POSIX Threads (Blatt 5, Materialien)
    • Deadline: 07.12.2024, 23:59
  • 02.12.2024: MPI-Einführung (Blatt 6, Materialien)
    • Deadline: 14.12.2024, 23:59
  • 16.12.2024: Parallelisierung mit MPI (Jacobi) (Blatt 7, Materialien)
    • Deadline: 11.01.2025, 23:59
  • 13.01.2025: Parallelisierung mit MPI (Gauß-Seidel) (Blatt 8, Materialien)
    • Deadline: 25.01.2025, 23:59

Literatur

  • High Performance Computing: Modern Systems and Practices (Thomas Sterling, Matthew Anderson and Maciej Brodowicz)
  • Parallel Programming: for Multicore and Cluster Systems (Thomas Rauber and Gudula Rünger)
  • Parallel Programming: Concepts and Practice (Dr. Bertil Schmidt, Dr. Jorge Gonzalez-Dominguez, Christian Hundt and Moritz Schlarb)

Last Modification: 04.12.2024 - Contact Person: Webmaster