Nach drei Jahren Entwicklung wurde das Spezifikationspaket OpenMP 6.0 (Open Multi-Processing) veröffentlicht, das die API und die Anwendungsmethoden für paralleles Programmieren in den Sprachen C, C++ und Fortran auf Multi-Core- und hybriden (CPU+GPU/DSP) Systemen mit gemeinsamem Speicher und Vektorisierungsblöcken (SIMD) definiert. Es wird erwartet, dass die erste Unterstützung für bestimmte Funktionen von OpenMP 6.0 in den Versionen LLVM/Clang 20 und GCC 15 enthalten sein wird.
Wesentliche Änderungen in OpenMP 6.0:
- Der Prozess zur Programmierung von Aufgaben (task), die unabhängige Teile eines Programms definieren, die parallel zu anderen Teilen ausgeführt werden können, wurde vereinfacht.
- Die Möglichkeit zur Ausführung von Aufgaben in Free-Agent-Threads, die nicht an Thread-Gruppen (teams) gebunden sind, die parallele Regionen (parallel region, ein Codeblock, der in mehreren Threads ausgeführt wird) ausführen, wurde hinzugefügt.
- Die Unterstützung für die Speicherung von Taskgraphen (taskgraph), die Abhängigkeiten zwischen Aufgaben und die Reihenfolge der Aufgabenausführung definieren, wurde gewährleistet, um die Effizienz der späteren Wiedergabe zu verbessern.
- Ein Mechanismus für transparente Aufgaben („transparent tasks“) wurde implementiert, um die Verwaltung von Abhängigkeiten zu vereinfachen und die Ausführung von untergeordneten Aufgaben automatisch zu steuern.
- Die Unterstützung für Recheneinheiten, die zur Ausführung paralleler Aufgaben verwendet werden können (CPU, GPU, DSP usw.), wurde erweitert.
- Eine neue Arraysyntax wurde hinzugefügt, die die Verwendung der Direktive „workdistribute“ ermöglicht, um die Verarbeitung von Arrays zwischen verschiedenen Arbeitsgeräten zu verteilen.
- Die Möglichkeiten zur Verwaltung der Speicherzuweisung wurden verbessert, um die Verwaltung von Variablen, für die Speicher dynamisch zugewiesen wird, zu vereinfachen.
- Die Unterstützung für Attribute, die die Standardverteilung von Daten zwischen Geräten definieren, wurde erweitert.
- Das Schreiben von Code für asynchrone Datenübertragungen an zusätzliche Recheneinheiten (GPU) wurde vereinfacht.
- Das Speichermanagement und die Bindung an Recheneinheiten wurden verbessert.
- Die Direktive „groupprivate“ wurde hinzugefügt, um den Speicher für eine Gruppe von Threads, die auf einem bestimmten Recheneinheit ausgeführt werden, zu reservieren.
- Die Programmierung bestimmter Arten von Schleifen wurde vereinfacht, darunter die Zusammenführung mehrerer Schleifen, die Änderung der Reihenfolge verschachtelter Schleifen und die Umkehrung von Schleifen.
- Eine neue Induktionsoperation wurde hinzugefügt, um die Parallelisierung in Schleifen einfacher arithmetischer Berechnungen und benutzerdefinierter Operationen, die von vorherigen Werten abhängen, zu organisieren.
- Vollständige Unterstützung für die Parallelisierung von Programmen, die mit den Standards C23 (einschließlich Attributsyntax), Fortran 2023 und C++23 geschrieben wurden, wurde hinzugefügt. Neue Attribute für C/C++ wurden ergänzt.
- Die Verwaltung von Speicher und Daten wurde erweitert. Neue Attribute wurden hinzugefügt, um zu steuern, wie der Speicher zugewiesen und genutzt werden soll. Eine API zur Definition und Anforderung von Speicherbereichen wurde eingeführt.
- Funktionen, die in den Spezifikationen OpenMP 5.0, 5.1 und 5.2 als veraltet erklärt wurden, wurden entfernt.
Quelle: opennet.ru
