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:

4 Tage

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) und Linux, als auch plattformunabhängige Lösungen auf der Basis von Pthreads, Boost, QT und C++11 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
  • 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

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)

Nicht genau was Sie suchen?