OpenMP 4.0 unterstützt Beschleuniger und Coprozessoren

Die neue Version des offenen Standards für die Shared-Memory-Programmierung führt darüber hinaus SIMD-Konstrukte und Direktiven zum Abbruch paralleler Berechnungen ein.

In Pocket speichern vorlesen Druckansicht 7 Kommentare lesen
Lesezeit: 2 Min.
Von
  • Alexander Neumann

Die hinter OpenMP stehende gemeinnützige Organisation hat die Version 4.0 des offenen Standards für die Shared-Memory-Programmierung veröffentlicht. Die Änderungen lassen hoffen, dass die 1997 initiierte und mittlerweile von C, C++ und Fortran unterstützte Programmierschnittstelle einen entscheidenden Schritt aus dem wissenschaftlichen Umfeld heraus schaffen könnte, wo OpenMP bislang vor allem zum Einsatz kommt. Dafür sprechen vor allem neue Konstrukte für die Nutzung von Beschleunigern und Coprozessoren wie Intels Xeon Phi.

Neu ist darüber hinaus die bessere Unterstützung von SIMD-Instruktionen, bei deren bisheriger Nutzung Programmierer allein auf das Wohlwollen ihres Compilers angewiesen waren. Im Zentrum ist hier das simd-Konstrukt zur Vektorisierung von Schleifen. Eine damit markierte Schleife wird vom OpenMP-Compiler auf SIMD-Instruktionen übersetzt; die Schleife wird weiterhin sequenziell von einem einzelnen Thread ausgeführt. Möchte man auch eine Parallelisierung der Schleife erreichen, stehen weitere Konstrukte zur Verfügung.

Außerdem führt OpenMP 4.0 Direktiven zum Abbruch paralleler Berechnungen ein. Die Grundidee hierbei ist es, mit dem cancel-Konstrukt den Abbruch einer parallelen Region anzufordern. Der anfordernde Thread beendet die Ausführung sofort und benachrichtigt andere Threads über den Abbruch. Diese prüfen an sogenannten "Cancellation Points", ob die Ausführung abgebrochen werden soll, und beenden das abzubrechende Konstrukt, falls dem so ist.

Neu ist schließlich die Möglichkeit, eigene Datentypen für die Reduktion zu spezifizieren – ein schon lange ersehntes Feature. Für beliebige Datentypen und nahezu beliebige Arten von Reduktionsoperationen lässt sich damit die Menge an vordefinierten OpenMP-Reduktionsoperationen erweitern.

Siehe dazu auch:

(ane)