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.

Bevezetés a GPU-számítástechnika, én meg-jegyzetek

GPU programozás

Bevezetés a GPU-számítástechnika, én meg-jegyzetek

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).

Bevezetés a GPU-számítástechnika, én meg-jegyzetek
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ő:

Bevezetés a GPU-számítástechnika, én meg-jegyzetek

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)

Bevezetés a GPU-számítástechnika, én meg-jegyzetek

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

Bevezetés a GPU-számítástechnika, én meg-jegyzetek

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

Bevezetés a GPU-számítástechnika, én meg-jegyzetek

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

Bevezetés a GPU-számítástechnika, én meg-jegyzetek

Á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.

Bevezetés a GPU-számítástechnika, én meg-jegyzetek

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).

Bevezetés a GPU-számítástechnika, én meg-jegyzetek

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.

Bevezetés a GPU-számítástechnika, én meg-jegyzetek

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: