Általános számítástechnika grafikus feldolgozó egységeken - General-purpose computing on graphics processing units

Az általános célú számítás a grafikus feldolgozó egységeken ( GPGPU vagy ritkábban GPGP ) egy grafikus feldolgozó egység (GPU) használata, amely jellemzően csak a számítógépes grafika számítását végzi, a számítás elvégzéséhez a központi feldolgozó egység által hagyományosan kezelt alkalmazásokban ( PROCESSZOR). Ha több videokártyát használnak egy számítógépen, vagy nagyszámú grafikus chipet, akkor tovább párhuzamba állítják a grafikus feldolgozás amúgy is párhuzamos jellegét.

Lényegében a GPGPU folyamat egyfajta párhuzamos feldolgozás egy vagy több GPU és CPU között, amely úgy elemzi az adatokat, mintha kép vagy más grafikus formában lennének. Míg a GPU -k alacsonyabb frekvenciákon működnek, jellemzően sokszoros magokkal rendelkeznek . Így a GPU -k sokkal több képet és grafikus adatot képesek feldolgozni másodpercenként, mint egy hagyományos CPU. Az adatok grafikus formába történő áttelepítése, majd a szkenneléshez és elemzéshez a GPU használata nagy gyorsítást eredményezhet .

A GPGPU csővezetékeket a 21. század elején fejlesztették ki grafikus feldolgozásra (pl. A jobb árnyékolók érdekében ). Ezekről a csővezetékekről úgy találták, hogy jól illeszkednek a tudományos számítástechnikai igényekhez, és azóta ebbe az irányba fejlesztették őket.

Történelem

Elvileg bármely tetszőleges logikai függvény , beleértve az összeadás, szorzás és más matematikai függvényeket, felépíthető egy funkcionálisan teljes logikai operátor készletből. 1987-ben a Conway's Game of Life az egyik első példa volt az általános célú számítástechnikára, amely egy korai adatfolyam-processzort használ, amelyet blitternek hívnak, hogy meghívja a logikai műveletek speciális sorát a bitvektorokon.

A GPU-k általános célú számítása körülbelül 2001 után vált praktikusabbá és népszerűbbé, a programozható árnyékolók és a grafikus processzorok lebegőpontos támogatásának megjelenésével. Nevezetesen, a mátrixokkal és/vagy vektorokkal-  különösen a két-, három- vagy négydimenziós vektorokkal-kapcsolatos problémákat könnyen le lehetett fordítani GPU-ra, amely natív sebességgel és támogatással működik ezeken a típusokon. A tudományos számítástechnikai közösség kísérletei az új hardverrel mátrixszaporítási rutinmal kezdődtek (2001); az egyik első közös tudományos program, amely gyorsabban fut a GPU -n, mint a CPU, az LU faktorizáció megvalósítása (2005).

Ezek a korai erőfeszítések a GPU-k általános célú processzorként való felhasználására a számítási problémák újraformálását igényelték a grafikus primitívek tekintetében, amint azt a két fő grafikus processzor API, az OpenGL és a DirectX is támogatja . Ezt a nehézkes fordítást kiküszöbölték az olyan általános célú programozási nyelvek és API-k megjelenése, mint az Sh / RapidMind , a Brook és az Accelerator.

Ezeket követte az Nvidia CUDA - ja , amely lehetővé tette a programozók számára, hogy figyelmen kívül hagyják a mögöttes grafikus fogalmakat a gyakoribb, nagy teljesítményű számítási koncepciók javára . Az újabb, hardvergyártó-független ajánlatok közé tartozik a Microsoft DirectCompute és az Apple/Khronos Group OpenCL . Ez azt jelenti, hogy a modern GPGPU csővezetékek kihasználhatják a GPU sebességét anélkül, hogy az adatokat teljes mértékben és kifejezetten grafikus formába kellene konvertálni.

Megvalósítások

Bármely nyelv, amely lehetővé teszi, hogy a CPU -n futó kód lekérdezze a GPU -árnyékolót a visszatérési értékekhez, létrehozhat egy GPGPU keretrendszert.

2016-tól az OpenCL a domináns nyílt általános célú GPU számítási nyelv, és a Khronos Group által meghatározott nyílt szabvány . Az OpenCL többplatformos GPGPU platformot biztosít, amely emellett támogatja a processzorokon végzett párhuzamos adatszámítást. Az OpenCL -t aktívan támogatják az Intel, AMD, Nvidia és ARM platformok. A Khronos Csoport szabványosította és bevezette a SYCL-t is , amely az OpenCL magasabb szintű programozási modellje, mint egyetlen forrású tartomány-specifikus beágyazott nyelv, tiszta C ++ 11-en alapul.

A domináns saját keretrendszer az Nvidia CUDA . Az Nvidia 2006 -ban indította el a CUDA -t , egy szoftverfejlesztő készletet (SDK) és alkalmazásprogramozási felületet (API), amely lehetővé teszi a C programozási nyelv használatát az algoritmusok kódolásához a GeForce 8 sorozatú és későbbi GPU -k végrehajtásához.

A párhuzamos számítástechnikai programozási szabványok közé tartozik az OpenCL (gyártótól független), az OpenACC és az OpenHMPP . Mark Harris , a GPGPU.org alapítója megalkotta a GPGPU kifejezést .

Az Xcelerit SDK által létrehozottXcelerit, célja, hogy felgyorsítsa a nagy meglévőC ++vagyC #kód-bázisokGPUminimális erőfeszítéssel. Egyszerűsített programozási modellt biztosít, automatizálja a párhuzamosságot, kezeli az eszközöket és a memóriát, és lefordítja aCUDAbináris fájljait. Ezenkívül a többmagosCPU-katés más gyorsítókat ugyanabból a forráskódból lehet megcélozni.

OpenVIDIA fejlesztettek ki University of Toronto 2003-2005 között, együttműködve Nvidia .

Altimesh Hybridizer készítetteAltimeshösszeállítjaCommon Intermediate Language, hogyCUDAbináris. Támogatja az általános és a virtuális funkciókat. A hibakeresés és a profilozás integrálva van aVisual Studioés azNsight programmal. Visual Studio bővítményként érhető el aVisual Studio Marketplace -en.

A Microsoft bemutatta a DirectCompute GPU számítási API -t , amelyet a DirectX 11 API -val együtt adtak ki .

A QuantAlea által létrehozott Alea GPU bevezeti a natív GPU -számítási képességeket aMicrosoft.NET nyelvűF#ésC#nyelvhez. Az Alea GPU egyszerűsített GPU programozási modellt is kínál, amely a GPU párhuzamos és párhuzamos összesítésén alapul, delegált személyek és automatikus memóriakezelés segítségével.

A MATLAB támogatja a GPGPU gyorsítást a Parallel Computing Toolbox és a MATLAB Distributed Computing Server segítségével , valamint a harmadik féltől származó csomagokat, mint például a Jacket .

A GPGPU feldolgozást a fizika motorjai a newtoni fizika szimulálására is használják , és a kereskedelmi megvalósítások közé tartozik a Havok Physics, az FX és a PhysX , amelyeket általában számítógépes és videojátékokhoz használnak .

Közel Metal , most hívott patak , az AMD „s GPGPU technológia ATI Radeon GPU-alapú.

A C ++ Accelerated Massive Parallelism ( C ++ AMP ) egy könyvtár, amely felgyorsítja a C ++ kód végrehajtását azáltal, hogy kihasználja az adat-párhuzamos hardvert a GPU-n.

Mobil számítógépek

A mobil GPU-k növekvő teljesítményének köszönhetően az általános célú programozás elérhetővé vált a nagy mobil operációs rendszereket futtató mobil eszközökön is .

A Google Android 4.2 lehetővé tette a RenderScript kód futtatását a mobil eszköz GPU -ján . Az Apple bemutatta a szabadalmaztatott Metal API -t iOS alkalmazásokhoz, amely tetszőleges kódot tud végrehajtani az Apple GPU számítási árnyékolóin keresztül.

Hardver támogatás

Számítógépes videokártyákat különféle gyártók gyártanak, például az Nvidia , az AMD és az ATI . Az ilyen szállítók kártyái eltérnek az adatformátum-támogatás megvalósításában, például egész és lebegőpontos formátumokban (32 és 64 bites). A Microsoft bevezette a Shader Model szabványt, hogy segítsen rangsorolni a grafikus kártyák különböző szolgáltatásait egy egyszerű Shader Model verziószámban (1.0, 2.0, 3.0, stb.).

Egész számok

A DirectX 9 előtti videokártyák csak palettázott vagy egész színtípusokat támogattak . Különféle formátumok állnak rendelkezésre, amelyek mindegyike tartalmaz egy piros, egy zöld és egy kék elemet. Néha egy másik alfa -érték kerül hozzáadásra az átláthatóság érdekében. Gyakori formátumok:

  • 8 bit / pixel - Néha paletta mód, ahol minden érték egy index egy táblázatban, amelynek valós színértéke más formátumban van megadva. Néha három bit a piros, három bit a zöld és két bit a kék.
  • 16 bit / pixel - Általában a biteket öt bitként osztják ki a piroshoz, hat bitet a zöldhez és öt bitet a kékhez.
  • 24 bit / pixel - Nyolc bit van piros, zöld és kék színben.
  • 32 bit / pixel - Nyolc bit van piros, zöld, kék és alfa színben .

Lebegőpontos számok

A korai rögzített funkciójú vagy korlátozottan programozható grafikák esetében (pl. A DirectX 8.1-kompatibilis GPU-kig) ez elegendő volt, mert ez a megjelenítésekben is használt ábrázolás. Fontos megjegyezni, hogy ennek az ábrázolásnak vannak bizonyos korlátai. Az elegendő grafikus feldolgozási teljesítmény miatt még a grafikus programozók is jobb formátumokat, például lebegőpontos adatformátumokat szeretnének használni olyan effektusok eléréséhez, mint a nagy dinamikatartományú képalkotás . Sok GPGPU -alkalmazás lebegőpontos pontosságot igényel, amelyet a DirectX 9 specifikációnak megfelelő videokártyákhoz mellékeltek.

A DirectX 9 Shader Model 2.x két precíziós típus támogatását javasolta: teljes és részleges pontosság. A teljes pontosságú támogatás lehet FP32 vagy FP24 (lebegőpontos 32 vagy 24 bites komponensenként) vagy nagyobb, míg a részleges pontosság FP16. ATI Radeon R300 sorozat GPU támogatott FP24 pontossággal csak a programozható fragmens csővezeték (bár FP32 támogatta a vertex processzorok), míg az Nvidia „s NV30 támogatott sorozat mind FP16 és FP32; más gyártók, például az S3 Graphics és az XGI , az FP24 -ig terjedő formátumok keverékét támogatják.

A lebegőpontos megvalósítások az Nvidia GPU -n többnyire IEEE -kompatibilisek; ez azonban nem minden gyártó esetében igaz. Ez kihatással van a helyességre, amelyeket néhány tudományos alkalmazás szempontjából fontosnak tartanak. Míg a 64 bites lebegőpontos értékek (kettős pontosságú lebegés) általában rendelkezésre állnak a CPU-knál, ezeket a GPU-k nem támogatják általánosan. Egyes GPU-architektúrák feláldozzák az IEEE-megfelelőséget, míg mások hiányoznak a kettős pontosságból. Törekedtek arra, hogy a GPU-k kettős pontosságú lebegőpontos értékeit emulálják; a gyors kompromisszum azonban minden előnyét kizárja annak, hogy a számítástechnika a GPU -ra kerül.

Vektorizáció

A GPU legtöbb művelete vektorizált módon működik: egy művelet egyszerre legfeljebb négy értéken hajtható végre. Például, ha az egyik színt <R1, G1, B1> egy másik <R2, G2, B2> színnel kell módosítani, akkor a GPU az <R1*R2, G1*G2, B1*B2> színt egyben előállíthatja művelet. Ez a funkció hasznos a grafikában, mivel szinte minden alapvető adattípus vektor (2-, 3- vagy 4-dimenziós). Ilyen például a csúcsok, színek, normálvektorok és textúrakoordináták. Ezt sok más alkalmazás is jól ki tudja használni, és nagyobb teljesítményük miatt a vektoros utasítások, amelyeket egyetlen utasításnak, több adatnak ( SIMD ) neveznek , már régóta elérhetők a CPU -n.

GPU vs CPU

Eredetileg az adatokat egyszerűen egyirányúan továbbították a központi processzorról (CPU) a grafikus feldolgozó egységre (GPU), majd a kijelző eszközre . Az idő előrehaladtával azonban értékes lett a GPU-k számára, hogy először egyszerű, majd összetett adatstruktúrákat tároljanak, amelyeket vissza kell juttatni a képet feldolgozó CPU-hoz, vagy 2D vagy 3D formátumú tudományos adatok halmazához. a videokártya megérti. Mivel a GPU minden rajzolási művelethez hozzáfér, gyorsan képes elemezni az adatokat ezekben a formákban, míg a CPU-nak minden képpontot vagy adatelemet sokkal lassabban kell lekérdeznie, mint a CPU és a nagyobb véletlen hozzáférésű memória közötti hozzáférési sebességet (vagy még rosszabb esetben a merevlemez ) lassabb, mint a GPU -k és a videokártyák, amelyek jellemzően kisebb mennyiségű drágább memóriát tartalmaznak, amely sokkal gyorsabban elérhető. Az aktívan elemzendő adatkészlet textúrák vagy más könnyen olvasható GPU -formátumok formájában történő átvitele az adott GPU -memóriába sebességnövekedést eredményez. A GPGPU kialakításának megkülönböztető jellemzője az a képesség, hogy az adatokat kétirányúan vissza lehet vinni a GPU -ból a CPU -ba; általában az adatátvitel mindkét irányban ideálisan magas, ami multiplikátorhatást eredményez egy adott nagy igénybevételű algoritmus sebességére . A GPGPU csővezetékek javíthatják a hatékonyságot különösen nagy adatkészletek és/vagy 2D vagy 3D képeket tartalmazó adatok esetén. Bonyolult grafikus csővezetékekben, valamint tudományos számítástechnikában használják ; még inkább azokon a területeken, amelyek nagy adathalmazokkal rendelkeznek, mint például a genomtérkép , vagy ahol a két- vagy háromdimenziós elemzés hasznos- különösen a biomolekulák elemzése, a fehérjetanulmány és más összetett szerves kémia . Az ilyen csővezetékek többek között jelentősen javíthatják a képfeldolgozás és a számítógépes látás hatékonyságát ; valamint általában a párhuzamos feldolgozás . Néhány nagyon erősen optimalizált csővezeték több százszorosára növelte a sebességet, mint az eredeti CPU-alapú csővezeték egy nagy igénybevételű feladat során.

Egyszerű példa lehet egy GPU -program, amely adatokat gyűjt az átlagos megvilágítási értékekről, miközben nézetet jelenít meg akár a fényképezőgépről, akár a számítógépes grafikus programból a CPU fő programjához, hogy a CPU ezután módosítsa a teljes képernyőt Kilátás. Egy fejlettebb példa használhatja az élérzékelést, hogy a számszerű információkat és a körvonalakat ábrázoló feldolgozott képet visszaküldje egy számítógépes látásprogramnak , amely mondjuk egy mobil robotot irányít. Mivel a GPU gyors és helyi hardveres hozzáféréssel rendelkezik a kép minden képpontjához vagy más képi eleméhez, elemezheti és átlagolhatja (az első példában), vagy alkalmazhat egy Sobel élszűrőt vagy más konvolúciós szűrőt (a másodikhoz) sokkal nagyobb sebességet, mint egy CPU, amelynek általában hozzá kell férnie a kérdéses grafika lassabb véletlen hozzáférésű memória másolataihoz.

A GPGPU alapvetően szoftverkoncepció, nem hardverkoncepció; ez egyfajta algoritmus , nem berendezés. A speciális berendezéstervek azonban még tovább növelhetik a GPGPU csővezetékek hatékonyságát, amelyek hagyományosan viszonylag kevés algoritmust hajtanak végre nagyon nagy adatmennyiségeken. A tömegesen párhuzamosított, gigantikus adatszintű feladatok így még párhuzamba állíthatók speciális beállításokkal, például rack számítástechnikával (sok hasonló, nagymértékben testreszabott gép , amely egy rackbe van beépítve ), amely hozzáad egy harmadik réteget-sok számítási egység, amelyek mindegyike sok CPU-t használ sok GPU -hoz. Néhány Bitcoin "bányász" ilyen beállításokat használt nagy mennyiségű feldolgozásra.

Gyorsítótárak

Korábban a CPU-k hardver által kezelt gyorsítótárakat használtak , de a korábbi GPU-k csak szoftver által kezelt helyi memóriákat biztosítottak. Mivel azonban a GPU-kat egyre gyakrabban használják általános célú alkalmazásokhoz, a legmodernebb GPU-kat hardveresen kezelt többszintű gyorsítótárakkal tervezik, amelyek segítettek a GPU-knak a mainstream számítástechnika felé való elmozdulásban. Például a GeForce 200 sorozatú GT200 architektúrájú GPU-k nem tartalmaztak L2 gyorsítótárat, a Fermi GPU 768 KiB utolsó szintű gyorsítótárat, a Kepler GPU 1,5 MiB utolsó szintű gyorsítótárat, a Maxwell GPU 2 MiB utolsó szintű gyorsítótárat és a Pascal GPU 4 MiB gyorsítótárral rendelkezik.

Regisztrációs fájl

A GPU-k nagyon nagy regiszterfájlokkal rendelkeznek , amelyek lehetővé teszik számukra a kontextusváltási késleltetés csökkentését. A regiszterfájlok mérete is növekszik a különböző GPU -generációk során, például a Maxwell (GM200), a Pascal és a Volta GPU teljes regiszterfájl -mérete 6 MiB, 14 MiB és 20 MiB. Összehasonlításképpen: a CPU -k regiszterfájlja kicsi, jellemzően több tíz vagy több száz kilobájt.

Energiahatékonyság

A GPU -k nagy teljesítménye nagy energiafogyasztás árán történik, amely teljes terhelés mellett valójában annyi energia, mint a PC -rendszer többi része együttvéve. A Pascal sorozatú GPU (Tesla P100) maximális energiafogyasztása 250 W volt.

Adatfolyam feldolgozás

A GPU -kat kifejezetten grafikai célokra tervezték, így nagyon korlátozóak a műveletek és a programozás terén. A GPU -k felépítésükből adódóan csak a stream feldolgozással megoldható problémákra hatékonyak, a hardver pedig csak bizonyos módon használható.

A következő, csúcsokra, töredékekre és textúrákra vonatkozó vita elsősorban a GPGPU programozás régi modelljére vonatkozik, ahol grafikus API-kat ( OpenGL vagy DirectX ) használtak az általános célú számítások elvégzésére. A CUDA (Nvidia, 2007) és az OpenCL (gyártófüggetlen, 2008) általános célú számítási API-k bevezetésével az új GPGPU kódokban már nem szükséges grafikus primitívekhez rendelni a számítást. A GPU -k adatfolyam feldolgozási jellege a használt API -któl függetlenül érvényes marad. (Lásd pl.)

A GPU -k csak független csúcsokat és töredékeket képesek feldolgozni, de sokukat párhuzamosan. Ez különösen akkor hatékony, ha a programozó sok csúcsot vagy töredéket szeretne azonos módon feldolgozni. Ebben az értelemben a GPU -k stream -processzorok - olyan processzorok, amelyek párhuzamosan működhetnek úgy, hogy egy kernelt futtatnak egyszerre egy adatfolyam sok rekordján.

A folyam egyszerűen olyan rekordok halmaza, amelyek hasonló számítást igényelnek. A folyamok párhuzamosságot biztosítanak az adatokkal. A rendszermagok azok a függvények, amelyeket a folyam minden elemére alkalmaznak. A GPU -kban a csúcsok és töredékek a folyamok elemei , a csúcs- és töredékárnyékolók pedig a rajtuk futtatandó magok. Minden elem esetében csak olvashatunk a bemenetből, műveleteket hajthatunk végre rajta és írhatunk a kimenetre. Megengedett több bemenet és több kimenet, de soha nem olvasható és írható memóriadarab.

Az aritmetikai intenzitás az átvitt memória szavánként végrehajtott műveletek száma. Fontos, hogy a GPGPU alkalmazások magas aritmetikai intenzitással rendelkezzenek, különben a memóriahozzáférési késleltetés korlátozza a számítási gyorsítást.

Az ideális GPGPU -alkalmazások nagy adathalmazokkal, nagy párhuzamossággal és minimális függőséggel rendelkeznek az adatelemek között.

GPU programozási koncepciók

Számítási erőforrások

A GPU -n számos számítási erőforrás áll rendelkezésre:

  • Programozható processzorok - a csúcs, primitív, töredékes és főleg számítási folyamatok lehetővé teszik a programozó számára, hogy kernelt végezzen adatfolyamokon
  • Raszterizátor-töredékeket hoz létre és interpolál csúcsonkénti állandókat, például textúrakoordinátákat és színt
  • Textúra egység-csak olvasható memória interfész
  • Framebuffer-csak írható memória interfész

Valójában egy program helyettesítheti a csak írható textúrát a kimenetre a framebuffer helyett. Ezt vagy a Render to Texture (RTT), a Render-To-Backbuffer-Copy-to-Texture (RTBCTT) vagy a legújabb stream-out segítségével lehet megtenni.

A textúrák patakként

A GPGPU befogadásának leggyakoribb formája a 2D rács, mivel ez természetesen illeszkedik a GPU -kba épített megjelenítési modellhez. Sok számítás természetesen rácsokká válik: mátrixalgebra, képfeldolgozás, fizikailag alapuló szimuláció stb.

Mivel a textúrákat memóriaként használják, a textúra -kereséseket memóriaolvasásként használják. Emiatt bizonyos műveleteket a GPU automatikusan elvégezhet.

Kernels

A számítási magokat úgy tekinthetjük, mint a hurkok testét . Például egy CPU -n lévő rácson működő programozó kódja így nézhet ki:

// Input and output grids have 10000 x 10000 or 100 million elements.

void transform_10k_by_10k_grid(float in[10000][10000], float out[10000][10000])
{
    for (int x = 0; x < 10000; x++) {
        for (int y = 0; y < 10000; y++) {
            // The next line is executed 100 million times
            out[x][y] = do_some_hard_work(in[x][y]);
        }
    }
}

A GPU -n a programozó csak a ciklus törzsét adja meg kernelként, és azt, hogy milyen adatokat kell hurkolni a geometriafeldolgozás meghívásával.

Áramlásszabályozás

A szekvenciális kódban lehetőség van a program folyamatának szabályozására if-then-else utasításokkal és különböző ciklusformákkal. Ilyen áramlásszabályozó struktúrákat csak nemrégiben adtak hozzá a GPU -khoz. Feltételes írásokat a számítás/bit műveletek megfelelően kialakított sorozatával lehetett végrehajtani, de a hurok és a feltételes elágazás nem volt lehetséges.

A legújabb GPU -k lehetővé teszik az elágazást, de általában teljesítménybüntetéssel. Általában kerülni kell az elágazást a belső körökben, legyen szó CPU vagy GPU kódról, és különféle módszerek, például a statikus elágazás felbontása, előszámítás, előrejelzés, hurok felosztása és Z-cull használható az elágazás elérésére, ha a hardveres támogatás nem létezik.

GPU módszerek

Térkép

A térképművelet egyszerűen az adott függvényt (a kernelt) alkalmazza a folyam minden elemére. Egy egyszerű példa az, hogy a folyam minden értékét megszorozzuk egy állandóval (növelve a kép fényerejét). A térképművelet egyszerűen megvalósítható a GPU -n. A programozó egy töredéket állít elő a képernyő minden egyes pixeléhez, és mindegyikre töredékprogramot alkalmaz. Az azonos méretű eredményfolyamot a kimeneti puffer tárolja.

Csökkentse

Egyes számításokhoz kisebb adatfolyamot (esetleg csak egy elemből álló adatfolyamot) kell kiszámítani egy nagyobb adatfolyamból. Ezt nevezik áramláscsökkentésnek. Általában a csökkentést több lépésben lehet végrehajtani. Az előző lépés eredményeit használjuk bemenetként az aktuális lépéshez, és a tartományt, amelyen a műveletet alkalmazzuk, addig csökkentjük, amíg csak egy folyam elem marad.

Adatfolyam szűrés

A folyamszűrés lényegében nem egyenletes csökkentés. A szűrés magában foglalja az elemek eltávolítását a folyamból bizonyos feltételek alapján.

Letapogatás

A szkennelési művelet, amelyet párhuzamos előtagösszegnek is neveznek , beveszi az adatelemek vektorát (folyamát) és egy (tetszőleges) asszociatív "+" bináris függvényt az "i" azonosító elemmel . Ha a bemenet [a0, a1, a2, a3, ...], akkor exkluzív szkennelés eredményezi a kimenetet [i, a0, a0 + a1, a0 + a1 + a2, ...], míg az inkluzív vizsgálat a kimenet [a0, a0 + a1, a0 + a1 + a2, a0 + a1 + a2 + a3, ...], és nem igényel identitást . Bár első ránézésre a művelet eredendően sorosnak tűnhet, hatékony párhuzamos szkennelési algoritmusok lehetségesek, és a grafikus feldolgozó egységeken is megvalósultak. A letapogatási művelet pl. Gyorsort és ritka mátrix-vektor szorzást használ.

Szétszór

A szórási műveletet a legtermészetesebben a csúcsprocesszor határozza meg. A csúcsprocesszor képes beállítani a csúcs helyzetét , ami lehetővé teszi a programozó számára, hogy ellenőrizze, hol helyezik el az információkat a rácson. Más kiterjesztések is lehetségesek, például annak szabályozása, hogy a csúcs mekkora területet érint.

A töredékfeldolgozó nem tud közvetlen szórási műveletet végrehajtani, mivel az egyes töredékek helye a rácson rögzítve van a töredék létrehozásakor, és a programozó nem tudja megváltoztatni. Azonban egy logikai szórási művelet néha átdolgozható, vagy más gyűjtési lépéssel hajtható végre. A szórási megvalósítás először egy kimeneti értéket és egy kimeneti címet bocsát ki. A közvetlenül követő gyűjtési művelet cím -összehasonlításokat használ annak megállapítására, hogy a kimeneti érték az aktuális kimeneti résszel van -e leképezve.

A dedikált számítási rendszermagokban a szórás indexelt írásokkal hajtható végre.

Gyűjtsd össze

Az összegyűjtés a szórás fordítottja. Miután a szórás átrendezi az elemeket egy térkép szerint, az összeállítás helyreállíthatja az elemek sorrendjét a használt térképszórás szerint. A dedikált számítási rendszermagokban az összegyűjtést indexelt leolvasásokkal lehet végrehajtani. Más árnyékolókban textúra-kereséssel hajtják végre.

Fajta

A rendezés művelet a rendezetlen elemhalmazt rendezett elemhalmazzá alakítja. A GPU-k leggyakoribb megvalósítása a radix rendezés az egész és lebegőpontos adatokhoz, a durva szemcsés egyesítés és a finomszemcsés rendezési hálózatok az általános összehasonlítható adatokhoz.

Keresés

A keresési művelet lehetővé teszi a programozó számára, hogy megkeressen egy adott elemet a folyamban, vagy esetleg egy adott elem szomszédjait. A GPU nem az egyes elemek keresésének felgyorsítására szolgál, hanem több párhuzamos keresés futtatására szolgál. A keresési módszer többnyire bináris keresés a rendezett elemeken.

Adatszerkezetek

A GPU -n sokféle adatstruktúra ábrázolható:

Alkalmazások

Az alábbiakban felsorolunk néhány olyan területet, ahol a GPU -kat általános célú számítástechnikában használták:

Bioinformatika

A GPGPU használata a bioinformatikában:

Alkalmazás Leírás Támogatott funkciók Várható gyorsulás † GPU? Multi-GPU támogatás Kiadási állapot
BarraCUDA DNS, beleértve az epigenetikát, szekvencia -leképező szoftver Rövid szekvenálási leolvasások igazítása 6-10x T 2075, 2090, K10, K20, K20X Igen Már elérhető , 0.7.107f verzió
CUDASW ++ Nyílt forráskódú szoftver Smith-Waterman fehérjeadatbázis-kereséshez a GPU-n Smith-Waterman adatbázis párhuzamos keresése 10-50x T 2075, 2090, K10, K20, K20X Igen Már elérhető, 2.0.8 verzió
CUSHAW Párhuzamos rövid olvasási igazító Párhuzamos, pontos hosszú leolvasás igazító - réselt igazítások a nagy genomokhoz 10x T 2075, 2090, K10, K20, K20X Igen Már elérhető, 1.0.40 verzió
GPU-BLAST Helyi keresés gyors k -teljes heurisztikával Fehérje összehangolás a blastp, több CPU szálak szerint 3-4x T 2075, 2090, K10, K20, K20X Csak szingli Már elérhető, 2.2.26
GPU-HMMER Párhuzamos helyi és globális keresés profil rejtett Markov modellekkel A rejtett Markov modellek párhuzamos lokális és globális keresése 60-100x T 2075, 2090, K10, K20, K20X Igen Már elérhető, 2.3.2 verzió
mCUDA-MEME Ultragyors, méretezhető motívumfeltáró algoritmus a MEME alapján Méretezhető motívumfeltáró algoritmus a MEME alapján 4-10x T 2075, 2090, K10, K20, K20X Igen Elérhető, 3.0.12 verzió
SeqNFind GPU gyorsított szekvenciaelemző eszközkészlet Referencia összeállítás, robbanás, Smith – Waterman, hmm, de novo assembly 400x T 2075, 2090, K10, K20, K20X Igen Most elérhető
UGENE Opensource Smith – Waterman az SSE/CUDA -hoz, utótag tömb alapú ismétléskereső és dotplot Gyors rövid leolvasási igazítás 6-8x T 2075, 2090, K10, K20, K20X Igen Már elérhető, 1.11 -es verzió
SzélesLM Számos lineáris modellhez illeszkedik fix kialakításhoz és válaszhoz Párhuzamos lineáris regresszió több hasonló alakú modellnél 150x T 2075, 2090, K10, K20, K20X Igen Már elérhető, 0.1-1 verzió

Molekuláris dinamika

Alkalmazás Leírás Támogatott funkciók Várható gyorsulás † GPU? Multi-GPU támogatás Kiadási állapot
Abalone Modellezi a biopolimerek molekuláris dinamikáját fehérjék, DNS és ligandumok szimulációjához Explicit és implicit oldószer, hibrid Monte Carlo 4-120x T 2075, 2090, K10, K20, K20X Csak szingli Már elérhető, 1.8.88 -as verzió
ACEMD A molekuláris mechanikai erőterek GPU szimulációja, implicit és explicit oldószer GPU -n való használatra írva Csak 160 ns/nap GPU verzió T 2075, 2090, K10, K20, K20X Igen Most elérhető
BOROSTYÁN Programcsomag a biomolekulák molekuláris dinamikájának szimulálására PMEMD: explicit és implicit oldószer 89,44 ns/nap JAC NVE T 2075, 2090, K10, K20, K20X Igen Már elérhető, 12 -es verzió + hibajavítás9
DL-POLY Szimulálja a makromolekulákat, polimereket, ionos rendszereket stb. Egy elosztott memória párhuzamos számítógépen Két test erő, link-sejt párok, Ewald SPME erők, Shake VV 4x T 2075, 2090, K10, K20, K20X Igen Már elérhető, csak a 4.0 -s verzió forrás
BŰVÖS MD csomag a molekuláris dinamika szimulálásához a biomolekulán. Implicit (5x), explicit (2x) oldószer OpenMM -en keresztül TBD T 2075, 2090, K10, K20, K20X Igen Fejlesztés alatt Q4/12
GROMACS Szimulálja a biokémiai molekulákat komplex kötés kölcsönhatásokkal Implicit (5x), explicit (2x) oldószer 165 ns/nap DHFR T 2075, 2090, K10, K20, K20X Csak szingli Már elérhető, 4.6 verzió a Q4/12 -ben
HOOMD-Blue A részecske -dinamika csomag írásos alapja a GPU -k számára GPU -k számára írva 2x T 2075, 2090, K10, K20, K20X Igen Most elérhető
LAMMPS Klasszikus molekuláris dinamika csomag Lennard-Jones, Morse, Buckingham, CHARMM, táblázatos, természetesen gabona SDK, anizotrop Gay-Bern, RE-négyzet, "hibrid" kombinációk 3-18x T 2075, 2090, K10, K20, K20X Igen Most elérhető
NAMD Nagy molekuláris rendszerek nagy teljesítményű szimulációjára tervezték 100M atom képes 6,44 ns/nap STMV 585x 2050s T 2075, 2090, K10, K20, K20X Igen Már elérhető, 2.9 -es verzió
OpenMM Könyvtár és alkalmazás a GPU -kkal ellátott HPC molekuláris dinamikájához Implicit és explicit oldószer, egyéni erők Implicit: 127–213 ns/nap; Explicit: 18–55 ns/nap DHFR T 2075, 2090, K10, K20, K20X Igen Már elérhető, 4.1.1 verzió

† A várható gyorsítások nagymértékben függenek a rendszer konfigurációjától. GPU teljesítmény a többmagos x86 CPU foglalathoz képest. A GPU teljesítménye a GPU által támogatott funkciókon alapul, és kernel -kernel teljesítmény összehasonlítás lehet. A használt konfiguráció részleteiért tekintse meg az alkalmazás webhelyét. Gyorsítás az Nvidia házon belüli tesztelésének vagy az ISV dokumentációjának megfelelően.

‡ Q = Quadro GPU , T = Tesla GPU . Az Nvidia által ajánlott GPU -k ehhez az alkalmazáshoz. A tanúsítási információk megszerzéséhez forduljon a fejlesztőhöz vagy az ISV -hez.

Lásd még

Hivatkozások

Külső linkek