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!
- 2 Pflichtübungen (Gruppenarbeit)
- 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
- Voraussetzung ist die Studienleistung
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