7. tétel: Párhuzamos tervezési minták I.
Mutassa be a Single Program - Multiple Data tervezési mintát! Ismertesse a tulajdonságait, az általános felépítését, valamint tipikus használati eseteit! Mutassa be a Loop Parallelism tervezési mintát!
Single Program - Multiple Data
Általános felépítése
-
Inicializálás
Lokális allokációs műveletek, ha szükséges akkor más szálakhoz való kapcsolódási pontok definiálása. Implementációtól függően eltérő rutinokat is jelent, de a memóriafoglalás és a kommunikációs csatornák létrehozása mindig megtörténik.
-
Egyedi azonosító
Minden szál egyedi azonosítóval rendelkezik, jellemzően 0-tól indexelve. Az azonosításon túl meghatározhatja a szál viselkedését.
-
Végrehajtás
A szálak adatoktól és azonosítójuktól függően végrehajtják ugyanazokat az utasításokat. Mindegyik szál ugyanazt a kódot futtatja, csak eltérhet, hogy melyik elágazásba melyik azonosítójú szálat engedjük be.
-
Adatok elosztása
Dedikált adatokat, vagy egy közös tároló logikai résztömbjét érik el a szálak. Fontos eleme az SMPD mintának, környezettől függően más-más implementációt jelent. Gyakori adatelérés esetén érdemes az adatot a szál lokális memóriájába másolni, hogy kevesebb kommunikációra legyen szükség.
-
Befejezés
A szálak leállítása, vagy bevárása, ha szükséges akkor az eredmények összegyűjtése (globális tárolóba vagy egyik szál lokális memóriájába). Ha olyan a feladat, akkor szükséges lehet egy randevú jellegű szinkronizációs pont létrehozása.
Tulajdonságok
- Fontos az adatok elosztása
- Számolni kell ennek az adatok dekompozíciójának, másolásának költségével (overhead)
- A lokális memóriába másolás így is megérheti, mert kisebb az overhead, mint hálózati kommunikációval
- Előnyök:
- könnyen áttekinthető a közös kódbázis miatt
- overhead csak az indítás, inicializálás és befejezés szakaszban fordulhat elő
Tipikus használati esetek
Jól használható, ha teljesülnek az alábbiak:
- feladatpárhuzamosság,
- a feladatok között nincs összefüggés,
- kommunikációra nincs szükség a szálak között.
Jó hatásfok érhető el geometriai felbontás esetén, ha a problémateret diszkrét alterekre bontjuk, és az ezeken végzett műveleteket külön műveletvégzőkhöz rendeljük: a feladatok ebben az esetben azonosak vagy hasonlóak, míg a szálak közti interakció úgyszintén nem jellemző.
Loop Parallelism
A Loop Parallelism mintát akkor használjuk, ha
- a megoldandó feladatban feladatpárhuzamosság alakítható ki
- középpontjában nagy lépésszámú ciklusok állnak
- a környezet pedig egy közös memóriájú rendszer
Elosztott rendszer esetében a Master/Worker vagy az SMPD minta használható a ciklus feldarabolására.
A minta előnye, hogy nem kell nagyon átalakítani az algoritmust, nem is kell érteni az egészet, csak a számításintenzív ciklust kell azonosítani és függetleníteni az iterációkat.
A minta alkalmazásának lépései
-
Számításigényes ciklusok felfedezése
Kód analízise, mérések készítése. Ha a bottleneck egy ciklus, jöhet a következő lépés.
-
Cikluson belüli függőségek megszüntetése
- A különböző iterációkat párhuzamosan feldolgozható, (részben) független feladatokká próbáljuk alakítani.
- Teljesen nem mindig lehet, de a cél a minél nagyobb függetlenség.
- Jellemzően a közös változókat szükséges elkerülni ideiglenes változók használatával, így a számítási komplexitást memóriaköltséggé alakítjuk.
-
Ciklusok párhuzamosítása
- A a kialakított feladatokat hozzárendeljük az elérhető műveletvégzőkhöz
- Ciklusváltozók tartományának felbontása
-
Ütemezés optimalizálása
- A feladatok vélhetően hasonlóak, a komplexitásuk is vélhetően hasonló
- ha mégsem, a programozó feladata figyelni a terheléseloszlásra
- A feladatok vélhetően hasonlóak, a komplexitásuk is vélhetően hasonló