Paralleler Programmierstandard OpenMP 6.0 veröffentlicht

Nach dreijähriger Entwicklungszeit wurde eine Reihe von OpenMP 6.0-Spezifikationen (Open Multi-Processing) veröffentlicht, die APIs und Methoden für die Anwendung paralleler Programmiermethoden für C-, C++- und Fortran-Sprachen auf Multi-Core und Hybrid (CPU+GPU) definieren /DSP)-Systeme mit gemeinsam genutztem Speicher und Blockvektorisierung (SIMD). Die erste Unterstützung für ausgewählte OpenMP 6.0-Funktionen wird voraussichtlich in den Versionen LLVM/Clang 20 und GCC 15 enthalten sein.

Wesentliche Änderungen in OpenMP 6.0:

  • Der Prozess der Programmieraufgaben wurde vereinfacht, indem unabhängige Teile des Programms definiert wurden, die parallel zu anderen Teilen ausgeführt werden können.
    • Es wurde die Möglichkeit hinzugefügt, Aufgaben in Free-Agent-Threads auszuführen, die nicht an Thread-Gruppen (Teams) gebunden sind, die parallele Regionen ausführen (parallele Region, ein Codeblock, der in mehreren Threads ausgeführt wird).
    • Es wird Unterstützung für das Speichern eines Taskgraphen bereitgestellt, der Abhängigkeiten zwischen Aufgaben und der Reihenfolge, in der Aufgaben ausgeführt werden, definiert, um die Effizienz der nachfolgenden Wiedergabe zu verbessern.
    • Um das Abhängigkeitsmanagement zu vereinfachen und die Ausführung untergeordneter Aufgaben automatisch zu steuern, wurde ein Mechanismus für transparente Aufgaben implementiert.
  • Erweiterte Unterstützung für Computergeräte, mit denen parallele Aufgaben ausgeführt werden können (CPU, GPU, DSP usw.).
    • Neue Array-Syntax hinzugefügt, um die Verwendung der „workdistribute“-Direktive zum Aufteilen der Array-Verarbeitung auf verschiedene Arbeitseinheiten zu ermöglichen.
    • Die Speicherzuweisungskontrollen wurden verbessert, um die Verwaltung von Variablen zu erleichtern, für die Speicher dynamisch zugewiesen wird.
    • Die Unterstützung für Attribute, die standardmäßig bestimmen, wie Daten zwischen Geräten verteilt werden, wurde erweitert.
    • Vereinfachtes Schreiben von Code für die asynchrone Datenübertragung an zusätzliche Computergeräte (GPUs).
    • Verbesserte Speicherverwaltung und deren Anbindung an Computergeräte.
    • „groupprivate“-Direktive hinzugefügt, um einer Gruppe von Threads, die auf einem bestimmten Computergerät ausgeführt werden, Speicher zuzuweisen.
  • Die Programmierung bestimmter Arten von Schleifentransformationen wurde vereinfacht, z. B. das Zusammenführen mehrerer Schleifen, das Ändern der Reihenfolge verschachtelter Schleifen und das Umkehren von Schleifen.
  • Eine neue Induktionsoperation wurde hinzugefügt, um die Parallelisierung in Schleifen einfacher arithmetischer Berechnungen und Benutzeroperationen zu organisieren, die von vorherigen Werten abhängen.
  • Vollständige Unterstützung für die Parallelisierung von Programmen hinzugefügt, die mit den C23-Standards (einschließlich Attributsyntax), Fortran 2023 und C++23 geschrieben wurden. Neue Attribute für C/C++ hinzugefügt.
  • Erweiterte Speicher- und Speicherverwaltungsfunktionen. Es wurden neue Attribute hinzugefügt, um zu steuern, wie Speicher zugewiesen und verwendet werden soll. API zum Definieren und Abfragen von Speicherplätzen hinzugefügt.
  • In den Spezifikationen OpenMP 5.0, 5.1 und 5.2 veraltete Funktionen wurden entfernt.

Source: opennet.ru

Kommentar hinzufügen