Otevřít ACC - OpenACC
Stabilní uvolnění | 2.7 / listopad 2018 |
---|---|
Napsáno | C, C ++, a Fortran |
Operační systém | Cross-platform |
Plošina | Cross-platform |
Typ | API |
webová stránka | www |
Otevřít ACC (pro otevřené akcelerátory) je programovací standard pro paralelní výpočty vyvinutý uživatelem Cray, CAPS, Nvidia a CHZO. Standard je navržen tak, aby zjednodušil paralelní programování heterogenní procesor /GPU systémy.[1]
Jako v OpenMP může programátor anotovat C, C ++ a Fortran zdrojový kód identifikovat oblasti, které by se měly urychlit pomocí směrnice kompilátoru a další funkce.[2] Stejně jako OpenMP 4.0 a novější může OpenACC cílit na procesor a GPU architektury a spustit na nich výpočetní kód.
Členové OpenACC pracovali jako členové standardní skupiny OpenMP, aby se spojili se specifikací OpenMP a vytvořili společnou specifikaci, která rozšiřuje OpenMP o podporu akcelerátorů v budoucím vydání OpenMP.[3][4] Výsledkem těchto snah byla technická zpráva[5] pro komentář a diskusi načasovanou tak, aby zahrnovala výroční Konference o superpočítačích (Listopad 2012, Salt Lake City ) a řešit podporu akcelerátorů jiných než Nvidia se vstupy od dodavatelů hardwaru, kteří se účastní OpenMP.[6]
Na ISC’12 bylo prokázáno, že OpenACC pracuje Nvidia, AMD a Intel akcelerátory, bez údajů o výkonu.[7]
12. listopadu 2012 byl na konferenci SC12 představen návrh specifikace OpenACC verze 2.0.[8] Nové navrhované funkce zahrnují nové ovládací prvky nad pohybem dat (například lepší zacházení s nestrukturovaná data a vylepšení v podpoře nesouvislé paměti) a podpora explicitních volání funkcí a samostatné kompilace (umožňující vytváření a opětovné použití knihoven zrychleného kódu). OpenACC 2.0 byl oficiálně vydán v červnu 2013.[9]
Verze 2.5 specifikace byla vydána v říjnu 2015,[10] zatímco verze 2.6 byla vydána v listopadu 2017.[11] Nejnovější verze specifikace, verze 2.7, byla vydána v listopadu 2018.[12]
3. dubna 2019 John Levesque (ředitel Cray Supercomputing Center of Excellence v Cray ) oznámil, že Cray končí s podporou OpenACC v CCE / 9.0.[13]
Podpora kompilátoru
Podpora OpenACC je k dispozici v komerčních kompilátorech od PGI (od verze 12.6) a (pouze pro hardware Cray) Cray.[7][14]
OpenUH[15] je Open64 založený open source kompilátor OpenACC podporující C a FORTRAN, vyvinutý skupinou HPCTools z University of Houston.
OpenARC[16] je open source překladač C vyvinutý na Národní laboratoř v Oak Ridge podporovat všechny funkce ve specifikaci OpenACC 1.0. Experimentální[17] překladač open source, accULL, je vyvíjen University of La Laguna (Jazyk C. pouze).[18]
Omni překladač[19][20] je překladač open source vyvinutý v laboratoři HPCS. z University of Tsukuba tým pro výzkum a programování prostředí v RIKEN Centrum pro výpočetní vědu, Japonsko, podporovaný OpenACC, XcalableMP a XcalableACC kombinace XcalableMP a OpenACC.
IPMACC[21] je open source překladač jazyka C vyvinutý společností University of Victoria který překládá OpenACC na CUDA, OpenCL a ISPC. V současné době jsou podporovány pouze následující směrnice: data, jádra, smyčka, a mezipaměti.
GCC podpora OpenACC byla pomalá.[22] Implementace cílení na GPU od společnosti Samsung byla oznámena v září 2013; tento přeložený kód s poznámkou OpenACC 1.1 do OpenCL.[17] Ohlášení „skutečné“ implementace následovalo o dva měsíce později, tentokrát od NVIDIA a založené na OpenACC 2.0.[23] To vyvolalo určitou polemiku, protože implementace by se zaměřila pouze na vlastní NVIDIA PTX assembler, pro který nebyl k dispozici žádný open source assembler ani runtime.[24][25] Experimentální podpora pro OpenACC / PTX skončila ve verzi GCC od verze 5.1. Série vydání GCC6 a GCC7 obsahují mnohem vylepšenou implementaci specifikace OpenACC 2.0a.[26][27] GCC 9.1 nabízí téměř úplnou podporu OpenACC 2.5.[28]
Používání
Podobným způsobem jako OpenMP 3.x na homogenním systému nebo dřívějším OpenHMPP, primárním režimem programování v OpenACC jsou směrnice.[29] Specifikace také obsahují a běhová knihovna definování několika podpůrných funkcí. Aby je uživatel mohl zneužít, měl by do jazyka C zahrnout „openacc.h“ nebo ve Fortranu „openacc_lib.h“;[30] a pak zavolat acc_init () funkce.
Směrnice
OpenACC definuje rozsáhlý seznam pragmat (směrnic),[31] například:
#pragma acc paralelně#pragma acc jádra
Oba se používají k definování paralelních výpočetních jader, která se mají provádět na akcelerátoru, pomocí odlišné sémantiky[32][33]
#pragma acc data
Je hlavní směrnicí pro definování a kopírování dat do az akcelerátoru.
#pragma acc loop
Používá se k definování typu paralelismu v a paralelní
nebo jádra
kraj.
#pragma acc cacheAktualizace #pragma acc#pragma acc prohlásit#pragma acc počkat
Runtime API
Existuje nějaká doba běhu API definovány také funkce: 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 ()
, acc_async_wait ()
, acc_async_wait_all ()
, acc_init ()
, acc_shutdown ()
, acc_on_device ()
, acc_malloc ()
, acc_free ()
.
OpenACC se obecně stará o organizaci práce pro cílové zařízení, ale to lze potlačit pomocí gangů a pracovníků. Gang se skládá z pracovníků a pracuje s řadou prvků zpracování (jako u pracovní skupiny v OpenCL).
Viz také
Reference
- ^ „Nvidia, Cray, PGI a CAPS zavádějí programovací standard„ OpenACC “pro paralelní výpočty“. Tazatel. 4. listopadu 2011.
- ^ „OpenACC standardní verze 2.5“ (PDF). OpenACC.org. Citováno 2. června 2017.
- ^ "Jak souvisí OpenACC API s OpenMP API?". OpenACC.org. Citováno 14. ledna 2014.
- ^ "Jak vznikly specifikace OpenACC?". OpenACC.org. Citováno 14. ledna 2014.
- ^ „Konsorcium OpenMP vydává první technickou zprávu“. OpenMP.org. 5. listopadu 2012. Citováno 14. ledna 2014.
- ^ „OpenMP at SC12“. OpenMP.org. 29. srpna 2012. Citováno 14. ledna 2014.
- ^ A b „Zpráva skupiny OpenACC rozšiřuje podporu standardu programování akcelerátorů“. HPCwire. 20. června 2012. Archivovány od originál dne 23. června 2012. Citováno 14. ledna 2014.
- ^ „OpenACC verze 2.0 zveřejněn pro komentář“. OpenACC.org. 12. listopadu 2012. Citováno 14. ledna 2014.
- ^ „Specifikace OpenACC 2.0 | www.openacc.org“. www.openacc.org. Archivovány od originál dne 04.04.2016. Citováno 2016-03-23.
- ^ „Skupina OpenACC Standards oznamuje vydání specifikace 2.5; Členští prodejci přidávají podporu pro ARM & x86 jako paralelní zařízení | www.openacc.org“. www.openacc.org. Archivovány od originál dne 26. 7. 2016. Citováno 2016-03-22.
- ^ „Co je nového v OpenACC 2.6? | OpenACC“. www.openacc.org. Citováno 2018-05-01.
- ^ „Co je nového v OpenACC 2.7! | OpenACC“. www.openacc.org. Citováno 2019-01-07.
- ^ „Názory Cray na #OpenACC vs. #OpenMP“. Citováno 14. května 2019.
- ^ „Standard OpenACC, který vývojářům pomůže využívat výhody výpočetních akcelerátorů GPU“. Xbit laboratoře. 16. listopadu 2011. Archivovány od originál dne 16. ledna 2014. Citováno 14. ledna 2014.
- ^ "OpenUH Compiler". Archivovány od originál dne 25. ledna 2014. Citováno 4. března 2014.
- ^ "OpenARC Compiler". Citováno 4. listopadu 2014.
- ^ A b Larabel, Michael (30. září 2013). „Podpora GCC zveřejněna pro OpenACC na GPU“. Phoronix.
- ^ „ÚPLNÁ implementace výzkumu OpenACC“. Citováno 14. ledna 2014.
- ^ „Omni Compiler“. omni-compiler.org. Citováno 2019-11-18.
- ^ Omni Compiler pro programy C a Fortran se směrnicemi XcalableMP a OpenACC: omni-compiler / omni-compiler, omni-compiler, 2019-10-17, vyvoláno 2019-11-17
- ^ „IPMACC Compiler“. Citováno 31. ledna 2017.
- ^ Larabel, Michael (4. prosince 2012). „OpenACC stále není oblíbený otevřenými překladači“. Phoronix.
- ^ Larabel, Michael (14. listopadu 2013). „OpenACC 2.0 s podporou GPU přichází do GCC“. Phoronix.
- ^ Larabel, Michael (15. listopadu 2013). „NVIDIA, Mentor Graphics May Harm GCC“. Phoronix.
- ^ Larabel, Michael (21. listopadu 2013). „In-Fighting Continues Over OpenACC in GCC“. Phoronix.
- ^ „OpenACC - GCC Wiki“.
- ^ Schwinge, Thomas (15. ledna 2015). "Sloučit aktuální sadu změn OpenACC z větve gomp-4_0". gcc (Poštovní seznam). gcc.gnu.org. Citováno 15. ledna 2015.
- ^ Jelinek, Jakub (3. května 2019). „Vydáno GCC 9.1“. LWN.net.
- ^ „Snadný paralelismus GPU s OpenACC“. Dr.Dobb. 11. června 2012. Citováno 14. ledna 2014.
- ^ „Karta QuickReference OpenACC API, verze 1.0“ (PDF). NVidia. Listopadu 2011. Citováno 14. ledna 2014.
- ^ „OpenACC standardní verze 2.0“ (PDF). OpenACC.org. Citováno 14. ledna 2014.
- ^ "Jádra OpenACC a paralelní konstrukce". Zasvěcenec CHZO. Srpna 2012. Citováno 14. ledna 2014.
- ^ "OpenACC paralelní sekce VS jádra". CAPS podniká znalostní databázi. 3. ledna 2013. Archivovány od originál dne 16. ledna 2014. Citováno 14. ledna 2014.
externí odkazy
- https://www.openacc.org/
- Příklad použití od Nvidia: část 1, část 2