Coarray Fortran - 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 .

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,

Lásd még

Irodalom

Tábornok