Multithreading-Programmierung mit der C++-Bibliothek HPX

Paralleles und verteiltes Programmieren ist nicht trivial. Die C++-Bibliothek HPX enthält Werkzeuge, die die Programmierung vereinfachen.

Artikel verschenken
vorlesen Druckansicht 1 Kommentar lesen
Multithreading-Programmierung mit HPX

(Bild: Adrian Grosu/Shutterstock.com)

Lesezeit: 12 Min.
Von
  • Detlef Wilkening
Inhaltsverzeichnis

Einfache Programme laufen seriell ab: Der Prozessor führt eine Anweisung nach der anderen aus. Moderne Prozessoren sind aber in der Lage, mehrere Aufgaben parallel auszuführen. Auf Betriebssystemebene lassen sich mehrere Programme gleichzeitig starten: Während im Vordergrund eine Textverarbeitung aktiv ist, spielt im Hintergrund MP3-codierte Musik und ein Download läuft.

Um innerhalb eines einzelnen Programms mehrere Dinge gleichzeitig auszuführen, benötigt man mehrere Threads, die parallel ablaufen können. Dieses Multithreading sorgt für eine Leistungssteigerung von Programmen, die sich sonst nur mit verbesserten Algorithmen erzielen lässt. Heutige Smartphone- und Desktop-Prozessoren enthalten zwischen 2 bis 16 Kerne und können so zwischen 2 bis 32 Threads parallel ausführen. Im Idealfall erfährt ein Programm dadurch eine entsprechende Leistungssteigerung um den Faktor 2 bis 32.

Fremdbibliotheken als Mittel der Wahl

Bis zum ISO-C++-Standard von 2011, kurz C++11 genannt, enthielt C++ keine Sprach- und Bibliotheksmittel für Multithreading – man musste betriebssystemspezifische Funktionen oder Fremdbibliotheken nutzen. C++11 führte die grundlegenden Elemente für die Multithreading-Programmierung ein, darunter ein Multithreading-Memory-Model und Bibliotheksklassen für Threads, Atomics oder Mutexe. Mit den weiteren ISO-C++-Standards C++14 und C++17 fanden immer neue Multithreading-Features in die Sprache und Bibliothek Einzug, und auch C++20 wird Neuerungen und Erweiterungen enthalten.

Diese ISO-C++-Multithreading-Features sind zumeist sehr low-level und lassen sich mit C-Zeigern und new und delete vergleichen. Auf dieser Ebene will und sollte ein C++-Programmierer nicht arbeiten, sie ist zu kompliziert und fehlerträchtig. Zu empfehlen sind stattdessen Smart Pointer mit std::make_unique und std::make_shared. Das Vorkommen von new und delete in einem C++-Programm ist fast immer ein Hinweis auf schlechten Programmierstil.

Leider gibt es in ISO C++ bislang nur wenig High-Level-Multithreading-Mechanismen. Die Klassen std::future sowie std::packaged_task und die Funktion std::async aus C++11 zeigen in diese Richtung, sind aber noch nicht high-level. Mit C++17 sind die parallelen Algorithmen als erste High-Level-Multithreading-Features in den Standard aufgenommen worden. Bis es mehr Multithreading-Tools im ISO-C++-Standard gibt, sind Fremdbibliotheken das Mittel der Wahl.

Eine C++-Bibliothek, die sich dem Thema Multithreading-Programmierung widmet, ist HPX (High Performance ParalleX). Genau genommen ist HPX nicht nur eine Bibliothek, sondern eine Laufzeitumgebung mit zusätzlichen Bibliotheken. Die Ste||ar Group entwickelt sie seit 2008 an der Louisiana State University, die aktuelle Version ist 1.3.0. Ziel von HPX war es, die Programmierung paralleler und verteilter Programme zu ermöglichen, aber auch heterogene Umgebungen zu unterstützen. Dabei sollten mit HPX sowohl einfache Desktop-Programme parallelisierbar als auch Exascale-Cluster wie Beowulf effektiv programmierbar sein.

Das war die Leseprobe unseres heise-Plus-Artikels "Multithreading-Programmierung mit der C++-Bibliothek HPX". Mit einem heise-Plus-Abo können Sie den ganzen Artikel lesen.

Immer mehr Wissen. Das digitale Abo fĂĽr IT und Technik.