GPGPU és számítások heterogén rendszereken

Hasonló dokumentumok
Eichhardt Iván GPGPU óra anyagai

Eichhardt Iván GPGPU óra anyagai

Adat- és feladat párhuzamos modell Az ISO C99 szabvány részhalmaza

OpenCL - The open standard for parallel programming of heterogeneous systems

Készítette: Trosztel Mátyás Konzulens: Hajós Gergely

Grafikus processzorok általános célú programozása (GPGPU)

Párhuzamos és Grid rendszerek

Magas szintű optimalizálás

Videókártya - CUDA kompatibilitás: CUDA weboldal: Példaterületek:

Flynn féle osztályozás Single Isntruction Multiple Instruction Single Data SISD SIMD Multiple Data MISD MIMD

Grafikus csővezeték 1 / 44

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

GPGPU-k és programozásuk Dezső, Sima Sándor, Szénási

Diplomamunka. Miskolci Egyetem. GPGPU technológia kriptográfiai alkalmazása. Készítette: Csikó Richárd VIJFZK mérnök informatikus

GPU-k a gravitációs hullám kutatásban

Számítógépek felépítése

SAT probléma kielégíthetőségének vizsgálata. masszív parallel. mesterséges neurális hálózat alkalmazásával

A számítógép egységei

GPGPU. GPU-k felépítése. Valasek Gábor

GPGPU alapok. GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai

GPGPU programozás lehetőségei. Nagy Máté Ferenc Budapest ALICE ELTE TTK Fizika MSc 2011 e-science Café

egy szisztolikus példa

GPU alkalmazása az ALICE eseménygenerátorában

Bevezetés. Többszálú, többmagos architektúrák és programozásuk Óbudai Egyetem, Neumann János Informatikai Kar

OpenCL Kovács, György

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

Fejlett programozási nyelvek C++ Iterátorok

Google Summer of Code OpenCL image support for the r600g driver

Dr. Schuster György február / 32

GPU-Accelerated Collocation Pattern Discovery

Számítógép felépítése

Nemlineáris optimalizálási problémák párhuzamos megoldása grafikus processzorok felhasználásával

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

GPGPU: Általános célú grafikus processzorok cgpu: computational GPU GPGPU = cgpu Adatpárhuzamos gyorsító: dedikált eszköz, ami eleve csak erre

Occam 1. Készítette: Szabó Éva

Adatok ábrázolása, adattípusok

Informatika el adás: Hardver

Java II. I A Java programozási nyelv alapelemei

Adatfolyam alapú RACER tömbprocesszor és algoritmus implementációs módszerek valamint azok alkalmazásai parallel, heterogén számítási architektúrákra

A CUDA előnyei: - Elszórt memória olvasás (az adatok a memória bármely területéről olvashatóak) PC-Vilag.hu CUDA, a jövő technológiája?!

Az MTA Cloud a tudományos alkalmazások támogatására. Kacsuk Péter MTA SZTAKI

Nagy adattömbökkel végzett FORRÓ TI BOR tudományos számítások lehetőségei. kisszámítógépes rendszerekben. Kutató Intézet

Weblog elemzés Hadoopon 1/39

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

GPU Lab. 14. fejezet. OpenCL textúra használat. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Számítógépek felépítése, alapfogalmak

Előadó: Nagy István (A65)

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

Joint Test Action Group (JTAG)

elektronikus adattárolást memóriacím

Grafikus csővezeték és az OpenGL függvénykönyvtár

Kifejezések. Kozsik Tamás. December 11, 2016

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Bevezetés a programozásba. 5. Előadás: Tömbök

Számítógépek felépítése, alapfogalmak

Java II. I A Java programozási nyelv alapelemei

I. LABOR -Mesterséges neuron

Operációs rendszerek gyak.

9. MPI

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

Architektúra, megszakítási rendszerek

CUDA haladó ismeretek

CUDA alapok CUDA projektek. CUDA bemutató. Adatbányászat és Webes Keresés Kutatócsoport SZTAKI

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Dr. Oniga István DIGITÁLIS TECHNIKA 8

Hallgatói segédlet: Nvidia CUDA C programok debugolása Nvidia Optimus technológiás laptopokon. Készítette: Kovács Andor. 2011/2012 első félév

OpenGL Compute Shader-ek. Valasek Gábor

Számítógép architektúrák záróvizsga-kérdések február

Hardver Ismeretek IA32 -> IA64

A C programozási nyelv I. Bevezetés

FIR SZŰRŐK TELJESÍTMÉNYÉNEK JAVÍTÁSA C/C++-BAN

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Bevezetés a párhuzamos programozási koncepciókba

Muppet: Gyors adatok MapReduce stílusú feldolgozása. Muppet: MapReduce-Style Processing of Fast Data

Szűrő architektúrák FPGA realizációjának vizsgálata

VLIW processzorok (Működési elvük, jellemzőik, előnyeik, hátrányaik, kereskedelmi rendszerek)

AliROOT szimulációk GPU alapokon

Számítógép architektúra

Párhuzamos programozási platformok

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós május 6. Széchenyi István Egyetem, Gy r

Mi van a számítógépben? Hardver

Bepillantás a gépházba

A processzor hajtja végre a műveleteket. összeadás, szorzás, logikai műveletek (és, vagy, nem)

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

10. gyakorlat Struktúrák, uniók, típusdefiníciók

HÁZI FELADAT PROGRAMOZÁS I. évf. Fizikus BSc. 2009/2010. I. félév

Fordítás Kódoptimalizálás

Párhuzamos programozási platformok

A C programozási nyelv I. Bevezetés

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Programozás II. előadás

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

ELŐADÁS SZÁMÍTÓGÉP MŰKÖDÉSE FIZIKA ÉS INFORMATIKA

Processzor (CPU - Central Processing Unit)

C++ Standard Template Library (STL)

Mintavételes szabályozás mikrovezérlő segítségével

Készítette: Nagy Tibor István

S z á m í t ó g é p e s a l a p i s m e r e t e k

Átírás:

GPGPU és számítások heterogén rendszereken

Eichhardt Iván eichhardt.ivan@sztaki.mta.hu ELTE-s GPGPU óra anyagai http://cg.inf.elte.hu/~gpgpu/

Gyors bevezetés a Párhuzamosságról OpenCL API Gyakorlati példák (C++) Párhuzamos programozás elméleti megközelítésben

Lassú a fény? Kevés a tranzisztor? Netán rosszul van megírva?

Kezdjük egy kis számolási példával A fény sebessége 300.000 km/s. Van egy gépünk egy 3,5 GHz-es CPU-val. A proci 2 órajel alatt képes lebegőpontos összeadásra 1 méteres kábellel csatlakoztatunk egy USB merevlemezt. A következő adat a lemezen van, be kell olvasni. Hány összeadást tudna a proci addig elvégezni, amíg a lemezről az elektronok (~fénysebességgel) megérkeznek a CPU-ba?

A processzor órajele 3.5Ghz = 3.500.000.000Hz Egy órajel 1/3.500.000.000 = 285,7 psec (pikosec). Két órajel (egy összeadás) 571,8 psec időt vesz igénybe. A fény ennyi idő alatt 3*10^8m/s *571,8 *10^-12s = 0.17m utat tesz meg. Méteres kábel esetén: 1m/0,17m ~=~ 6 utasításnyi idő. Tehát a CPU-nk 6 utasításnyi időt malmozott, amíg az adat megérkezett. és akkor egyéb lassító tényezővel nem is számoltunk... Pl. HDD tipikus elérése 20 msec......ami alatt a CPU szabadságra is mehet.

Az algoritmusaink egymás utáni (szekvenciális) lépésekből állnak. A független lépéseket lehetne egyszerre végrehajtani Kulcs: párhuzamosítás. Ami számtalan módon lehtséges. Természetesen mindennek megvan az ára.

Lassú a fény? Utaztassuk kevesebbet az adatokat! Mozgassunk egyszerre több adatot! (32, 64, ) Gyorsítótár! (Cache)

Kevés a tranzisztor? Párhuzamos architektúrák!

Kevés a tranzisztor? Párhuzamos architektúrák!

Kevés a tranzisztor? Párhuzamos architektúrák! SISD Single Instruction Single Data Minden utasítás a saját adatával foglalkozik. MIMD Multiple Instruction Multiple Data Egyszerre több utasítás dolgozik a saját adatain. Több processzormag Több szál / processzormag MISD Multiple Instruction Single Data Robusztusság SIMD Single Instruction Multiple Data Ugyan azt az utasítást több adaton végezzük el. GPU archihektúra

Csíkszélesség csökkentése. Több tranzisztor fér el egy helyen. ~14 nm <? Korlátok: Atomi méreteken: szivárgó áram. (atom átmérője ~ 10 100 pikométer)

Nagy fejlődésen mentek át. Nagyon specializált, nem programozható hardware. Általános célú számításokra alkalmazható, programozható hardware.

Nagy fejlődésen mentek át.

GPGPU General-purpose computing on Graphics Processing Units Egy átlagos felhasználó számára a legnagyobb számítási teljesítmény a GPU-ból nyerhető ki. Ereje a párhuzamosságban rejlik.

Fehérjék feltekeredésének (folding) szimulációja Folding@home H1N1 szimuláció Az elveszett Apollo 11 videó Források: Felülírt videó, néhány átvett, és egy felvétel egy monitorról, amin a videót játsszák le éppen. 100x-os gyorsítás Neuronhálók tanítása Deep Learning, stb.

FPGA, GPGPU, CPU Field-programmable gate array (FPGA) DES dekódolás esete Data Encryption Standard CPU: 16 millió kulcs / másodperc GPU: 250millió kulcs / másodperc (GTX-295) FPGA: ~1.8 milliárd kulcs / másodperc

H1N1 szimuláció L. Barney - Studying the H1N1 virus using NVIDIA GPUs, Nov 2009. http://blogs.nvidia.com/ntersect/2009/11/studying-the-h1n1-virus-usingnvidia-gpus-.html Apollo 11 R. Wilson - DSP brings you a high-definition moon walk, Sep 2009. http://www.edn.com/article/ca6685974.html DES dekódolás Dr. Dobbs - Parallel algorithm leads to crypto breakthrough, Jan 2010. http://www.ddj.com/222600319 A GPGPU problémái A. Ghuloum - The problem(s) with GPGPU, Oct 2007. http://blogs.intel.com/research/2007/10/the_problem_with_gpgpu.php

Nincs szinkronizáció és kommunikáció Csővezeték alkalmazása Párhuzamosítás Alapműveletek: Map, Amplify, Reduce, Sum

Forrás: http://cg.iit.bme.hu/portal/node/311

SIMD GPU multiprocesszor (pl. Vertex tulajdonság streamek) CPU kiterjesztések (SSE*, 3DNow!, MMX, ) Adatközpontúság, erőteljesen párhuzamosítható Az adatot vektorként kezeljük Például (vec_res, v1, v2 4 32 bites float vektorok): vec_res.x = v1.x + v2.x; vec_res.y = v1.y + v2.y; vec_res.z = v1.z + v2.z; vec_res.w = v1.w + v2.w; Egy művelettel írható le

32-bit hosszú bináris sztringek Manhattan távolsága Ciklussal (Szekvenciális megoldás) int bitcount_naive(int x) { int count = 0; while (x!= 0) { if ((x & 1) == 1) { count++; } x >>= 1; } return count; }

32-bit hosszú bináris sztringek Manhattan távolsága Bármilyen meglepő, egy processzormagon is tudunk párhuzamosítani!

32-bit hosszú bináris sztringek Manhattan távolsága Párhuzamos megoldás unsigned int bitcount(unsigned int x) { x = (x & (0x55555555)) + ((x >> 1) & (0x55555555)); x = (x & (0x33333333)) + ((x >> 2) & (0x33333333)); x = (x & (0x0f0f0f0f)) + ((x >> 4) & (0x0f0f0f0f)); x = (x & (0x00ff00ff)) + ((x >> 8) & (0x00ff00ff)); x = (x & (0x0000ffff)) + ((x >> 16) & (0x0000ffff)); return x; }

128-bit hosszú bináris sztringek Manhattan távolsága unsigned int bitcount_128(unsigned int4 x) { const unsigned int4 a1(0x55555555, 0x55555555, 0x55555555, 0x55555555); const unsigned int4 a2(0x33333333, 0x33333333, 0x33333333, 0x33333333); const unsigned int4 a3(0x0f0f0f0f, 0x0f0f0f0f, 0x0f0f0f0f, 0x0f0f0f0f); const unsigned int4 a4(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff); const unsigned int4 a5(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff); } x = (x & (a1)) + ((x >> 1) & (a1)); x = (x & (a2)) + ((x >> 2) & (a2)); x = (x & (a3)) + ((x >> 4) & (a3)); x = (x & (a4)) + ((x >> 8) & (a4)); x = (x & (a5)) + ((x >> 16) & (a5)); return x.x + x.y + x.z + x.w;

Sok 128 hosszú bit-sztringre: K-NearestNeighbours 1 maggal, naiv megoldással: Lassú 1 maggal + SIMD: Párhuzamos: sokszoros gyorsulás 8 maggal CPU-n: még gyorsabb.. GPU-val (soksok mag): > NAGYON gyors!

Csak GPU-k GPGPU Stream programozás Compute Shader CUDA stb. (hardverközelibb) HETEROGENEOUS COMPUTING Több mint 1 fajta processzor (CPU, GPU,...) OpenCL szabvány Nyílt

Adat- és feladat párhuzamos modell Az OpenCL nyílt szabvány A Khronos Group felügyeli Az OpenCL-C nyelv ISO C99 szabvány részhalmaza Numerikus műveletek az IEEE754 alapján Heterogén platform támogatás A modell alkalmazható a modern GPU-kra, CPU-kra, Cell processzorra, DSP-kre, Intel Xenon Phi, Altera FPGA stb...

Mezei felhasználó számára is elérhető!!! (CPU / GPU) AMD (OpenCL >v2.0) ARM (OpenCL >v2.0) Intel (OpenCL >v2.0) NVIDIA (OpenCL v1.2) (Androidon is) Mi csak OpenCL v1.2-el foglalkozunk.

Mi csak OpenCL v1.2-el foglalkozunk.

Az OpenCL elemei Platform modell A Host és az eszköz kapcsolata Program modell Data-parallel és Task-parallel lehetőségek Végrehajtási séma Memória modell

Az OpenCL elemei Platform modell A Host és az eszköz kapcsolata Program modell Data-parallel és Task-parallel lehetőségek Végrehajtási séma Memória modell

Hoszt eszköz (Host) OpenCL eszköz (Compute Device, Device ) Számolási egység (Compute Unit, CU ) Pl.: NVidia kártyák multiprocesszora Feldolgozó egység (Processing Element, PE ) Pl.: Videokártya Stream processzora Pl.: CPU magja

Az OpenCL elemei Platform modell A Host és az eszköz kapcsolata Program modell Data-parallel és Task-parallel lehetőségek Végrehajtási séma Memória modell

Data-parallel és Task-parallel lehetőségek Data-parallel (Adat párhuzamos) modell Adat-feladat egység összerendelés Műveletsor végrehajtása több adatra A végrehajtás automatikus elosztása Task-parallel (Feladat párhuzamos) modell Több független feladat párhuzamos végrehajtása

Az OpenCL elemei Platform modell A Host és az eszköz kapcsolata Program modell Data-parallel és Task-parallel lehetőségek Végrehajtási séma Memória modell

Host feladata Kontextus kezelés Végrehajtás vezérlés Kernel program Számító Egységek vezérlése Egy munkacsoporton belül azonos feladat elvégzésére

Kernel program Feladat egységek (Work-Items) Globális azonosító (global ID) Minden munkacsoportban azonos program Egységenként eltérhet a vezérlés Munkacsoportok (Work-Groups) Index tér (NDRange)

Kernel program Feladat egységek (Work-Items) Munkacsoportok (Work-Groups) Munkacsoport azonosító (work-group ID) A feladat egységeknek lokális azonosító (local ID) Index tér (NDRange)

Kernel program Munkacsoportok (Work-Groups) Feladat egységek (Work-Items) Index tér (NDRange) N dimenziós problématér N = 1, 2, 3 Adott méretek N dimenzióban: Globális címtér Munkacsoport méret Azonosítók / indexelés N dimenzióban : Global ID [pl.: get_global_id(1)] Local ID [pl.: get_local_id(0)]

Kontextus (Context) Eszközök (Device) Kernelek (OpenCL függvények) Program objektumok (Program) Forrás Végrehajtható bináris Memória objektumok A Host és az Eszközök által használt memória A Kernelek ezt látják

Parancs sorok (command-queue) Host által ellenőrzött Kernelek végrehajtását vezérli Parancsok Kernel végrehajtás Memória műveletek (írás és olvasás) Szinkronizáció In-order / Out-of-order végrehajtási módok

Az OpenCL elemei Platform modell A Host és az eszköz kapcsolata Program modell Data-parallel és Task-parallel lehetőségek Végrehajtási séma Memória modell

Négy memória régió az Eszközön Globális Konstans Lokális Privát

Globális memória Írható / olvasható bármelyik Work-Itemből Bármely eleme elérhető bármely PE-ből A Host foglalja le (allokálja) a területet, végzi a másolást, és a memória felszabadítást.

Konstans memória A Globális memória csak olvasható megfelelője Kernelben statikusan is definiálható Néhány hardware külön erre a célra fenntartott, hatékony memóriaterülettel rendelkezik.

Lokális memória A Host nem fér hozzá Egy WG osztott memóriája Minden WI olvashatja/írhatja Privát memória A Host nem fér hozzá Csak az adott WI látja

A konzisztenciáról (Hol zavarnak be egymásnak a memória műveletek?) Work-Item szinten WI-ek között nem konzisztens, De egy WI-en belül konzisztens. Work-Group szinten Konzisztens Lokális és Globális memória egy WG-on belül Nem konzisztens a Globlális memória a WG-ok között

WorkGroup szinkronizáció WI-ek szinkronizációja Barrier Blokkoló hívás WG-ok között nincs szinkronizáció!!!! CommandQueue szinkronizáció Parancssori Barrier garantált a barrier előtti parancsok lefutása CQ-k között nincs szinkronizáció Várakozás Eseményre minden parancs generál egy eseményt, erre várakoztathatunk egy másikat

Az OpenCL C nyelv

C99 nyelv módosítva Skalár típusok Vektor típusok (n {2,4,8,16}) (u)charn (u)shortn (u)intn (u)longn floatn Vektor komponensek elérése (float4 f;) Swizzle (f.xyzw, f.x, f.xy, f.xxyy, stb.) Numerikus indexek Felezés (f.odd, f.even, f.lo, f.hi)

Implicit konverzió Korlátozott mértékben használható; skalártípusok között Explicit konverzió (Példák) float4 f = (float4)1.0; uchar4 u; int4 c = convert_int4(u); float f = 1.0f; uint u = as_uint(f); // 0x3f800000 lesz az értéke

Memóriaterület-jelölők global, local, constant, private Például: global float4 color; Függvény-jelölők kernel Egy OpenCL C függvényt Kernelnek jelöl ki. attribute Fordító segítő attribútumok.

Beépített függvények a végrehajtási modellre vonatkozóan get_work_dim() size_t get_{global/local}_{id/size}(uint dimidx); Pl.: size_t id = get_global_id(1); size_t get_num_groups(uint dimidx); size_t get_group_id(uint dimidx);

Szinkronizációs függvények barrier(flag); CLK_LOCAL_MEM_FENCE : lokális memóriát konzisztensé teszi CLK_GLOBAL_MEM_FENCE : globális memóriát konzisztensé teszi mem_fence(flag); write_mem_fence(flag); read_mem_fence(flag);

További beépített függvények Általános, szokásos függvények Geometriai függvények Összehasonlító függvények floatn típusokon (isequal, isinfinite, stb) Memóriára vonatkozóan: Aszinkron memória olvasás Prefetch (cache-be töltés globális memóriából)

VexCL C++ template könyvtár vektor-kifejezések írására és futtatására OpenCL/CUDA-n https://github.com/ddemidov/vexcl SharpCL C# bytecoderól OpenCL-re fordít és futtat Érdeklődni az előadónál. HadoopCL http://pubs.cs.rice.edu/node/336 MapReduce Heterogén rendszereken, Hadoop és OpenCL integrációval Apple OS X Snow Leopard http://en.wikipedia.org/wiki/mac_os_x_snow_leopard#opencl

Esettanulmányok: Programozási minták (Elmélettel) Map (Gather) (Scatter) Stencil Reduce Scan

Leképezés Többváltozós függvény alkalmazása. Általában a többi tervezési mintával együtt használják. Így új tervminták jöhetnek létre. Az implementációról Helyben is végezhető (a bemeneten).

P P

P

Gather: A P feladat több helyről tetszése szerint gyűjt adatokat, melyből egy elemet hoz létre a kimeneten. P

P

Scatter: A P folyamat tetszése szerint több kimeneti elemet érint. P Például: A scatter során a P folyamat egy elem (módosított) értékét több másikhoz adja.

~ Sablon Adott N hosszú input és N hosszú output. Az éppen feldolgozott elem valamilyen környezete alapján számolunk outputot. 1D, 2D, 3D,. Alkalmazás Pl.: Futószűrő (helyben végzett) Pl.: Elmosás (nem helyben végzett) Doboz szűrő, Gauss szűrő, Technikák Konvolúciók, Medián, Véges differenciák, Bilaterális szűrés, stb Implementáció Konvolúcióknál: Szeparábilis? => gyorsítás

Fontos szempont: A stencil egy fix minta alapján gyűjti az adatokat. A stencil minden kimenetre ír. Naiv megvalósításának problémája: Adat-újrafelhasználás. Kérdés: Mi a megoldás pl. átlagszűrő esetén? Táblás feladat: Kérdés: Hányszor fogunk olvasni egy-egy input adatelemet az adott minta alapján?

Kérdés: Milyen tervezési minta alapján működhet a következő Összegzés? Feltételes értékadás? Rendezés?

Map: Index tér (Bemenet, Kimenet) One-to-One Gather: Index tér Kimenet Many-to-One Scatter: Index tér Bemenet One-to-Many Stencil: Index tér (Bemenet*, Kimenet) Several-to-One

~ Tömörítés Adott művelet: Asszociatív. Kommutatív? Adott bemenet, ahol értelmezett a művelet. A bemenetet a művelet segítségével redukáljuk egyetlen egységgé: Pl.: Számsorozat összege (művelet: összadás) Pl.: Maximumkiválasztás

Alkalmazások Összegzés, Maximum-kiválasztás Csak-asszociatív esetben: Scan tervezési minta egy lépése! ( Up-Sweep ) MapReduce http://research.google.com/archive/mapreduce.html Nagy klasztereken nagyon klassz!

Implementáció Végezhető helyben, vagy váltogatott bemenetkimenet tömbökön. Szinkronizáció szükséges a hatékony megvalósításhoz. Ha a műveletre teljesül: Asszociativitás: Alapeset. Kommutativitás: Bizonyos hardvereken előnyös lehet, ha a kommutativitást kihasználva egymás mellé rakjuk a lépésenként redukált sorozatokat. Nem maradnak közök az elemek között. SIMD

Lépés 1 Lépés 2 Lépés 3 Lépés 4 Értékek: get_id Értékek: get_id Értékek: get_id Értékek: get_id Értékek: 0 1 2 3 4 5 6 7 0 1 2 3 0 1 0

Értékek: Lépés 1 Lépés 2 Lépés 3 Lépés 4 get_id Értékek: get_id Értékek: get_id Értékek: get_id Értékek: 0 1 2 3 4 5 6 7 0 1 2 3 0 1 0

Asszociatív művelet eredménye Adott művelet: Asszociatív. (fogalom: ORSI-tantárgy) A művelet ismételt alkalmazásánál a részeredményeket is kiszámítjuk. Összehasonlítva: A Reduce leginkább csak a végeredménnyel törődik.

Alkalmazások A Radix rendezés egyik lépése. Változó szélességű képszűrés. Adatfolyam feldolgozás. Irodalom: Blelloch, Guy E. 1990. "Prefix Sums and Their Applications." Technical Report CMU-CS-90-190, School of Computer Science, Carnegie Mellon University. http://people.inf.elte.hu/hz/parh/parhprg.html

Implementáció Naiv megvalósítás: Nem munka -hatékony: O(n log 2 n) Hatékony megvalósítás: Kiegyensúlyozott fák mintájára (balanced trees) PP-ben hasznos algoritmikus minta!!! Bináris fa. A bemenet hosszával azonos nagyságrendű hatékonyság: O(n). A bináris fát nem tároljuk le, csak az elvet használjuk! Két lépésben: Up-Sweep fázis (Reduce minta) Down-Sweep fázis Irodalom: Belloch (1990)

Lépés 1 Értékek: get_id Értékek: 0 1 2 3 4 5 6 Lépés 2 get_id Értékek: 0 1 2 3 4 5 Lépés 3 get_id Értékek: 0 1 2 3

Az algoritmus két lépésben működik: Up-Sweep Down-Sweep Up-Sweep Egy csak-asszociatív Reduce. Down-Sweep 1. Az utolsó elem kinullázása. 2. A redukciós lépések végrehajtása fordított sorrendben: Nagy lépésektől a kisebbekig. Egy lépésre: 1. Eredmény := művelet(bal oldali elem, Jobb oldali elem) (Redukció) 2. Bal oldali elem := Jobb oldali elem. (Ez egy új lépés) 3. Jobb oldali elem := Eredmény. (Redukció befejezése) Más néven: Blelloch Scan

Köszönöm a figyelmet!