Bevezetés a GPU-számítástechnika, én meg-jegyzetek
Ebben a cikkben szereplő információk, amelyek segítenek megérteni az általános elveket a GPU-programozás.
Bevezetés a GPU architektúra
Válasszuk szét a két eszköz - ami szabályozza az általános logika - host. és gyorsan képes végrehajtani egy sor utasítást a nagy mennyiségű adat - eszköz.
GPU programozás
Programok vannak írva a C nyelv a bővítmények NVidia / OpenCL és összeállított segítségével speciális fordító tartalmazza az SDK. Minden gyártó az egésznek. Két változata van, a szerelvény - a célplatformon - világosan jelzi, hogy milyen hardver lesz teljesíteni néhány kódot vagy köztes kódot, hogy amikor fut a cél hardver illesztőprogram átalakul egy sor konkrét utasításokat az architektúrának (korrigált számítástechnikai hardver képességek).
Végzett a GPU-nek nevezett program kernel - kernel -, hogy a CUDA az OpenCL, hogy ez lesz az egyik utasítások, hogy alkalmazza az összes adatot. Funkció egyedül, és az adatokat, amelyek alapján úgy hajtjuk végre - más - a SIMD elvét.CUDA / OpenCL járművezető osztja bemeneti adatokat egy több részből (végrehajtási szál kombinált tömb), és hozzárendeli elvégzésére minden egyes adatfolyam processzor. A programozó adja meg a vezető és az kell, hogy a leghatékonyabb a meglévő számítógépes erőforrások megadásával blokk méret és a szálak számát bennük. Természetesen a legnagyobb megengedett értékek változhatnak az eszköztől. Jó gyakorlat - a végrehajtás előtt kérelmet vas paraméterek, amelyen futtatni a mag és az annak alapján kiszámítja az optimális méret.
Vázlatosan a feladatok megosztása a GPU a következő:
A program végrehajtása a GPU
munka-elem (OpenCL) vagy cérna (CUDA) - és alapvető adatállományt végezzük Stream Processor (Processing Element esetében ATI eszközök).
munkacsoport (OpenCL) vagy menetes blokk (CUDA) hajtunk végre a Multi Processor (SIMD Engine)
Rács (tömbök ilyen koncepció csak Nvidia) = végre az egész készülék - GPU. Végrehajtásra vonatkozó GPU minden áramlás egyesítjük lánc- (Warp - CUDA), vagy veyffronty (hullámfront - OpenCL) - menet medence elvégzéséhez rendelt egyetlen többprocesszoros. Azaz, ha az egységek számát vagy munkacsoportok magasabb volt, mint ahány multiprotsessorov - sőt, az adott pillanatban fut egy csoport (vagy csoportok), az egyesített Warp - az összes többi várakoznak.
Egy mag lehet végezni több GPU eszközök (CUDA és OpenCL, mind ATI-kártya és az NVIDIA).
Egy GPU-eszköz tartalmát egyszerre több sejtmag (CUDA és OpenCL, NVIDIA - kiindulva 20 és a fenti architektúra). Linkek ezekben a kérdésekben, lásd. A végén.
OpenCL memória modell (a zárójelben - CUDA terminológia)
A legfontosabb dolog, hogy emlékezzen az időt a mindkét típusú memória. A leglassabb a globális memória - a grafikus kártya ma egészen 6 GB. Továbbá, a sebesség egy osztott memória (shared - CUDA, a helyi - OpenCL) - közös az összes szálat a blokk (menet blokk - CUDA, a munka-csoport - OpenCL) - de ez nem elég - 32-48 KB többprocesszoros. A leggyorsabb a helyi memória használata miatt a regiszterek és cache, de meg kell értenünk, hogy minden, ami nem illik a cache \ nyilvántartások - tárolásra kerül a globális memória, annak minden következményével együtt.
Minták párhuzamos programozás a GPU
Térkép - GPU párhuzamos minta
Ez egyszerű -, hogy a beviteli adathalmaz és alkalmazni minden eleme egy nyilatkozatot - az atommag - nem érinti a többi elem - azaz, Mi olvasni és írni adott memóriahelyek.
Az arány - 1-1 (egy-egy).
Példa - mátrix szorzás művelet eggyel növeli vagy csökkenti alkalmazni minden egyes eleme a mátrix, stb
Scatter - GPU párhuzamos mintát
Minden egyes eleme a bemeneti tömb, kiszámíthatjuk a pozícióban a kilépő tömb, amelyben ez hatással lesz (alkalmazásával a megfelelő operátor).
Attitude - egy a többhöz (one-to-many).
3. Transzponálás
Átültetése - GPU párhuzamos mintát
Ez a minta lehet tekinteni, mint egy speciális esete a minta szórás.
Használt optimalizálhatják számítástechnikai - oszlatja el a terméket a memóriában, akkor érheti el jelentős teljesítmény javítására.
Gyűjtés - GPU párhuzamos mintát
Ez az inverze a minta Scatter - minden eleme a kimeneti tömb, kiszámítjuk az indexek az elemek a bemeneti tömb, amely hatással volt rá:
Attitude - néhány egy (sok-egy).
Stencil - GPU párhuzamos mintát
Ez a minta lehet tekinteni, mint egy speciális esete a minta gyűjteni. Itt kapjuk a kimeneti értékek az egyes cellákban a tömb kiszámítására használják egy bizonyos minta minden elemét az input tömb, ami hatással lesz a végső értéket. Mindenféle szűrők épülnek ezt az elvet.
Az arány több egy (több az egyhez)
Példa: Gauss szűrővel.
Csökkentése - GPU párhuzamos mintát
Van valaki (All-egy)
Példa - kiszámított maximális mennyiségben vagy tömb.
Kiszámításakor a kimeneti értékek az egyes cellákban a tömb kell vizsgálni az érték az egyes input elem. Két fő végrehajtási - Hillis és Steele és Blelloch.
out [i] = F [i] = operátor (F [i-1], az [I])
Az arány az összes, hogy az összes (all-to-összes).
Példák - válogatás az adatokat.
hasznos linkek
Bevezetés a CUDA: