Organisation und Einführung

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 PP (https://jonathan.sv.hs-mannheim.de/dekanat/modulhandbuch/modulhandbuch-ib_de.pdf#page=26)

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
  • 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-25

Leveson und Turner (1993), Leveson (2017)

  • 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