OpenMP 5.1 kann besser mit Beschleuniger-Hardware umgehen

Das Update der API-Spezifikation bietet neben Support für die neuesten Versionen von C, C++ und Fortran mehr Optimierungsoptionen für deren Compiler.

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen
Lesezeit: 3 Min.

Das OpenMP Architecture Review Board (ARB) hat die Veröffentlichung des neuesten Sprach-Release OpenMP 5.1 bekanntgegeben. In den vergangenen zwei Jahren seit der Freigabe von OpenMP 5.0 habe sich das OpenMP Language Committee vor allem darauf konzentriert, neue Erweiterungen zu entwickeln, aber auch Korrekturen und Klarstellungen zur 5.0-Spezifikation zu erarbeiten. Das aktuelle Release bietet darüber hinaus einige neue Funktionen, die zu besserer Interoperabilität mit Low-Level-APIs wie CUDA und HIP (Heterogeneous-compute Interface for Portability) beitragen sollen.

Speziell im Hinblick auf die erweiterte Unterstützung von Beschleuniger-Hardware finden sich in OpenMP 5.1 einige Verbesserungen. Das Interop-Konstrukt bietet nun auch Möglichkeiten für Interaktionen mit nativen Geräteschnittstellen jenseits des OpenMP-Kontexts. Die Unterstützung umfasst beispielsweise CUDA-Streams, HIP sowie OpenCL. Entwicklerinnen und Entwicklern stehen darüber hinaus gerätespezifische Umgebungsvariablen zur Verfügung, und Funktionszeiger lassen sich jetzt einem Gerät oder Beschleuniger zuordnen (Mapping).

Während OpenMP bereits volle Unterstützung für die Sprachstandards C11, C18, C++11, C++14 und C++17 bietet, lassen sich mit dem Update auch in C++20 geschriebene Anwendungen parallelisieren. Anstelle der traditionellen Pragma-Form lässt sich zudem die moderne C++-Attributsyntax verwenden, um OpenMP-Direktiven zu spezifizieren. Das soll einer einfacheren Integration mit Vorlagen dienen. Fortran-Entwicklern sichert OpenMP 5.1 die komplette Umsetzung des Fortran-2008-Standards zu, die Arbeiten am Support für Fortran 2018 wurden zumindest gestartet.

Um Optimierungen bei der Parallelisierung zuverlässiger umsetzen zu können, stellt OpenMP nun zusätzliche Informationen für die Compiler bereit. Die Assume-Direktive beispielsweise liefert ergänzende Informationen zur Art und Weise, wie ein Programm OpenMP verwendet. Darüber hinaus stehen neue Direktiven für die Schleifentransformation zu Verfügung – darunter eine Kachel-Direktive, die die Datenlokalisierung verbessern soll, sowie eine Abroll-Direktive, die eine Schleife ganz oder teilweise entrollt.

Einen kompletten Überblick aller neuen Funktionen und Verbesserungen findet sich in der Ankündigung zur Veröffentlichung von OpenMP 5.1.

OpenMP hat sich seit seiner Einführung 1997 zum De-facto-Standard für die Shared-Memory-Parallelisierung im technisch-wissenschaftlichen Umfeld entwickelt. Es unterstützt die Programmiersprachen C, C++ und Fortran gleichermaßen und ist heute auf Embedded-Plattformen, Hardware-Beschleunigern bis hin zu Multicore- und Shared-Memory-Systemen zu finden. Das "Open" im Namen bedeutet, dass jede Partei den Standard ohne Lizenzkosten frei implementieren darf (auch in Teilen) und sich in die Weiterentwicklung einbringen kann. Unter der Aufsicht des OpenMP Architecture Review Board (ARB) treibt eine Gruppe von Anwendern, Hardware- und Software-Anbietern die Weiterentwicklung der Spezifikation voran.

Der OpenMP-Standard besteht aus einer Menge von Direktiven zum Ausdruck von Parallelität, API-Routinen für zusätzliche Funktionen und Umgebungsvariablen zur Steuerung des parallelen Programms zur Laufzeit. Die Direktiven sind in C/C++ als sogenannte Pragmas und in Fortran als spezielle Direktiven in Form von Kommentaren realisiert. Somit lässt sich ein OpenMP-Programm in vielen Fällen auch weiterhin für eine sequenzielle Ausführung übersetzen. Weitergehende Informationen zu OpenMP ARB und der OpenMP API finde sich auf der Homepage der Organisation.

(map)