logo-mc-rgb-300x300 (MicroConsult)

MicroConsult Academy GmbH

https://www.microconsult.de/

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.