23.03.2022
Multithread-/Multicore-Programmierung (Seminar)
Das Training Multithread-/Multicore-Programmierung macht Sie fit, die Eigenschaften von Multithreading-Systemen zielgerichtet in Ihren Projekten einsetzen.
Sie wissen, welche Probleme gelöst werden müssen, um die Prozessorleistung - insbesondere bei modernen Multicore-Systemen - bestmöglich nutzen zu können. Damit können Sie existierende Applikationen optimieren und implementieren oder neue Applikationen hinsichtlich effizienter Nutzung der Multicore-Architektur entwerfen. Mit der allgemein gültigen Behandlung der Themen im Seminar Multithread-/Multicore-Programmierung sind Sie imstande, das erworbene Wissen prinzipiell auf jede Multithreading- oder Multitasking-Plattform anzuwenden. Mit der Fülle an konkreten C- und C++-Codebeispielen verfügen Sie über einen Pool an Anwendungsbeispielen, die sowohl plattformspezifische Lösungen basierend auf Windows (Win32/64), .NET (C++/CLI) und Linux als auch plattformunabhängige Lösungen auf Basis von Pthreads, Boost, QT und C++11 enthalten.
Inhalt
Einführung
Software früher und heute
Prozessorarchitektur: Singlecore/ Multicore/ Manycore, Hyperthreading
Systemarchitektur: AMP-/SMP-Systeme
Multithreading
Task und Scheduler
Zuordnung von Code und Daten
Prozesse und Threads
Scheduling-Modelle
Singlecore-Multithreading/ Multicore-Multithreading
Zeitscheibenverfahren
Nebenläufige Ausführung/ parallele Ausführung
Thread-Programmierung
Thread-Zustände
Prioritäten, Prioritätsboost, Scheduling
Threads und Funktionen; Reentrancy
Threads und Objekte
Thread-Erzeugung
Thread-Unterbrechung
Thread-Beendigung
Synchronisation
Speichermodelle
Polling
Events
Race Conditions
Mutexe/ Locks/ Semaphore:
Rekursiver Zugriff, Scoped Locking, Fairness, Prioritätsinversion, Reader-/Writer-Locks, Deadlock/ Livelock
Condition Variable
Atomare Zugriffe
Lockfreie Programmierung
Barrieren
Einmal-Initialisierung
Kommunikation
Möglichkeiten der Kommunikation
Charakteristische Eigenschaften
Typische Implementierungen:
Message Queues, Pipes, FIFO, Netzwerk-Sockets
Multicore-Programmierung
Wann lohnt sich Multicore?
Amdahl'sches Gesetz
Arten der Parallelität
False Sharing
Prozessor-Affinität
Spinlocks
Numerische Berechnungen
Portierung
Applikationsdesign
Thread-basiert: Thread-Pools
Pattern-basiert: Loop Parallelism, Master/Worker, Divide And Conquer, Fork/Join, Geometric Decomposition, Pipeline Pattern
Bibliotheks-/Framework-basiert: OpenMP, Threading Building Blocks (TBB), Task Parallel Library (TPL)
Generelle Vorgehensweise (Best Practices)
Praktische Übungen im Kurs Multithread-/Multicore-Programmierung
Multithread-/ Multicore-Applikationsentwicklung
Zuverlässige Applikationsbeendigung
Threadlokaler Speicher
Aufspüren der Multithread-Probleme einer vorgegebenen Applikation sowie deren Behebung mithilfe unterschiedlicher Synchronisationsmechanismen
Entwurf und Implementierung einer Client-/Server-Anwendung mithilfe geeigneter Kommunikationsmechanismen
Optimierung eines sequenziell strukturierten Programms zur Nutzung der Rechenleistung eines Multicore-Systems
Entwicklung einer Multithread-Applikation auf der Basis eines Design Patterns
Laufzeitmessungen und Effizienzanalysen
Die Übungen werden wahlweise unter Windows mit Visual Studio oder unter Linux mit Eclipse durchgeführt.