ÅbnACC
Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den
version , der blev gennemgået den 25. december 2021; checks kræver
2 redigeringer .
OpenACC (fra engelsk. Open Accelerators ) er en softwarestandard for parallel programmering, udviklet i fællesskab af Cray , CAPS , Nvidia og PGI . Standarden beskriver et sæt kompileringsdirektiver designet til at forenkle skabelsen af heterogene parallelle programmer ved brug af både den centrale og grafiske [1] [2] processor.
Ligesom den tidligere OpenMP -standard bruges OpenACC til at kommentere programfragmenter i C , C++ og Fortran . Ved hjælp af et sæt kompileringsdirektiver markerer programmøren kodesektioner, der skal udføres parallelt eller på GPU'en, angiver hvilke af variablerne der er fælles, og hvilke der er trådspecifikke osv. [3] . Syntaksen ligner OpenMP [ 4] . OpenACC-standarden giver programmøren mulighed for at abstrahere fra de særlige forhold ved initialiseringen af GPU'en, spørgsmålene om overførsel af data til og fra coprocessoren osv.
Historie
Skaberne af OpenACC er også involveret i arbejdet med OpenMP-standarder og planlægger at udvide fremtidige versioner af OpenMP til at understøtte computeracceleratorer. [5] [6] I november 2012 blev en teknisk rapport [7] offentliggjort for at diskutere og tilføje understøttelse af ikke-Nvidia acceleratorer. [8] ISC'12 demonstrerede OpenACC på Nvidia- , AMD- og Intel - acceleratorer uden at offentliggøre ydeevnedata. [9]
Det er planlagt at kombinere specifikationerne for OpenACC og OpenMP, herunder i sidstnævnte støtte til at arbejde med acceleratorer, herunder GPU'er [10] .
Et udkast til den anden version af standarden, OpenACC 2.0, blev præsenteret i november 2012 på SC12-konferencen. [11] Dataoverførselskontroldirektiver, understøttelse af eksplicitte funktionskald og separat kompilering blev tilføjet til standarden.
Kompilerunderstøttelse
Implementering af OpenACC er tilgængelig i compilere fra PGI (siden version 12.6), Cray og CAPS. [9] [12] [13]
HPCTools-gruppen ved University of Houston har tilføjet OpenACC-understøttelse til open source OpenUH-kompileren baseret på Open64- koder [14] .
ORNL National Laboratory udviklede OpenARC open source-kompileren [15] til C-sproget, som understøtter OpenACC version 1.0.
Den gratis compiler GNU GCC understøtter OpenACC siden version 5. [16] [17] GCC 5 er inkluderet i Ubuntu 15.10, i Fedora 22, i DragonFly BSD 4.2. GCC version 5.1 (22. april 2015) tilføjede openacc.h-understøttelsesbiblioteket.
Brug
Hovedbrugstilstanden for OpenACC er direktiver, ligesom i OpenMP 3.x eller tidligere OpenHMPP , [18] [19] . Supportbiblioteket giver adskillige hjælpefunktioner, beskrevet i header-filerne "openacc.h" for C/C++ og "openacc_lib.h" for Fortran; [20] .
Direktiver
OpenACC beskriver forskellige compiler-direktiver (#pragma), herunder [3] :
#pragma acc parallel
#pragma acc kernels
Begge direktiver bruges til at definere kode til parallel eksekvering [21] [22]
Hoveddirektivet for definition og kopiering af data:
#pragma acc data
Et direktiv, der definerer typen af samtidighed i regioner parallelogkernels
#pragma acc loop
Yderligere direktiver
#pragma acc cache
#pragma acc update #pragma acc declare #pragma acc wait
Biblioteksfunktioner
Nogle standardfunktioner for biblioteker, der implementerer 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_test_all(), a_ccit(), a_utallin(), a_cwait(), a_utallin(), a_cwait(), a_cwait(), ), acc_on_device(), acc_malloc(), acc_free().
Se også
Noter
- ↑ Nvidia, Cray, PGI og CAPS lancerer 'OpenACC'-programmeringsstandarden for parallel databehandling (link ikke tilgængeligt) . The Inquirer (4. november 2011). Hentet 9. maj 2015. Arkiveret fra originalen 17. november 2011. (ubestemt)
- ↑ OpenACC officielle hjemmeside . Hentet 30. september 2012. Arkiveret fra originalen 23. september 2012. (ubestemt)
- ↑ 12 OpenACC standard version 2.0 . OpenACC.org . Hentet 14. januar 2014. Arkiveret fra originalen 3. august 2016. (ubestemt)
- ↑ GPU-databehandling med simple direktiver Arkiveret 4. november 2012 på Wayback Machine // NVidia, 2012
- ↑ Hvordan relaterer OpenACC API til OpenMP API? . OpenACC.org . Dato for adgang: 14. januar 2014. Arkiveret fra originalen 16. januar 2014. (ubestemt)
- ↑ Hvordan opstod OpenACC-specifikationerne? . OpenACC.org . Dato for adgang: 14. januar 2014. Arkiveret fra originalen 16. januar 2014. (ubestemt)
- ↑ OpenMP-konsortiet udgiver den første tekniske rapport . OpenMP.org (5. november 2012). Dato for adgang: 14. januar 2014. Arkiveret fra originalen 16. januar 2014. (ubestemt)
- ↑ OpenMP på SC12 . OpenMP.org (29. august 2012). Dato for adgang: 14. januar 2014. Arkiveret fra originalen 16. januar 2014. (ubestemt)
- ↑ 1 2 OpenACC Group-rapporter udvider understøttelse af acceleratorprogrammeringsstandard (link ikke tilgængeligt) . HPCwire (20. juni 2012). Hentet 14. januar 2014. Arkiveret fra originalen 23. juni 2012. (ubestemt)
- ↑ Hvad er OpenACC-specifikationen baseret på? . Hentet 30. september 2012. Arkiveret fra originalen 25. september 2012. (ubestemt)
- ↑ OpenACC Version 2.0 Sendt til kommentar . OpenACC.org (12. november 2012). Dato for adgang: 14. januar 2014. Arkiveret fra originalen 16. januar 2014. (ubestemt)
- ↑ OpenACC Standard for at hjælpe udviklere med at drage fordel af GPU Compute Accelerators (link ikke tilgængeligt) . Xbit laboratorier (16. november 2011). Dato for adgang: 14. januar 2014. Arkiveret fra originalen 16. januar 2014. (ubestemt)
- ↑ CAPS annoncerer fuld understøttelse af OpenACC 2.0 i dets kompilatorer . HPCwire (14. november 2013). Dato for adgang: 14. januar 2014. Arkiveret fra originalen 16. januar 2014. (ubestemt)
- ↑ OpenUH Compiler (downlink) . Hentet 4. marts 2014. Arkiveret fra originalen 25. januar 2014. (ubestemt)
- ↑ OpenARC Compiler . Hentet 4. november 2014. Arkiveret fra originalen 4. november 2014. (ubestemt)
- ↑ OpenACC - GCC Wiki . Dato for adgang: 9. maj 2015. Arkiveret fra originalen 1. april 2015. (ubestemt)
- ↑ Schwinge, Thomas Merge nuværende sæt af OpenACC-ændringer fra gomp-4_0-branch . gcc-mailingliste (15. januar 2015). Dato for adgang: 15. januar 2015. (ubestemt)
- ↑ Dolbeau, Romain; Bihan, Stephane; Bodin, Francois (4. oktober 2007). HMPP: Et hybridt multikernet parallelt programmeringsmiljø (PDF) . Workshop om generel behandling af grafikbehandlingsenheder . Arkiveret fra originalen (PDF) 2014-01-16 . Hentet 14. januar 2014 . Arkiveret 16. januar 2014 på Wayback Machine
- ↑ Nem GPU-parallelisme med OpenACC . Dr. Dobb's (11. juni 2012). Dato for adgang: 14. januar 2014. Arkiveret fra originalen 16. januar 2014. (ubestemt)
- ↑ OpenACC API QuickReference Card, version 1.0 . NVidia (november 2011). Dato for adgang: 14. januar 2014. Arkiveret fra originalen 16. januar 2014. (ubestemt)
- ↑ OpenACC-kerner og parallelle konstruktioner . BGB-insider (august 2012). Dato for adgang: 14. januar 2014. Arkiveret fra originalen 20. juli 2014. (ubestemt)
- ↑ OpenACC parallel sektion VS kerner (downlink) . CAPS enterprise Knowledge Base (3. januar 2013). Dato for adgang: 14. januar 2014. Arkiveret fra originalen 16. januar 2014. (ubestemt)
Links