9. tétel - Parallel sum & prefix scan
Mutassa be a párhuzamos összegzés módszereit! Mely esetekben használható a redukció? Hogyan párhuzamosítható a részösszegek számítása? Ismertesse a prefix scan algoritmusát!
Redukció
- Képzeljünk el egy feje tetejére állított bináris fát
- Pontosan annyi levéleleme van, mint ahány összegzendő elemünk
- Ha a közbülső elemek értékét a gyermekelemeik összegében határozzuk meg, akkor a gyökérelembe kerül az összeg
- Így az összegzés \(logN\) darab konkurens lépésben megoldható, míg szekvenciálisan \(O(n)\) komplexitású lett volna
- Szinkronizációs pontok szükségesek: az előző szint részeredményeit be kell várni, hogy a következő szint megoldását megkezdjük
- A részeredményeket tárolhatjuk külön, vagy felülírhatjuk a tömb elemeit, ha ez nem gond
- Ha a tömb elemszáma (
n) páratlan, akkor a szélső eseteket külön kell vizsgálni
Lépések

Megvalósítás

Megvalósítás vizualizálása

Adatdekompozíciós módszer
- A redukció akkor hatékony, ha szintenként az egyes konkurens műveletekhez dedikált műveletvégző párosul
- ehhez 8 elemnél 4 műveletvégző kell, ami jelentős ilyen kevés elemre
- ezt oldja meg az adatdekompozíció módszere
- Durvább szemcsézettségű megoldás, mint a redukció
- Nagyobb blokkokat határozunk meg
- A résztömböket dolgozzuk fel párhuzamosan
- A szálak számának meghatározása történhet az elérhető műveletvégzők száma alapján

Megvalósítás
t: a szálak száma
i: a szál azonosítószáma
feltételezzük, hogy a tömb mérete osztható a szálak számával
sumtömb t elemből áll, melyek kezdeti értéke 0- Minden szálnak van egy dedikált eleme a
sumtömbben, ebbe összegzi a saját résztömbjét - Miután minden szál végzett, a
sumtömb elemeinek összege adja az összes elem összegét.

Prefix Scan
- Részösszegek számítására szolgáló módszer
- Bemenete: n elemű tömb
- Kimenete: n elemű tömb, ahol a tömb i. elemében az elemek összege van, az első elemtől az i.-ig
- inkluzív prefix scan: az összegbe beleszámoljuk az i. elemet is
- exkluzív prefix scan: az i. elem nem számít bele
- A prefix scan szekvenciálisan is implementálható, de ekkor a komplexitása O(n).

Párhuzamos megvalósítás


Ha részletes magyarázatra van szükséged az algoritmus lépéseiről, itt találod a jegyzetben.
Adatdekompozíción alapuló megvalósítás
- A párhuzamos prefix scan is sok műveletvégzőt igényel, így itt is érdemes lehet adatdekompozícióval próbálkozni

- Az eredeti tömb geometriai dekompozíciója, a műveletvégzők számához igazodó darabszámú résztömb létrehozása
- A szétdarabolt tömb elemein helyi inkluzív prefix scan futtatása
- Miután a helyi műveletek véget értek, a prefix scan által előállt eredménytömbök utolsó elemeit (résztömbök összegeit) külön munkatömbbe gyűjtjük
- Ezen elemek exkluzív prefix scanjét kiszámoljuk
- A második lépésben előállt résztömbök elemeit a negyedik pontban kiszámolt tömbben tárolt értékekkel megnöveljük
- Ezáltal előáll az eredeti tömb inkluzív prefix scanje.