OpenACC
Stabile Version | 2.7 / November 2018 |
---|---|
Geschrieben in | C, C ++, und Forran |
Betriebssystem | Plattformübergreifend |
Plattform | Plattformübergreifend |
Typ | API |
Webseite | www |
OpenACC (zum Offene Beschleuniger) ist ein Programmierstandard für Parallele Computing entwickelt von Cray, KAPPEN, Nvidia und PGI. Der Standard soll die parallele Programmierung von vereinfachen heterogen Zentralprozessor/GPU Systeme.[1]
Wie in OpenMPDer Programmierer kann kommentieren C, C ++ und Forran Quellcode Um die Bereiche zu identifizieren, die verwendet werden sollten, Compiler -Richtlinien und zusätzliche Funktionen.[2] Wie OpenMP 4.0 und neuer kann OpenACC auf beide abzielen Zentralprozessor und GPU Architekturen und starten Sie Computercode.
OpenACC -Mitglieder haben als Mitglieder der OpenMP -Standardgruppe gearbeitet, um in OpenMP -Spezifikation zusammenzuführen, um eine gemeinsame Spezifikation zu erstellen, die OpenMP erweitert, um Beschleuniger in einer künftigen Veröffentlichung von OpenMP zu unterstützen.[3][4] Diese Bemühungen führten zu einem technischen Bericht[5] Für einen Kommentar und die Diskussion zeitlich festgelegt, um das Jahr einzuschließen Supercomputing -Konferenz (November 2012, Salt Lake City) und die Unterstützung von Nicht-NVIDIA-Beschleunigungsunterstützung mit Eingaben von Hardwareanbietern, die an OpenMP teilnehmen.[6]
Bei ISC'12 wurde OpenACC gezeigt, dass er daran arbeitet Nvidia, AMD und Intel Beschleuniger ohne Leistungsdaten.[7]
Am 12. November 2012 wurde auf der SC12 -Konferenz ein Entwurf der Spezifikation von OpenACC Version 2.0 vorgestellt.[8] Zu den neuen vorgeschlagenen Funktionen gehören neue Steuerelemente über die Datenbewegung (z. B. bessere Handhabung von unstrukturierte Daten und Verbesserungen zur Unterstützung des nicht zusammenhängenden Speichers) und Unterstützung explizite Funktionsaufrufe und separate Kompilierung (die Erstellung und Wiederverwendung von Bibliotheken von beschleunigtem Code ermöglichen). OpenACC 2.0 wurde im Juni 2013 offiziell veröffentlicht.[9]
Version 2.5 der Spezifikation wurde im Oktober 2015 veröffentlicht.[10] während Version 2.6 im November 2017 veröffentlicht wurde.[11] Die neueste Version der Spezifikation, Version 2.7, wurde im November 2018 veröffentlicht.[12]
Compiler -Unterstützung
Die Unterstützung von OpenACC ist in kommerziellen Compilern von PGI (aus Version 12.6) und (nur für Cray -Hardware) Cray erhältlich.[7][13]
OpenUH[14] ist ein Open64 Basierter Open Source OpenACC -Compiler unterstützt C und Forran, entwickelt von der HPCTOOLS -Gruppe von Universität von Houston.
Openarc[15] ist ein Open -Source -C -Compiler, der bei entwickelt wurde Oak Ridge National Laboratory So unterstützen Sie alle Funktionen in der OpenACC 1.0 -Spezifikation. Ein experimentelles[16] Open Source Compiler, Accull, wird von der entwickelt Universität von La Laguna (C Sprache nur).[17]
Omni Compiler[18][19] ist ein Open -Source -Compiler, der im HPCS -Labor entwickelt wurde. von Universität Tsukuba und Programmierumweltforschungsteam von Riken Center for Computational Science, Japan, unterstützt OpenACC, xcalablemp und xcalableAcc Kombination von Xcalablemp und OpenACC.
IPMACC[20] ist ein Open Source C -Compiler von entwickelt von Universität von Victoria Das übersetzt OpenACC in CUDA, OpenCL und ISPC. Derzeit werden nur folgende Anweisungen unterstützt: Daten, Kerne, Schleife, und Zwischenspeicher.
GCC Die Unterstützung für OpenACC war langsam.[21] Eine GPU-Targeting-Implementierung von Samsung wurde im September 2013 bekannt gegeben. Dies übersetzt OpenACC 1.1-Annotierter Code auf OpenCL.[16] Die Ankündigung einer "realen" Implementierung folgte zwei Monate später, diesmal von NVIDIA und basierend auf OpenACC 2.0.[22] Dies löste eine gewisse Kontroverse aus, da die Implementierung nur auf die von Nvidia abzielen würde PTX Montagesprache, für die kein Open -Source -Assembler oder Laufzeit verfügbar war.[23][24] Die experimentelle Unterstützung für OpenACC/PTX landete als Version 5.1 in GCC. Die GCC6- und GCC7 -Release -Serie beinhaltet eine viel verbesserte Implementierung der OpenACC 2.0A -Spezifikation.[25][26] GCC 9.1 bietet nahezu komplette OpenACC 2.5 -Unterstützung.[27]
Verwendungszweck
In ähnlicher Weise wie OpenMP 3.x auf homogenes System oder früher OpenHMPPDie primäre Programmierung in OpenACC ist Richtlinien.[28] Die Spezifikationen umfassen auch a Laufzeitbibliothek Definieren mehrerer Unterstützungsfunktionen. Um sie auszunutzen, sollte der Benutzer "openAcc.h" in C oder "openAcc_lib.h" in Forran aufnehmen.[29] und dann anrufen Acc_init () Funktion.
Richtlinien
OpenACC definiert eine umfangreiche Liste von Pragmas (Richtlinien).[30] zum Beispiel:
#PRAGMA ACC Parallel #PRAGMA ACC Kernels
Beide werden verwendet, um parallele Berechnungskernel zu definieren, die auf dem Gaspedal mit unterschiedlichen Semantik ausgeführt werden sollen[31][32]
#PRAGMA ACC -Daten
Ist die Hauptrichtlinie zum Definieren und Kopieren von Daten zum und vom Gaspedal.
#PRAGMA ACC Loop
Wird verwendet, um die Art der Parallelität in a zu definieren parallel
oder Kerne
Region.
#PRAGMA ACC Cache #PRAGMA ACC Update #PRAGMA ACC Deklar #PRAGMA ACC Warten Sie
Laufzeit -API
Es gibt einige Laufzeit API Funktionen auch definiert: ACC_Get_Num_Devices ()
, ACC_SET_DEVICE_TYPE ())
, ACC_get_Device_type ())
, ACC_SET_DEVICE_NUM ()
, ACC_Get_Device_Num ())
AnwesendAcc_async_test ()
, ACC_ASync_test_all ())
, ACC_ASYNC_WAIT ()
, ACC_ASYNC_WAIT_ALL ())
, Acc_init ()
, ACC_SHUTDOWN ()
, ACC_ON_DEVICE ()
, ACC_MALLOC ()
, ACC_FREE ()
.
OpenACC kümmert sich im Allgemeinen um die Arbeitsorganisation für das Zielgerät. Dies kann jedoch durch die Verwendung von Banden und Arbeitern überschrieben werden. Eine Bande besteht aus Arbeitnehmern und arbeitet über eine Reihe von Verarbeitungselementen (wie bei einer Arbeitsgruppe in OpenCL).
Siehe auch
Verweise
- ^ "Nvidia, Cray, PGI und Caps starten 'OpenACC' -Programmierstandard für paralleles Computing". Der Anfragen. 4. November 2011. Archiviert vom Original am 17. November 2011.
{{}}
: CS1 Wartung: Ungeeignete URL (Link) - ^ "OpenACC Standard Version 2.5" (PDF). Openacc.org. Abgerufen 2. Juni 2017.
- ^ "Wie bezieht sich die OpenACC -API mit der OpenMP -API?". Openacc.org. Abgerufen 14. Januar 2014.
- ^ "Wie stammen die OpenACC -Spezifikationen?". Openacc.org. Abgerufen 14. Januar 2014.
- ^ "Das OpenMP -Konsortium veröffentlicht den ersten technischen Bericht". Openmp.org. 5. November 2012. Abgerufen 14. Januar 2014.
- ^ "OpenMP bei SC12". Openmp.org. 29. August 2012. Abgerufen 14. Januar 2014.
- ^ a b "OpenACC -Gruppe berichtet, dass die Unterstützung für den Programmierstandard für Beschleuniger erweitert wird". HPCWire. 20. Juni 2012. archiviert von das Original am 23. Juni 2012. Abgerufen 14. Januar 2014.
- ^ "OpenACC -Version 2.0 für einen Kommentar gepostet". Openacc.org. 12. November 2012. Abgerufen 14. Januar 2014.
- ^ "OpenACC 2.0 Spec | www.openacc.org". www.openacc.org. Archiviert von das Original am 2016-04-04. Abgerufen 2016-03-23.
- ^ "Die OpenACC -Standardsgruppe kündigt die Veröffentlichung der 2.5 -Spezifikation an; Mitgliedsanbieter fügen Unterstützung für ARM & X86 als parallele Geräte | www.openacc.org hinzu". www.openacc.org. Archiviert von das Original am 2016-07-26. Abgerufen 2016-03-22.
- ^ "Was ist neu in OpenACC 2.6? | OpenACC". www.openacc.org. Abgerufen 2018-05-01.
- ^ "Was ist neu in OpenACC 2.7! | OpenACC". www.openacc.org. Abgerufen 2019-01-07.
- ^ "OpenACC -Standard, um Entwicklern zu helfen, GPU -Rechenbeschleuniger zu nutzen". Xbit Laboratories. 16. November 2011. archiviert von das Original am 16. Januar 2014. Abgerufen 14. Januar 2014.
- ^ "OpenUH Compiler". Archiviert von das Original am 25. Januar 2014. Abgerufen 4. März 2014.
- ^ "Openarc Compiler". Abgerufen 4. November 2014.
- ^ a b Larabel, Michael (30. September 2013). "GCC -Unterstützung für OpenACC in der GPU veröffentlicht". Phoronix.
- ^ "Accull die Implementierung von OpenACC -Forschung". Abgerufen 14. Januar 2014.
- ^ "Omni Compiler". omni-compiler.org. Abgerufen 2019-11-18.
- ^ Omni-Compiler für C- und FORTRAN-Programme mit XCalablemp und OpenACC-Richtlinien: Omni-Compiler/Omni-Compiler, Omni-Compiler, 2019-10-17, abgerufen 2019-11-17
- ^ "IPMACC -Compiler". Abgerufen 31. Januar 2017.
- ^ Larabel, Michael (4. Dezember 2012). "OpenACC ist immer noch nicht von Open Compilern geliebt". Phoronix.
- ^ Larabel, Michael (14. November 2013). "OpenACC 2.0 mit GPU -Unterstützung für GCC". Phoronix.
- ^ Larabel, Michael (15. November 2013). "Nvidia, Mentor -Grafik kann GCC schaden". Phoronix.
- ^ Larabel, Michael (21. November 2013). "Im Kämpfe wird OpenACC in GCC fortgesetzt". Phoronix.
- ^ "OpenACC - GCC Wiki".
- ^ Schwinge, Thomas (15. Januar 2015). "Der aktuelle Satz von OpenACC-Änderungen aus Gomp-4_0-Branch zusammenführen". GCC (Mailingliste). gcc.gnu.org. Abgerufen 15. Januar 2015.
- ^ Jelinek, Jakub (3. Mai 2019). "GCC 9.1 veröffentlicht". Lwn.net.
- ^ "Einfache GPU -Parallelität mit OpenACC". Dr.dobb's. 11. Juni 2012. Abgerufen 14. Januar 2014.
- ^ "OpenACC API QuickReference Card, Version 1.0" (PDF). Nvidia. November 2011. Abgerufen 14. Januar 2014.
- ^ "OpenACC Standard Version 2.0" (PDF). Openacc.org. Abgerufen 14. Januar 2014.
- ^ "OpenACC -Kerne und parallele Konstrukte". PGI Insider. August 2012. Abgerufen 14. Januar 2014.
- ^ "OpenACC Parallel Abschnitt gegen Kernel". Caps Unternehmer Wissensbasis. 3. Januar 2013. archiviert von das Original am 16. Januar 2014. Abgerufen 14. Januar 2014.
Externe Links
- Homepage | OpenACC
- Verwendungsbeispiel von Nvidia: Teil 1, Teil 2