Automatikus párhuzamosítás
Automatikus párhuzamosítás - a program optimalizálása a fordító által , amely abból áll, hogy automatikusan olyan formává alakítja, amely egy párhuzamos számítógépen fut , például egy SMP vagy NUMA gépen. A párhuzamosítás automatizálásának célja, hogy megszabadítsa a programozót a kézi párhuzamosítás időigényes és hibalehető folyamatától. Annak ellenére, hogy az elmúlt években javult az automatikus párhuzamosítás minősége, a szekvenciális programok teljes párhuzamosítása továbbra is túlságosan nehéz feladat, amely a legösszetettebb programelemzést igényli.
Az automatikus párhuzamosító általában olyan vezérlőkonstrukciókra összpontosít, mint például a tömböket feldolgozó hurkok , mivel általában a program végrehajtásának nagy része valamilyen hurkon belül történik. A párhuzamos fordító megpróbálja a ciklust részekre bontani, hogy annak különálló iterációi különböző processzorokon egyidejűleg végrehajthatók legyenek.
Programelemzés
A fordítók a párhuzamosítás előtt elemzik a következő kérdéseket:
- Biztonságos ezt a hurkot párhuzamosítani? Gondos függőségelemzés és mutató- vagy álnév-függetlenségi elemzés ( en:alias elemzés ) szükséges. A hurokiterációknak nem lehetnek adatfüggői. [egy]
- Megéri párhuzamosítani a hurkot? [1] A kérdés megválaszolásához a program működésének megbízható értékelése (szimulációja) és a párhuzamos rendszer tulajdonságainak figyelembevétele szükséges.
Nehézségek
Az automatikus párhuzamosítás a fordítók számára nehézséget okoz a következő okok miatt:
- A függőségi elemzés nehézkes az indirekt , mutatók, rekurzió, függvényhívásokat [1] használó kódoknál , különösen az indirekt módon történő hívásoknál (például egy korábban ismeretlen osztály virtuális függvényei).
- A hurkok tartalmazhatnak ismeretlen számú iterációt vagy összetetten változó számú iterációt. [1] Ez megnehezíti a párhuzamosítást igénylő hurkok kiválasztását.
- A globális erőforrásokhoz való hozzáférést nehéz koordinálni a memóriafoglalás, az I/O és a megosztott változók tekintetében.
A teljesen automatikus párhuzamosítás bonyolultsága miatt számos megközelítés létezik az egyszerűsítésre:
- Lehetővé teszi a programozóknak, hogy fordítói tippeket adjanak a programhoz, hogy befolyásolják a párhuzamosítási folyamatot (akár az elemzések egyszerűsítése érdekében, hogy a mutatókat nem átfedőként jelölik meg (korlátozás [1] ), vagy "forró" ciklusok megadásával). A meglehetősen részletes fordítói utasításokat igénylő megoldások közé tartozik a High Performance Fortran az elosztott memóriarendszerekhez és az OpenMP az osztott memóriarendszerekhez.
- Hozzon létre egy interaktív összeállítási rendszert, amelyben egy személy részt venne. Az ilyen rendszereket a SUIF Explorer alprojekt részeként (SUIF projekt – The Stanford University Intermediate Format compiler, http://suif.stanford.edu/ ) hozták létre Polaris és ParaWise fordítókban (CAPTools környezetben).
- Adjon hozzá spekulatív többszálú megoldást a hardverhez .
Korai párhuzamosító fordítók
Sok korai párhuzamosító fordító Fortranban írt programokkal dolgozott , mivel a C- hez képest szigorúbb korlátozások vonatkoztak a mutató- aliasozásra . Emellett számos számítási matematikai programot írnak Fortranban, amelyek munkájukhoz nagy erőforrásokat igényelnek. Példák fordítóprogramra:
- Rice Fortran D fordító
- Bécsi Fortran fordító
- paradigma fordító
- Polaris fordító
- SUIF fordító
Modern fordítók párhuzamosítási támogatással
Lásd még
- Hurokfészek optimalizálása
- politóp modell
- Skálázható párhuzamosság
- automatikus párhuzamosító eszköz
Jegyzetek
- ↑ 1 2 3 4 5 6 7 8 Patrick Lam. 12. előadás Ma az automatikus párhuzamosításról lesz szó (hivatkozás nem elérhető) . ECE459: Programozás a teljesítményért (2011. február 10.). Letöltve: 2013. november 17. Az eredetiből archiválva : 2015. május 27.. (határozatlan)
- ↑ 1 2 Robert van Engelen. Nagy teljesítményű számítástechnika és tudományos számítástechnika . HPC @ Florida State University (2012. október 3.). Letöltve: 2013. november 17. Az eredetiből archiválva : 2015. május 27.. (határozatlan)
Linkek