Multithread-/Multicore-Programmierung
Zielgruppe:
Software-Entwickler, Software-Architekten, Projektleiter
Voraussetzungen:
Kenntnis der Programmiersprache C. Da auch viele C++-Beispiele gezeigt werden, sind C++-Kenntnisse hilfreich, aber nicht Voraussetzung. Somit eignet sich dieser Kurs auch für Teilnehmer, die ausschließlich mit C programmieren.
Dauer:
5 Tage (mit praktischen Übungen)
Kursziel:
Dieses Training zeigt, wie die Eigenschaften von Multithreading-Systemen eingesetzt werden können bzw. welche Probleme gelöst werden müssen, um die Prozessorleistung, insbesondere bei modernen Multicore-Systemen, bestmöglich nutzen zu können. Es richtet sich an Entwickler, die existierende Applikationen optimieren, oder neue Applikationen entwerfen und implementieren müssen. Die Themen werden allgemeingültig behandelt, so dass das erworbene Wissen prinzipiell auf jede Multithreading- oder Multitasking-Plattform anwendbar ist. Gleichzeitig werden die Lehrinhalte durch eine Fülle von C- und C++-Code-Beispielen konkretisiert. Dabei werden sowohl plattformspezifische Lösungen, basierend auf Windows (Win32/64), .NET (C++/CLI), Linux und RTEMS, als auch plattformunabhängige Lösungen auf der Basis von Pthreads, Boost, QT und des C++-Standards vorgestellt.
Inhalt:
Einführung
- Software früher und heute
- Prozessorarchitektur
- Single-/Multi-/Manycore
- Hyperthreading
- Systemarchitektur
- AMP-/SMP-Systeme
Multithreading
- Task und Scheduler
- Zuordnung von Code und Daten
- Prozesse und Threads
- Schedulingmodelle
- Single-/Multicore-Multithreading
- Zeitscheibenverfahren
- Nebenläufige/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
- Ausführung von Befehlen
- volatile und Speicherbarrieren
- 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
- Thread-Barrieren
- Einmal-Initialisierung
- Interrupt-Service-Synchronisation
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
Applikations-Design
- Thread-basiert
- Thread-Pools
- Pattern-basiert
- Loop Parallelism Pattern
- Master/Worker Pattern
- Divide And Conquer Pattern
- Fork/Join Pattern
- Geometric Decomposition Pattern
- Pipeline Pattern
- Bibliotheks-/Framework-basiert
- OpenMP
- Threading Building Blocks (TBB)
- Task Parallel Library (TPL)
- Generelle Vorgehensweise
- (Best Practices)
praktische Übungen