Organisation und Einführung

Parallele Programmierung (3IB)

Prof. Dr.-Ing. Sandro Leuchter
Hochschule Mannheim, Fakultät für Informatik
Wintersemester 2024/2025

 

Dieses Werk ist lizenziert unter einer Creative Commons „Namensnennung – Nicht-kommerziell – Weitergabe unter gleichen Bedingungen 4.0 International“ Lizenz.

Überblick

  • Organisatorisches
    • Semesterplan (roter Faden)
    • Prüfung
  • Einführung
    • Arten Parallelismus
    • Probleme paralleler Programmierung

Organisationshinweise

Semesterüberblick

Warum parallele Programmierung?

  • CPUs werden nicht mehr schneller, stattdessen: mehrere Cores auf einer CPU
    • Beschleunigung durch Verteilung und Parallelisierung
  • neue Rechnerarchitekturen sind standardmäßig verfügbar
    • Multicore-Prozessoren (früher war fast alles nur “Pseudo-Multitasking”)
    • Graphical Co-Processing Units (GPU) für numerische Aufgaben
    • Cloud-Computing Angebote
  • verteilte Systemarchitekturen
    • Big Data (Map-Reduce) \(\to\) “Lambda Architektur”
    • Nebenläufigkeit: Synchronisation konkurrierender Zugriffe auf Ressourcen erforderlich
    • Resilienz: Robustheit (s. Telekom Domäne)
  • Fehlersuche

Lernziele

Die Studierenden sind in der Lage,

  • die Probleme und Chancen der parallelen Programmierung zu nennen,
  • Probleme in Java-Programmen zu erkennen, die aus Nebenläufigkeit resultieren,
  • nebenläufige Programme zu erstellen,
  • vorhandene Programme bezüglich ihres Verhalten bei Nebenläufigkeit zu analysieren

Modulhandbuch PP1

Wichtige Konzepte

Nebenläufigkeit (“concurrency”)

  • mehrere logische Programmablaufpfade (“Threads of Control”)
  • können prinzipiell auch sequenzialisiert (in “Pseudo-Multitasking”) ablaufen

Parallelität

  • Teile eines Programms werden simultan abgearbeitet (“Multitasking”)

Co-Routine

  • im Gegensatz zur Subroutine (Funktion/Methode): kein Aufruf-Kontext auf dem Stack \(\to\) man kann nicht mit return zum Aufrufpunkt zurückspringen

asynchroner Funktions-/Methodenaufruf (“asynchronous procedure call”)

  • Aufruf hat sofort Rückgabe (“Future”/“Promise”), egal wie lange Berechnung dauert (z.B. wenn erst noch auf I/O/Netz gewartet werden muss)
  • Resultat wird nebenläufig berechnet (Umsetzung als Thread oder Co-Routine)

Formalia

Voraussetzungen

  • Programmierung 1
  • Programmierung 2
  • Software Engineering 1

Vorausgesetzt werden u.a.

  • Objekt-Orientierung, Vererbung, Polymorphie, einige Entwurfsmuster
  • Java: anonyme innere Klassen, Lambda-Ausdrücke, Exception-Handling, Collections, Generics
  • entgegen den Vorgaben aus PR1/2 werden wir selten JUnit zum Testen verwenden (Nebenläufigkeitsaspekte schwierig testbar)
  • Eclipse

Inhalte

  • Parallelität und Nebenläufigkeit, Prozesse, Threads, Co-Routinen/Fibers
  • Threadkonzept in Java
  • konkurrierender Zugriff auf Daten in Java
  • Synchronisation mit synchronized, Bedingungsvariablen und Signalisieren
  • Thread Pools, Completable Future und FutureTask
  • Lock-Objekte und Semaphore
  • synchronisierte, unmodifiable und concurrent Collections in Java

Inhalte

  • weitere Architekturen und Frameworks für nebenläufige und parallele Programmierung in Java und ggf. anderen Programmiersprachen: z.B.
    • Actor Model
    • Communicating Sequential Processes
    • Fork-Join
    • Java Stream Processing
    • Map-Reduce
    • Software Transactional Memory
    • RxJava
    • Datenparallelismus: GPGPU (OpenCL oder CUDA)
  • Performance-Betrachtungen
  • Design Patterns (für nebenläufige und parallele Programme)
  • Praktische Übungen zur Implementierung asynchroner, nebenläufiger und paralleler Algorithmen mit Java und ggf. anderen Programmiersprachen

Aufwand und Prüfungsmodalitäten

  • Arbeitsaufwand (work load)
    • Präsenzstudium: 30 Stunden
    • Präsenzübungen und Testate: 30 Stunden
    • Eigenstudium zur Vor- und Nachbereitung: 50 Stunden
    • Selbständiges Bearbeiten der Übungen: 40 Stunden
  • Studienleistung
    • 2 Pflichtübungen (Gruppenarbeit)
      • Online-Abgabe, ausführliches Feedback, Möglichkeit bis zur Deadline erneut abzugeben
    • zusätzlich 2 Tests (einzeln, Präsenz)
      • Fragen sehr ähnlich zu Prüfungsklausur: perfekte Vorbereitung auf Prüfung!
    • Sowohl nicht bestandene (< 50% der Punkte) Tests, als auch nicht bestandene Gruppen-Pflichtübungen können durch “Ausgleichsleistungen” (zusätzliche Pflichtübungen als Einzelarbeit) ausgeglichen werden!
  • Prüfungsleistung
    • Voraussetzung ist die Studienleistung
      • beide Pflichtübungen bzw. jeweilige Ausgleichsleistungen bestanden UND
      • beide Tests bzw. jeweilige Ausgleichsleistungen bestanden
    • Präsenz-Klausur 90 Minuten

Einführung

Parallelismus

  • Datenparallelismus
    • single instruction multiple data
    • Grafikkarten
  • Aufgabenparallelismus
    • mulitprocessor/multi core (shared memory)
    • Thema für PP 3IB

Therac-251

  • Linearbeschleuniger zur Anwendung in der Strahlentherapie
  • 80er Jahre
  • seltenes Problem (schwer zu reproduzieren): Überdosierung
  • durch parallelen Zugriff auf geteilte Variable \(\to\) falscher Wert \(\to\) Überdosierung

Probleme paralleler Programmierung

  • schwer zu testen
  • konkurrierende Zugriffe auf geteilte Variablen (und andere Ressourcen)
  • Deadlocks/Verklemmung
    • erfordert ggf. Kooperation durch Signalisierung

Referenzen

Hettel, Jörg und Manh Tien Tran. 2016. Nebenläufige Programmierung mit Java. Konzepte und Programmiermodelle für Multicore-Systeme. Heildelberg: dpunkt.verlag.
Leveson, Nancy G. 2017. The Therac-25: 30 Years Later. Computer 50, Nr. 11 (November): 8–11. doi:10.1109/MC.2017.4041349,.
Leveson, Nancy G. und C. S. Turner. 1993. An investigation of the Therac-25 accidents. Computer 26, Nr. 7 (Juli): 18–41. doi:10.1109/MC.1993.274940,.