ÖppnaACC
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 25 december 2021; kontroller kräver
2 redigeringar .
OpenACC (från engelska. Open Accelerators ) är en mjukvarustandard för parallell programmering, utvecklad gemensamt av Cray , CAPS , Nvidia och PGI . Standarden beskriver en uppsättning kompilatordirektiv utformade för att förenkla skapandet av heterogena parallella program med både centrala och grafiska [1] [2] processorer.
Liksom den tidigare OpenMP -standarden används OpenACC för att kommentera programfragment i C , C++ och Fortran . Med hjälp av en uppsättning kompilatordirektiv markerar programmeraren kodsektioner som ska köras parallellt eller på GPU:n, indikerar vilka av variablerna som är vanliga och vilka som är trådspecifika, etc. [3] . Syntaxen liknar OpenMP [ 4] . OpenACC-standarden tillåter programmeraren att abstrahera från särdragen med initieringen av GPU:n, frågorna om att överföra data till och från samprocessorn, etc.
Historik
Skaparna av OpenACC är också involverade i arbetet med OpenMP-standarder och planerar att utöka framtida versioner av OpenMP för att stödja datoracceleratorer. [5] [6] I november 2012 publicerades en teknisk rapport [7] för att diskutera och lägga till stöd för icke-Nvidia-acceleratorer. [8] ISC'12 demonstrerade OpenACC på Nvidia- , AMD- och Intel - acceleratorer utan att publicera prestandadata. [9]
Det är planerat att kombinera specifikationerna för OpenACC och OpenMP, inklusive i det senare stödet för att arbeta med acceleratorer, inklusive GPU: er [10] .
Ett utkast till den andra versionen av standarden, OpenACC 2.0, presenterades i november 2012 på SC12-konferensen. [11] Direktiv för kontroll av dataöverföring, stöd för explicita funktionsanrop och separat kompilering lades till standarden.
Kompilatorstöd
Implementering av OpenACC finns i kompilatorer från PGI (sedan version 12.6), Cray och CAPS. [9] [12] [13]
HPCTools-gruppen vid University of Houston har lagt till OpenACC-stöd till OpenUH-kompilatorn med öppen källkod baserad på Open64- koder [14] .
ORNL National Laboratory utvecklade OpenARC-kompilatorn med öppen källkod [15] för C-språket, som stöder OpenACC version 1.0.
Den kostnadsfria kompilatorn GNU GCC stöder OpenACC sedan version 5. [16] [17] GCC 5 ingår i Ubuntu 15.10, i Fedora 22, i DragonFly BSD 4.2. GCC version 5.1 (22 april 2015) lade till openacc.h-stödbiblioteket.
Användning
Huvudanvändningsläget för OpenACC är direktiv, precis som i OpenMP 3.x eller tidigare OpenHMPP , [18] [19] . Stödbiblioteket tillhandahåller flera hjälpfunktioner, som beskrivs i rubrikfilerna "openacc.h" för C/C++ och "openacc_lib.h" för Fortran; [20] .
Direktiv
OpenACC beskriver olika kompilatordirektiv (#pragma), inklusive [3] :
#pragma acc parallella
#pragma acc kärnor
Båda direktiven används för att definiera kod för parallell exekvering [21] [22]
Huvuddirektivet för att definiera och kopiera data:
#pragma acc data
Ett direktiv som definierar typen av samtidighet i regioner parallelochkernels
#pragma acc loop
Ytterligare direktiv
#pragma acc cache
#pragma acc update #pragma acc declare #pragma acc wait
Biblioteksfunktioner
Vissa standardfunktioner i bibliotek som implementerar OpenACC: acc_get_num_devices(), acc_set_device_type(), acc_get_device_type(), acc_set_device_num(), acc_get_device_num(), acc_async_test(), acc_async_testa_all(), a_cc(a_sync_testa_all(), a_cc(), a_ccallit() ), acc_on_device(), acc_malloc(), acc_free().
Se även
Anteckningar
- ↑ Nvidia, Cray, PGI och CAPS lanserar "OpenACC"-programmeringsstandard för parallell beräkning (länk ej tillgänglig) . The Inquirer (4 november 2011). Hämtad 9 maj 2015. Arkiverad från originalet 17 november 2011. (obestämd)
- ↑ Officiell webbplats för OpenACC . Hämtad 30 september 2012. Arkiverad från originalet 23 september 2012. (obestämd)
- ↑ 12 OpenACC standardversion 2.0 . OpenACC.org . Hämtad 14 januari 2014. Arkiverad från originalet 3 augusti 2016. (obestämd)
- ↑ GPU-datorer med enkla direktiv Arkiverad 4 november 2012 på Wayback Machine // NVidia, 2012
- ↑ Hur förhåller sig OpenACC API till OpenMP API? . OpenACC.org . Tillträdesdatum: 14 januari 2014. Arkiverad från originalet 16 januari 2014. (obestämd)
- ↑ Hur uppstod OpenACC-specifikationerna? . OpenACC.org . Tillträdesdatum: 14 januari 2014. Arkiverad från originalet 16 januari 2014. (obestämd)
- ↑ OpenMP-konsortiet släpper den första tekniska rapporten . OpenMP.org (5 november 2012). Tillträdesdatum: 14 januari 2014. Arkiverad från originalet 16 januari 2014. (obestämd)
- ↑ OpenMP på SC12 . OpenMP.org (29 augusti 2012). Tillträdesdatum: 14 januari 2014. Arkiverad från originalet 16 januari 2014. (obestämd)
- ↑ 1 2 OpenACC Group rapporterar utökat stöd för acceleratorprogrammeringsstandard (länk ej tillgänglig) . HPCwire (20 juni 2012). Hämtad 14 januari 2014. Arkiverad från originalet 23 juni 2012. (obestämd)
- ↑ Vad är OpenACC-specifikationen baserad på? . Hämtad 30 september 2012. Arkiverad från originalet 25 september 2012. (obestämd)
- ↑ OpenACC Version 2.0 Postat för kommentar . OpenACC.org (12 november 2012). Tillträdesdatum: 14 januari 2014. Arkiverad från originalet 16 januari 2014. (obestämd)
- ↑ OpenACC Standard för att hjälpa utvecklare att dra fördel av GPU Compute Accelerators (länk ej tillgänglig) . Xbit laboratories (16 november 2011). Tillträdesdatum: 14 januari 2014. Arkiverad från originalet 16 januari 2014. (obestämd)
- ↑ CAPS tillkännager fullt stöd för OpenACC 2.0 i dess kompilatorer . HPCwire (14 november 2013). Tillträdesdatum: 14 januari 2014. Arkiverad från originalet 16 januari 2014. (obestämd)
- ↑ OpenUH-kompilator (nedlänk) . Hämtad 4 mars 2014. Arkiverad från originalet 25 januari 2014. (obestämd)
- ↑ OpenARC-kompilator . Hämtad 4 november 2014. Arkiverad från originalet 4 november 2014. (obestämd)
- ↑ OpenACC - GCC Wiki . Tillträdesdatum: 9 maj 2015. Arkiverad från originalet 1 april 2015. (obestämd)
- ↑ Schwinge, Thomas Slå samman nuvarande uppsättning OpenACC-ändringar från gomp-4_0-branch . gcc e-postlista (15 januari 2015). Tillträdesdatum: 15 januari 2015. (obestämd)
- ↑ Dolbeau, Romain; Bihan, Stephane; Bodin, Francois (4 oktober 2007). HMPP: En hybrid flerkärnig parallell programmeringsmiljö (PDF) . Workshop om allmän bearbetning av grafiska bearbetningsenheter . Arkiverad från originalet (PDF) 2014-01-16 . Hämtad 14 januari 2014 . Arkiverad 16 januari 2014 på Wayback Machine
- ↑ Enkel GPU-parallellism med OpenACC . Dr. Dobb's (11 juni 2012). Tillträdesdatum: 14 januari 2014. Arkiverad från originalet 16 januari 2014. (obestämd)
- ↑ OpenACC API QuickReference Card, version 1.0 . NVidia (november 2011). Tillträdesdatum: 14 januari 2014. Arkiverad från originalet 16 januari 2014. (obestämd)
- ↑ OpenACC-kärnor och parallella konstruktioner . PGI insider (augusti 2012). Datum för åtkomst: 14 januari 2014. Arkiverad från originalet den 20 juli 2014. (obestämd)
- ↑ OpenACC parallellsektion VS-kärnor (nedlänk) . CAPS enterprise Knowledge Base (3 januari 2013). Tillträdesdatum: 14 januari 2014. Arkiverad från originalet 16 januari 2014. (obestämd)
Länkar