Coarray Fortran - Coarray Fortran
| Paradigma | multi-paradigma : párhuzamos , üzenettovábbító , imperatív ( eljárási , objektum-orientált ), strukturált |
|---|---|
| Tervezte | Robert Numrich és John Reid |
| Fejlesztő | PL22.3 Fortran Bizottság |
| Stabil kiadás |
Fortran 2008 (ISO / IEC 1539-1: 2010)
|
| Gépelési fegyelem | erős , statikus |
| OS | Cross-platform |
| Főbb megvalósítások | |
| Cray, g95 , GNU Fortran , Intel Fortran fordító , Rice (CAF 2.0) , OpenUH | |
| Befolyásolta | |
| Fortran | |
A Coarray Fortran ( CAF ), korábban F-- néven ismert, a Fortran 95/2003 kiterjesztéseként kezdte meg a párhuzamos feldolgozást , amelyet Robert Numrich és John Reid készített az 1990-es években. A Fortran 2008 szabvány (ISO / IEC 1539-1: 2010) ma már magában foglalja a kókuszrátákat (kötőjelet nélkül), az ISO Fortran bizottság 2005. májusi ülésén elhatározottak szerint; a Fortran 2008 szabvány szintaxisa kissé eltér az eredeti CAF javaslattól.
A CAF programot úgy értelmezik, mintha azt többször megismételnék, és az összes példányt aszinkron módon hajtották végre. Minden másolatnak megvan a saját adatobjektumkészlete, és képet nevezzen . A Fortran tömbszintaxisa kiegészítve további zárójelben lévő zárójelekkel, hogy tömör ábrázolást nyújtson a képekre elosztott adatokra.
A CAF kiterjesztést néhány Fortran fordítóba bevezették , például a Cray verzióiból (a 3.1 kiadás óta). Mivel a kókuszráták bekerültek a Fortran 2008 szabványba, a megvalósítások száma növekszik. Az első olyan nyílt forráskódú fordító, amely a Linux architektúrákra vonatkozóan a Fortran 2008 szabványban meghatározta a coarray-kat, a G95 . Jelenleg a GNU Fortran széleskörű lefedettséget nyújt a Fortran Coarray szolgáltatásaihoz egy- és többképes konfigurációban (az utóbbi az OpenCoarrays könyvtáron alapul). Tovább végrehajtása coarrays és kapcsolódó párhuzamos a bővítmények Fortran 2008 áll rendelkezésre OpenUH fordító (kirendeltsége Open64 ) fejlesztettek ki a University of Houston .
tartalom
Végrehajtás fordítóban
A CAF-t gyakran a Message Passing Interface (MPI) könyvtár tetején valósítják meg a hordozhatóság érdekében. Néhány megvalósítás, például a GNU Fortran és az OpenUH fordítókban elérhető, futhat más alacsony szintű rétegeken (például GASNet), amelyek célja a particionált globális címtér- nyelvek támogatása.
Példák
Az alábbiakban bemutatunk egy egyszerű példát. A CAF-ot a CGPACK-ben használják, amely a Bristoli Egyetemen kifejlesztett polikristályos anyagok szimulálására szolgáló nyílt forráskódú csomag .
program Hello_World
implicit none
integer :: i ! Local variable
character(len=20) :: name[*] ! scalar coarray, one "name" for each image.
! Note: "name" is the local variable while "name[<index>]" accesses the
! variable in a specific image; "name[this_image()]" is the same as "name".
! Interact with the user on Image 1; execution for all others pass by.
if (this_image() == 1) then
write(*,'(a)',advance='no') 'Enter your name: '
read(*,'(a)') name
! Distribute information to other images
do i = 2, num_images()
name[i] = name
end do
end if
sync all ! Barrier to make sure the data have arrived.
! I/O from all images, executing in any order, but each record written is intact.
write(*,'(3a,i0)') 'Hello ',trim(name),' from image ', this_image()
end program Hello_world
A fenti program rosszul skálázódik, mert az információt terjesztő hurok egymás után hajt végre. A skálázható programok írása gyakran megköveteli a párhuzamos algoritmusok kifinomult megértését, a mögöttes hálózati jellemzők részletes ismereteit és az alkalmazás jellemzőinek, például az adatátvitel méretének speciális hangolását. A legtöbb alkalmazásfejlesztő számára, ha hagyja, hogy a fordító vagy a futásidejű könyvtár döntsön a legjobb algoritmusnak, az robosztusabb és nagy teljesítményű. A Fortran 2018 kollektív kommunikációs szubrutinokat kínál, amelyek felhatalmazást nyújtanak a fordító és a futásidejű könyvtári csapatok számára a hatékony párhuzamos algoritmusok beépítéséhez a kollektív kommunikációhoz és az elosztott számításhoz egy kollektív alprogramban. Ezeket az alprogramokat és más új, párhuzamos programozási funkciókat egy olyan műszaki leírás foglalja össze, amelyet a Fortran szabványügyi bizottság megszavazott a Fortran 2018-ba történő beépítésre. Ezek lehetővé teszik a felhasználó számára, hogy a fenti algoritmus hatékonyabb változatát írja le.
program Hello_World
implicit none
character(len=20) :: name[*] ! scalar coarray, one "name" for each image.
! Note: "name" is the local variable while "name[<index>]" accesses the
! variable in a specific image; "name[this_image()]" is the same as "name".
! Interact with the user on Image 1; execution for all others pass by.
if (this_image() == 1) then
write(*,'(a)',advance='no') 'Enter your name: '
read(*,'(a)') name
end if
! Distribute information to all images
call co_broadcast(name,source_image=1)
! I/O from all images, executing in any order, but each record written is intact.
write(*,'(3a,i0)') 'Hello ',trim(name),' from image ', this_image()
end program Hello_world
ahol az explicit szinkronizálás hiánya a jobb teljesítményt nyújtja a képek közötti kisebb koordináció miatt. Ezenkívül a TS 18508 garantálja, hogy "Átvitel a képről nem lehetséges, mielőtt a kollektív szubrutinot meg nem hívták a képen." Ez bizonyos részleges szinkronizálást igényel a co_broadcaston, de nagyobb teljesítményt nyújthat, mint az előző példában szereplő "összes szinkronizálása". A TS 18508 számos új funkcióval is rendelkezik, amelyek az alábbiakban ismertetett CAF 2.0 erőfeszítés célkitűzéseivel foglalkoznak. Ilyen például képek és események csapata.
Alternatív perspektíva
2011-ben a Rice Egyetem alternatív elképzelést folytatott a fortran nyelv coarray kiterjesztéseiről. Véleményük szerint a Fortran 2008 szabványbizottsági tervezési döntéseit inkább az a vágy alakította ki, hogy a nyelvre minél kevesebb módosítást vezessenek be, mint hogy összeállítsák a legjobb kiterjesztés-készletet a párhuzamos programozás támogatására . Véleményük szerint mind a Numrich, mind a Reid eredeti terve és a Fortran 2008-ra javasolt Coarray-kiterjesztések a következő hiányosságoktól szenvednek:
- A processzor alkészletei nem támogatottak ; például a kókuszrátákat minden képre el kell osztani.
- A Coarray kiterjesztésekben nincs a globális mutatók fogalma, amelyek nélkülözhetetlenek bármilyen kapcsolódó adatszerkezet létrehozásához és manipulálásához.
- A kölcsönös kirekesztés megnevezett kritikus szakaszaira való támaszkodás gátolja a skálázható párhuzamosságot azáltal, hogy a kölcsönös kirekesztést a kódrészekkel, nem pedig az adatobjektumokkal társítja.
- A Fortran 2008 szinkronizáló képeinek nyilatkozata nem nyújt biztonságos szinkronizálási helyet. Ennek eredményeként a felhasználói kódban a könyvtárhívás kezdeményezésekor függőben lévő szinkronizálási műveletek megzavarhatják a könyvtárhívás szinkronizálását.
- Nincsenek olyan mechanizmusok, amelyek elkerülhetik vagy elviselhetik a késleltetést a távoli képek adatainak kezelésekor.
- A kollektív kommunikáció nem támogatott.
Ezeknek a hiányosságoknak a kiküszöbölése érdekében a Rice University csoport a Coarray Fortran programozási modell tiszta pala átalakítását dolgozza ki. A Rice új terve a Coarray Fortran számára, amelyet Coarray Fortran 2.0-nak hívnak, a Fortran Coarray-alapú kiterjesztéseinek kifejezőkészlete, amelynek célja egy produktív párhuzamos programozási modell biztosítása. A Fortran 2008-hoz képest a Rice új coarray-alapú nyelvi kiterjesztései tartalmaznak néhány további funkciót:
- csoportként ismert folyamat-részhalmazok, amelyek támogatják a párbeszédek, a kollektív kommunikáció és a folyamatképek relatív indexelését páronkénti műveletek során,
- topológiák, amelyek logikai kommunikációs struktúrával bővítik a csapatokat,
- a kókuszráták és más megosztott adatok dinamikus elosztása / elosztása,
- csapat alapú Coarray allokáció és üzlethelyiség,
- globális mutatók a dinamikus adatszerkezetek támogatására,
- - a késés elrejtésének és elkerülésének támogatása, és -
- aszinkron másolatok,
- - aszinkron kollektív műveletek, és -
- funkció szállítás.
- fokozott támogatást nyújt a szinkronizáláshoz a program végrehajtásának finomszintű vezérlése érdekében.
- biztonságos és méretezhető támogatás a kölcsönös kizáráshoz, ideértve a zárakat és a zárkészleteket,
- események, amelyek biztonságos helyet biztosítanak a pont-pont szinkronizáláshoz,
- cofence, amely az aszinkron műveletek helyi végrehajtását kényszeríti,
- cél: egy akadályszerű SPMD konstrukció, amely az aszinkron műveletek befejezését kéri egy csapaton belül,