Univerzální výpočet na jednotkách pro zpracování grafiky - General-purpose computing on graphics processing units
Univerzální výpočet na grafických procesorových jednotkách ( GPGPU , nebo méně často GPGP ) je použití grafické procesorové jednotky (GPU), která obvykle zpracovává výpočet pouze pro počítačovou grafiku , k provádění výpočtu v aplikacích tradičně zpracovávaných centrální procesorovou jednotkou ( PROCESOR). Použití více grafických karet v jednom počítači nebo velkého počtu grafických čipů dále paralelizuje již paralelní povahu grafického zpracování.
V zásadě je potrubí GPGPU druh paralelního zpracování mezi jedním nebo více GPU a CPU, které analyzuje data, jako by byla v podobě obrázku nebo jiné grafiky. Zatímco GPU pracují na nižších frekvencích, obvykle mají mnohonásobný počet jader . GPU tedy dokážou zpracovat mnohem více obrázků a grafických dat za sekundu než tradiční CPU. Migrace dat do grafické podoby a následné použití GPU k jejich skenování a analýze může způsobit velké zrychlení .
Plynovody GPGPU byly vyvinuty na počátku 21. století pro grafické zpracování (např. Pro lepší shadery ). Bylo zjištěno, že tato potrubí dobře vyhovují vědeckým výpočetním potřebám, a od té doby byla vyvinuta tímto směrem.
Dějiny
V zásadě lze libovolnou booleovskou funkci , včetně funkcí sčítání, násobení a dalších matematických funkcí, sestavit z funkčně úplné sady logických operátorů. V roce 1987 se Conwayova hra o život stala jedním z prvních příkladů obecných výpočtů využívajících raný stream procesor nazývaný blitter k vyvolání speciální sekvence logických operací na bitových vektorech.
Univerzální výpočty na GPU se staly praktičtějšími a oblíbenějšími přibližně po roce 2001, s příchodem jak programovatelných shaderů, tak s podporou plovoucí čárky na grafických procesorech. Zejména problémy zahrnující matice a/nebo vektory -zejména dvou-, tří- nebo čtyřrozměrné vektory-bylo možné snadno přeložit do GPU, který na tyto typy působí nativní rychlostí a podporou. Experimenty vědecké počítačové komunity s novým hardwarem začaly rutinou maticového násobení (2001); jedním z prvních běžných vědeckých programů, které na GPU běžely rychleji než na CPU, byla implementace faktorizace LU (2005).
Tyto rané snahy používat GPU jako univerzální procesory vyžadovaly přeformulování výpočetních problémů z hlediska grafických primitivů, jak je podporováno dvěma hlavními API pro grafické procesory, OpenGL a DirectX . Tento těžkopádný překlad byl odstraněn příchodem univerzálních programovacích jazyků a API, jako jsou Sh / RapidMind , Brook a Accelerator.
Následovala CUDA společnosti Nvidia , která programátorům umožnila ignorovat základní grafické koncepty ve prospěch běžnějších vysoce výkonných výpočetních konceptů. Mezi novější nabídky nezávislé na hardwaru patří DirectCompute společnosti Microsoft a OpenCL společnosti Apple/Khronos Group . To znamená, že moderní kanály GPGPU mohou využívat rychlost GPU bez nutnosti úplné a explicitní konverze dat do grafické podoby.
Implementace
Jakýkoli jazyk, který umožňuje kódu běžícímu na procesoru dotazovat shader GPU na návratové hodnoty, může vytvořit rámec GPGPU.
Od roku 2016 je OpenCL dominantním otevřeným univerzálním výpočetním jazykem GPU pro všeobecné použití a je otevřeným standardem definovaným skupinou Khronos . OpenCL poskytuje platformu GPGPU napříč platformami, která navíc podporuje paralelní výpočet dat na CPU. OpenCL je aktivně podporován na platformách Intel, AMD, Nvidia a ARM. Skupina Khronos také standardizovala a implementovala SYCL , programovací model vyšší úrovně pro OpenCL jako integrovaný jazyk specifický pro doménu s jediným zdrojem založený na čistém C ++ 11.
Dominantním proprietárním rámcem je Nvidia CUDA . Nvidia zahájila v roce 2006 CUDA , sadu pro vývoj softwaru (SDK) a rozhraní pro programování aplikací (API), které umožňuje pomocí programovacího jazyka C kódovat algoritmy pro provádění na GeForce 8 a novějších GPU.
Programovací standardy pro paralelní výpočty zahrnují OpenCL (nezávislé na dodavateli), OpenACC a OpenHMPP . Mark Harris , zakladatel GPGPU.org, vytvořil termín GPGPU .
The Xcelerit SDK , vytvořenýXceleritem, je navržen tak, abys minimálním úsilímzrychlil velké existujícíkódové bázeC ++neboC#naGPU. Poskytuje zjednodušený programovací model, automatizuje paralelizaci, spravuje zařízení a paměť a kompiluje dobinárních souborůCUDA. Na vícejádrovéprocesorya další akcelerátory lze navíc cílit ze stejného zdrojového kódu.
OpenVIDIA byla vyvinuta na univerzitě v Torontu v letech 2003–2005 ve spolupráci s Nvidia .
Altimesh Hybridizer vytvořený společnostíAltimeshkompilujeběžné intermediální jazykydobinárních souborůCUDA. Podporuje generika a virtuální funkce. Ladění a profilování je integrováno sVisual StudioaNsight. Je k dispozici jako rozšířeníVisual StudionaVisual Studio Marketplace.
Microsoft představil DirectCompute GPU computing API, vydané s DirectX 11 API.
Alea GPU vytvořený společností QuantAlea zavádí nativní možnosti výpočtu GPU projazykMicrosoft.NETF#aC#. Alea GPU také poskytuje zjednodušený model programování GPU založený na souběžném a paralelním agregování GPU pomocí delegátů a automatické správy paměti.
MATLAB podporuje akceleraci GPGPU pomocí Parallel Computing Toolbox a MATLAB Distributed Computing Server a balíčků třetích stran, jako je Jacket .
Zpracování GPGPU se také používá k simulaci newtonovské fyziky pomocí fyzikálních motorů a komerční implementace zahrnují Havok Physics, FX a PhysX , které se obvykle používají pro počítačové hry a videohry .
Blízko metalu , nyní nazývaná Stream , je technologie AMD GPGPU pro GPU založená na ATI Radeon.
C ++ Accelerated Massive Parallelism ( C ++ AMP ) je knihovna, která urychluje provádění kódu C ++ využíváním hardwaru paralelního dat na GPU.
Mobilní počítače
Vzhledem k trendu zvyšování výkonu mobilních GPU se programování pro všeobecné účely stalo dostupným také na mobilních zařízeních s provozem hlavních mobilních operačních systémů .
Google Android 4.2 umožnil spuštění kódu RenderScript na GPU mobilního zařízení. Apple představil proprietární Metal API pro iOS aplikace, schopné spouštět libovolný kód pomocí výpočetních shaderů Apple GPU.
Hardwarová podpora
Počítačové grafické karty vyrábějí různí dodavatelé, například Nvidia , AMD a ATI . Karty od těchto dodavatelů se liší implementací podpory datových formátů, jako jsou celočíselné a plovoucí řádové čárky (32bitové a 64bitové). Společnost Microsoft představila standard Shader Model , který měl pomoci řadit různé funkce grafických karet do jednoduchého čísla verze modelu Shader (1.0, 2.0, 3.0 atd.).
Celočíselná čísla
Grafické karty Pre-DirectX 9 podporovaly pouze paletové nebo celočíselné typy barev. K dispozici jsou různé formáty, z nichž každý obsahuje červený prvek, zelený prvek a modrý prvek. Někdy je přidána další alfa hodnota, která má být použita pro průhlednost. Běžné formáty jsou:
- 8 bitů na pixel - někdy režim palety, kde každá hodnota je index v tabulce se skutečnou hodnotou barvy uvedenou v jednom z dalších formátů. Někdy tři bity pro červenou, tři bity pro zelenou a dva bity pro modrou.
- 16 bitů na pixel - obvykle jsou bity přiděleny jako pět bitů pro červenou, šest bitů pro zelenou a pět bitů pro modrou.
- 24 bitů na pixel - pro každou červenou, zelenou a modrou je osm bitů.
- 32 bitů na pixel - existuje osm bitů pro každý z červených, zelených, modrých a alfa .
Čísla s plovoucí desetinnou čárkou
U grafiky s ranou pevnou funkcí nebo s omezenou programovatelností (tj. Až do GPU kompatibilních s DirectX 8.1 včetně) to bylo dostačující, protože toto je také reprezentace používaná na displejích. Je důležité si uvědomit, že tato reprezentace má určitá omezení. Vzhledem k dostatečnému výkonu zpracování grafiky by i grafičtí programátoři chtěli použít lepší formáty, jako jsou datové formáty s plovoucí desetinnou čárkou , k získání efektů, jako je zobrazování ve vysokém dynamickém rozsahu . Mnoho aplikací GPGPU vyžaduje přesnost s plovoucí desetinnou čárkou, která byla dodána s grafickými kartami odpovídajícími specifikaci DirectX 9.
DirectX 9 Shader Model 2.x navrhl podporu dvou typů přesnosti: úplné a částečné přesnosti. Podpora plné přesnosti může být buď FP32 nebo FP24 (32- nebo 24bitová s pohyblivou řádovou čárkou na součást) nebo větší, zatímco částečná přesnost byla FP16. ATI Radeon R300 série GPU podporován FP24 přesnost pouze v programovatelném potrubí fragment (i když FP32 byla podporována v procesorech vrcholů), zatímco Nvidia je NV30 série podporován jak FP16 a FP32; další prodejci jako S3 Graphics a XGI podporovali směs formátů až do FP24.
Implementace s plovoucí desetinnou čárkou na GPU Nvidia většinou vyhovují IEEE ; to však neplatí u všech prodejců. To má důsledky pro správnost, které jsou považovány za důležité pro některé vědecké aplikace. Zatímco 64bitové hodnoty s plovoucí desetinnou čárkou (dvojitá přesnost) jsou běžně dostupné na CPU, nejsou na GPU univerzálně podporovány. Některé architektury GPU obětují kompatibilitu s IEEE, zatímco jiným chybí dvojitá přesnost. Došlo k úsilí o emulaci hodnot s plovoucí desetinnou čárkou s dvojitou přesností na GPU; kompromis rychlosti však v první řadě neguje jakýkoli užitek z vyložení výpočetních prostředků na GPU.
Vektorizace
Většina operací na GPU funguje vektorově: jednu operaci lze provést až se čtyřmi hodnotami najednou. Pokud má být například jedna barva <R1, G1, B1> modulována jinou barvou <R2, G2, B2>, může GPU vytvořit výslednou barvu <R1*R2, G1*G2, B1*B2> v jedné úkon. Tato funkce je užitečná v grafice, protože téměř každý základní datový typ je vektor (buď 2-, 3- nebo 4-dimenzionální). Mezi příklady patří vrcholy, barvy, normální vektory a souřadnice textur. Mnoho dalších aplikací toho může dobře využít a kvůli jejich vyššímu výkonu jsou na CPU již dlouho k dispozici vektorové instrukce, nazývané jedna instrukce, více dat ( SIMD ).
GPU vs. CPU
Původně byla data jednoduše předávána jednosměrně z centrální procesorové jednotky (CPU) do grafické procesorové jednotky (GPU), poté do zobrazovacího zařízení . Postupem času se však stalo cenným pro GPU ukládat nejprve jednoduché, poté složité struktury dat, které mají být předány zpět CPU, který analyzoval obraz, nebo soubor vědeckých dat reprezentovaných jako 2D nebo 3D formát, který grafická karta rozumí. Protože GPU má přístup ke každé operaci kreslení, může rychle analyzovat data v těchto formách, zatímco CPU musí dotazovat každý pixel nebo datový prvek mnohem pomaleji, protože rychlost přístupu mezi CPU a jeho větším fondem paměti s náhodným přístupem (nebo v ještě horším případě pevný disk ) je pomalejší než GPU a grafické karty, které obvykle obsahují menší množství dražší paměti, ke které je přístup mnohem rychlejší. Přenos části datové sady, která má být aktivně analyzována, do této paměti GPU ve formě textur nebo jiných snadno čitelných formulářů GPU vede ke zvýšení rychlosti. Charakteristickým rysem návrhu GPGPU je schopnost obousměrného přenosu informací zpět z GPU do CPU; obecně je propustnost dat v obou směrech ideálně vysoká, což má za následek multiplikační účinek na rychlost konkrétního vysoce použitého algoritmu . Plynovody GPGPU mohou zlepšit účinnost zvláště velkých datových sad a/nebo dat obsahujících 2D nebo 3D snímky. Používá se v komplexních grafických kanálech i vědeckých výpočtech ; spíše v oblastech s velkými datovými soubory, jako je mapování genomu , nebo tam, kde je užitečná dvoj- nebo trojrozměrná analýza- zejména v současné době analýza biomolekul , studium proteinů a další komplexní organická chemie . Taková potrubí mohou mimo jiné také výrazně zlepšit efektivitu zpracování obrazu a počítačového vidění ; stejně jako paralelní zpracování obecně. Některé velmi silně optimalizované kanály přinesly zvýšení rychlosti několik stokrát vyšší než u původního CPU na základě jednoho vysoce náročného úkolu.
Jednoduchým příkladem by mohl být program GPU, který shromažďuje data o průměrných hodnotách osvětlení, protože vykresluje určitý pohled buď z kamery, nebo z programu počítačové grafiky zpět do hlavního programu na CPU, takže CPU pak může provádět úpravy na celkové obrazovce Pohled. Pokročilejší příklad může použít detekci hran k vrácení číselných informací i zpracovaného obrazu představujícího obrysy programu pro počítačové vidění ovládajícího například mobilního robota. Protože GPU má rychlý a místní hardwarový přístup ke každému pixelu nebo jinému prvku obrázku v obrázku, může jej analyzovat a zprůměrovat (pro první příklad) nebo použít Sobelův okrajový filtr nebo jiný konvoluční filtr (pro druhý) s mnohem větším rychlost než CPU, který obvykle musí přistupovat k pomalejším kopiím dotyčného obrázku s náhodným přístupem do paměti .
GPGPU je v zásadě softwarový koncept, nikoli hardwarový koncept; je to typ algoritmu , ne součást vybavení. Speciální návrhy zařízení však mohou ještě dále zvýšit účinnost potrubí GPGPU, která tradičně provádějí relativně málo algoritmů na velmi velké množství dat. Masivně paralelizované, gigantické úlohy na úrovni dat lze tedy ještě více paralelizovat prostřednictvím specializovaných nastavení, jako je rackový výpočet (mnoho podobných, vysoce přizpůsobených strojů zabudovaných do racku ), což přidává třetí vrstvu-mnoho výpočetních jednotek, z nichž každá používá mnoho CPU, aby odpovídaly na mnoho GPU. Někteří „těžaři“ bitcoinů používali taková nastavení pro zpracování ve velkém množství.
Kešky
Historicky CPU používaly hardwarově spravované mezipaměti , ale dřívější GPU poskytovaly pouze softwarově spravované lokální paměti. Jelikož jsou však GPU stále častěji používány pro aplikace pro všeobecné účely, jsou moderní GPU navrhovány s víceúrovňovými vyrovnávacími paměťmi spravovanými hardwarem, které pomohly grafickým procesorům přejít k běžnému používání výpočetní techniky. Například GPU architektury GT200 řady GeForce 200 neobsahovalo mezipaměť L2, GPU Fermi má mezipaměť poslední úrovně 768 KiB, GPU Kepler má mezipaměť poslední úrovně 1,5 MiB, GPU Maxwell má 2 mezipaměti poslední úrovně MiB a Pascal GPU má 4 vyrovnávací paměti poslední úrovni MIB.
Zaregistrujte soubor
GPU mají velmi velké soubory registrů , které jim umožňují snížit latenci přepínání kontextu. Velikost souboru registru se také zvyšuje v různých generacích GPU, např. Celková velikost souboru registru na GPU Maxwell (GM200), Pascal a Volta je 6 MiB, 14 MiB a 20 MiB. Pro srovnání, velikost souboru registru na CPU je malá, obvykle desítky nebo stovky kilobajtů.
Energetická účinnost
Vysoký výkon GPU je za cenu vysoké spotřeby energie, která při plném zatížení je ve skutečnosti stejně velká jako zbytek PC systému dohromady. Maximální spotřeba energie GPU řady Pascal (Tesla P100) byla stanovena na 250 W.
Zpracování streamu
GPU jsou navrženy speciálně pro grafiku, a proto jsou velmi omezující v operacích a programování. Vzhledem ke své konstrukci jsou GPU účinné pouze pro problémy, které lze vyřešit zpracováním streamu, a hardware lze použít pouze určitými způsoby.
Následující diskuse týkající se vrcholů, fragmentů a textur se týká hlavně staršího modelu programování GPGPU, kde byla k provádění výpočtu pro obecné účely použita grafická rozhraní API ( OpenGL nebo DirectX ). Se zavedením univerzálních výpočetních API CUDA (Nvidia, 2007) a OpenCL (nezávislá na prodejci, 2008) v nových GPGPU kódech již není nutné mapovat výpočet na grafické primitivy. Povaha zpracování dat GPU zůstává platná bez ohledu na použitá rozhraní API. (Viz např.)
GPU mohou zpracovávat pouze nezávislé vrcholy a fragmenty, ale mnoho z nich mohou zpracovávat paralelně. To je zvláště účinné, když chce programátor zpracovat mnoho vrcholů nebo fragmentů stejným způsobem. V tomto smyslu jsou GPU stream procesory - procesory, které mohou pracovat souběžně spuštěním jednoho jádra na mnoha záznamech v proudu najednou.
Proud je prostě soubor záznamů, které vyžadují podobné výpočty. Streamy poskytují datový paralelismus. Jádra jsou funkce, které se aplikují na každý prvek ve streamu. V GPU jsou vrcholy a fragmenty prvky v proudech a vrcholy a shadery fragmentů jsou jádra, která se na nich mají spouštět. Pro každý prvek můžeme pouze číst ze vstupu, provádět na něm operace a zapisovat na výstup. Je přípustné mít více vstupů a více výstupů, ale nikdy ne paměť, která by byla jak čitelná, tak zapisovatelná.
Aritmetická intenzita je definována jako počet operací provedených na slovo přenesené paměti. Je důležité, aby aplikace GPGPU měly vysokou aritmetickou intenzitu, jinak latence přístupu k paměti omezí výpočetní zrychlení.
Ideální aplikace GPGPU mají velké datové sady, vysoký paralelismus a minimální závislost mezi datovými prvky.
Koncepty programování GPU
Výpočetní prostředky
Na GPU je k dispozici celá řada výpočetních zdrojů:
- Programovatelné procesory - vertexové, primitivní, fragmentové a hlavně výpočetní kanály umožňují programátorovi provádět jádro na tocích dat
- Rasterizer-vytváří fragmenty a interpoluje konstanty na vrchol, jako jsou souřadnice textury a barva
- Texturová jednotka-paměťové rozhraní jen pro čtení
- Framebuffer-paměťové rozhraní pouze pro zápis
Ve skutečnosti může program místo výstupu pro framebuffer nahradit výstup pouze texturou pro zápis. To se provádí buď pomocí Render to Texture (RTT), Render-To-Backbuffer-Copy-To-Texture (RTBCTT), nebo novější stream-out.
Textury jako stream
Nejběžnější formou, kterou má stream přijímat v GPGPU, je 2D mřížka, protože to přirozeně zapadá do modelu vykreslování zabudovaného do GPU. Mnoho výpočtů se přirozeně mapuje do mřížek: maticová algebra, zpracování obrazu, fyzicky založená simulace atd.
Vzhledem k tomu, že textury se používají jako paměť, vyhledávání textur se pak používají jako čtení z paměti. Některé operace proto může GPU provádět automaticky.
Jádra
Výpočetní jádra lze považovat za tělo smyček . Například programátor pracující na mřížce na CPU může mít kód, který vypadá takto:
// 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]);
}
}
}
Na GPU programátor specifikuje pouze tělo smyčky jako jádro a jaká data má smyčkou vyvolat zpracováním geometrie.
Řízení toku
V sekvenčním kódu je možné řídit tok programu pomocí příkazů if-then-else a různých forem smyček. Takové struktury řízení toku byly do GPU přidány teprve nedávno. Podmíněné zápisy bylo možné provádět pomocí řádně vytvořené řady aritmetických/bitových operací, ale opakování a podmíněné větvení nebylo možné.
Nedávné GPU umožňují větvení, ale obvykle s výkonnostním trestem. Větvení by se obecně mělo ve vnitřních smyčkách vyhnout, ať už v kódu CPU nebo GPU, a k dosažení větvení lze použít různé metody, jako je rozlišení statické větve, předběžný výpočet, predikce, rozdělení smyčky a Z-cull, pokud podpora hardwaru existovat.
Metody GPU
Mapa
Operace mapy jednoduše aplikuje danou funkci (jádro) na každý prvek ve streamu. Jednoduchým příkladem je vynásobení každé hodnoty v proudu konstantou (zvýšení jasu obrázku). Operace s mapou se snadno implementuje na GPU. Programátor vygeneruje fragment pro každý pixel na obrazovce a na každý použije fragmentový program. Výsledný proud stejné velikosti je uložen ve výstupní vyrovnávací paměti.
Snížit
Některé výpočty vyžadují výpočet menšího proudu (případně proudu pouze jednoho prvku) z většího proudu. Tomu se říká zmenšení proudu. Obecně lze redukci provést v několika krocích. Výsledky z předchozího kroku jsou použity jako vstup pro aktuální krok a rozsah, ve kterém je operace aplikována, se zmenšuje, dokud nezůstane pouze jeden prvek proudu.
Filtrování streamu
Filtrování streamů je v podstatě nejednotná redukce. Filtrování zahrnuje odebrání položek ze streamu na základě určitých kritérií.
Skenovat
Operace skenování, nazývaná také součet souběžných předpon , přebírá vektor (proud) datových prvků a (libovolnou) asociativní binární funkci '+' s identifikačním prvkem 'i' . Pokud je vstup [a0, a1, a2, a3, ...], exkluzivní skenování produkuje výstup [i, a0, a0 + a1, a0 + a1 + a2, ...], zatímco inkluzivní skenování produkuje výstup [a0, a0 + a1, a0 + a1 + a2, a0 + a1 + a2 + a3, ...] a ke své existenci nevyžaduje identitu . I když se na první pohled může zdát, že operace je ze své podstaty sériová, jsou možné efektivní algoritmy paralelního skenování, které byly implementovány na grafických procesorových jednotkách. Skenovací operace má využití např. V rychlém třídění a řídkém násobení maticových vektorů.
Rozptyl
Operace rozptylu je nejpřirozeněji definována na vertexovém procesoru. Vertexový procesor je schopen upravit polohu vrcholu , což umožňuje programátorovi řídit, kde jsou informace uloženy na mřížce. Jsou možná i další rozšíření, například ovládání, jak velkou oblast vrchol ovlivňuje.
Procesor fragmentů nemůže provádět přímý rozptylový provoz, protože umístění každého fragmentu v mřížce je v době vytvoření fragmentu pevné a programátor jej nemůže změnit. Operace logického rozptylu však může být někdy přepracována nebo implementována s jiným krokem shromažďování. Implementace scatter by nejprve vyslala výstupní hodnotu i výstupní adresu. Bezprostředně následující operace shromažďování používá porovnání adres, aby zjistila, zda se výstupní hodnota mapuje na aktuální výstupní slot.
Ve vyhrazených výpočetních jádrech lze scatter provádět pomocí indexovaných zápisů.
Shromáždit
Shromáždění je opakem rozptylu. Poté, co scatter změní pořadí prvků podle mapy, může shromáždění obnovit pořadí prvků podle použitého scatteru mapy. Ve vyhrazených výpočetních jádrech lze shromažďování provádět pomocí indexovaných čtení. V jiných shaderech se provádí pomocí vyhledávání textur.
Seřadit
Operace řazení transformuje neuspořádanou sadu prvků do uspořádané sady prvků. Nejběžnější implementací na GPU je použití radix sort pro celočíselná data a data s pohyblivou řádovou čárkou a hrubozrnné slučovací třídění a jemnozrnné třídicí sítě pro obecně srovnatelná data.
Vyhledávání
Operace hledání umožňuje programátorovi najít daný prvek v proudu, případně najít sousedy zadaného prvku. GPU se nepoužívá ke zrychlení vyhledávání pro jednotlivý prvek, ale místo toho se používá k souběžnému spouštění více hledání. Většinou je používanou metodou vyhledávání binární vyhledávání na tříděných prvcích.
Datové struktury
Na GPU mohou být zastoupeny různé datové struktury:
- Hustá pole
- Řídké matice ( řídké pole ) - statické nebo dynamické
- Adaptivní struktury ( typ unie )
Aplikace
Níže jsou uvedeny některé z oblastí, kde byly GPU použity pro výpočet pro obecné účely:
- Automatická paralelizace
- Fyzikálně založené simulační a fyzikální motory (obvykle založené na newtonovských fyzikálních modelech)
- Statistická fyzika
- Teorie rozchodu mříží
- Segmentace - 2D a 3D
- Metody nastavení úrovní
- Rekonstrukce CT
- Rychlá Fourierova transformace
- Učení GPU - strojové učení a výpočty dolování dat , např. Se softwarem BIDMach
- k-algoritmus nejbližšího souseda
- Fuzzy logika
- Mapování tónů
-
Zpracování zvukového signálu
- Zpracování zvukových a zvukových efektů, použití GPU pro zpracování digitálního signálu (DSP)
- Zpracování analogového signálu
- Zpracování řeči
- Digitální zpracování obrazu
-
Zpracování videa
- Hardwarově akcelerované dekódování videa a následné zpracování
- Kompenzace pohybu (mo comp)
- Inverzní diskrétní kosinová transformace (iDCT)
- Dekódování s proměnnou délkou (VLD), Huffmanovo kódování
- Inverzní kvantizace ( IQ (nezaměňovat Intelligence Quotient))
- Odblokování ve smyčce
- Zpracování bitového toku ( CAVLC / CABAC ) pomocí hardwaru pro tento účel zvláštního účelu, protože se jedná o sériový úkol, který není vhodný pro běžné výpočty GPGPU
-
Odstranění prokládání
- Prostorově-časové prokládání
- Redukce hluku
- Vylepšení hran
- Korekce barev
- Hardwarově akcelerované kódování a předběžné zpracování videa
- Hardwarově akcelerované dekódování videa a následné zpracování
- Globální osvětlení - trasování paprsků , mapování fotonů , radiozita mimo jiné, rozptyl pod povrchem
- Geometrické výpočty - konstruktivní geometrie , vzdálenostní pole, detekce kolizí , výpočet transparentnosti, generování stínů
- Vědecké výpočty
- Bioinformatika
- Výpočetní finance
- Lékařské zobrazování
- Systém podpory klinického rozhodování (CDSS)
- Počítačové vidění
- Digitální zpracování signálu / zpracování signálu
- Řídicí technika
-
Operační výzkum
- Implementace: Algoritmus GPU Tabu Search, který řeší problém plánování zdrojů omezeného projektu, je volně dostupný na GitHubu; algoritmus GPU řešící problém Nurse Rerostering je volně dostupný na GitHubu.
- Neuronové sítě
- Databázové operace
- Výpočetní dynamika tekutin zejména pomocí metod Lattice Boltzmann
- Kryptografie a kryptoanalýza
- Modelování výkonu: výpočetně náročné úkoly na GPU
- Implementace: MD6 , Advanced Encryption Standard (AES), Data Encryption Standard (DES), RSA , kryptografie s eliptickou křivkou (ECC)
- Prolomení hesla
- Zpracování transakcí kryptoměny („těžba“) ( těžba bitcoinů )
- Automatizace elektronického návrhu
- Antivirový software
- Detekce narušení
- Zvyšte výpočetní výkon u distribuovaných výpočetních projektů, jako je SETI@home , Einstein@home
Bioinformatika
Využití GPGPU v bioinformatice:
aplikace | Popis | Podporované funkce | Očekávané zrychlení † | GPU ‡ | Podpora více GPU | Stav vydání |
---|---|---|---|---|---|---|
BarraCUDA | DNA, včetně epigenetiky, software pro mapování sekvencí | Zarovnání krátkých sekvenčních čtení | 6–10x | T 2075, 2090, K10, K20, K20X | Ano | K dispozici nyní , verze 0.7.107f |
CUDASW ++ | Open source software pro vyhledávání proteinových databází Smith-Waterman na GPU | Paralelní vyhledávání v databázi Smith-Waterman | 10–50x | T 2075, 2090, K10, K20, K20X | Ano | K dispozici nyní, verze 2.0.8 |
CUSHAW | Paralelizovaný zarovnávač krátkého čtení | Paralelní, přesný zarovnávač s dlouhým čtením - mezerové zarovnání k velkým genomům | 10x | T 2075, 2090, K10, K20, K20X | Ano | K dispozici nyní, verze 1.0.40 |
GPU-BLAST | Místní vyhledávání s rychlou k -tuple heuristikou | Vyrovnání proteinů podle blastpu, více CPU vláken | 3–4x | T 2075, 2090, K10, K20, K20X | Pouze single | K dispozici nyní, verze 2.2.26 |
GPU-HMMER | Paralelizované místní a globální vyhledávání s profilovými skrytými Markovovými modely | Paralelní místní a globální vyhledávání skrytých Markovových modelů | 60–100x | T 2075, 2090, K10, K20, K20X | Ano | K dispozici nyní, verze 2.3.2 |
mCUDA-MEME | Ultrarychlý algoritmus zjišťování škálovatelných motivů založený na MEME | Algoritmus zjišťování škálovatelných motivů založený na MEME | 4–10x | T 2075, 2090, K10, K20, K20X | Ano | K dispozici nyní, verze 3.0.12 |
SeqNFind | Sada nástrojů pro sekvenční analýzu se zrychlenou GPU | Referenční sestava, výbuch, Smith – Waterman, hmm, sestava de novo | 400x | T 2075, 2090, K10, K20, K20X | Ano | Nyní dostupný |
UGENE | Opensource Smith – Waterman pro SSE/CUDA, vyhledávač opakování založený na příponovém poli a dotplot | Rychlé zarovnání krátkého čtení | 6–8x | T 2075, 2090, K10, K20, K20X | Ano | K dispozici nyní, verze 1.11 |
WideLM | Vhodný pro řadu lineárních modelů s pevným designem a odezvou | Paralelní lineární regrese na více podobně tvarovaných modelech | 150x | T 2075, 2090, K10, K20, K20X | Ano | K dispozici nyní, verze 0.1-1 |
Molekulární dynamika
aplikace | Popis | Podporované funkce | Očekávané zrychlení † | GPU ‡ | Podpora více GPU | Stav vydání |
---|---|---|---|---|---|---|
Ušeň | Modely molekulární dynamiky biopolymerů pro simulace proteinů, DNA a ligandů | Explicitní a implicitní rozpouštědlo, hybridní Monte Carlo | 4–120x | T 2075, 2090, K10, K20, K20X | Pouze single | K dispozici nyní, verze 1.8.88 |
ACEMD | Simulace silových polí GPU molekulárních mechanik, implicitní a explicitní rozpouštědlo | Napsáno pro použití na GPU | Pouze verze GPU 160 ns/den | T 2075, 2090, K10, K20, K20X | Ano | Nyní dostupný |
JANTAR | Sada programů pro simulaci molekulární dynamiky na biomolekule | PMEMD: explicitní a implicitní rozpouštědlo | 89,44 ns/den JAC NVE | T 2075, 2090, K10, K20, K20X | Ano | K dispozici nyní, verze 12 + oprava chyb9 |
DL-POLY | Simulujte makromolekuly, polymery, iontové systémy atd. Na paralelním počítači s distribuovanou pamětí | Síly dvou těl, páry spojovacích buněk, síly Ewald SPME, Shake VV | 4x | T 2075, 2090, K10, K20, K20X | Ano | K dispozici nyní, pouze verze 4.0 |
CHARMM | Balíček MD pro simulaci molekulární dynamiky na biomolekule. | Implicitní (5x), explicitní (2x) rozpouštědlo přes OpenMM | TBD | T 2075, 2090, K10, K20, K20X | Ano | Ve vývoji Q4/12 |
GROMACS | Simulujte biochemické molekuly s komplexními vazebnými interakcemi | Implicitní (5x), explicitní (2x) rozpouštědlo | 165 ns/den DHFR | T 2075, 2090, K10, K20, K20X | Pouze single | K dispozici nyní, verze 4.6 v Q4/12 |
HOOMD-modrá | Balíček dynamiky částic napsaný jako podklad pro GPU | Napsáno pro GPU | 2x | T 2075, 2090, K10, K20, K20X | Ano | Nyní dostupný |
SVĚTLOMETY | Balíček klasické molekulární dynamiky | Lennard-Jones, Morse, Buckingham, CHARMM, tabulkové, kurzové SDK, anizotropní Gay-Bern, RE-squared, „hybridní“ kombinace | 3–18x | T 2075, 2090, K10, K20, K20X | Ano | Nyní dostupný |
NAMD | Navrženo pro vysoce výkonnou simulaci velkých molekulárních systémů | 100M atom schopný | 6,44 ns/dny STMV 585x 2050s | T 2075, 2090, K10, K20, K20X | Ano | K dispozici nyní, verze 2.9 |
OpenMM | Knihovna a aplikace pro molekulární dynamiku pro HPC s GPU | Implicitní a explicitní rozpouštědlo, vlastní síly | Implicitní: 127–213 ns/den; Explicitní: 18–55 ns/den DHFR | T 2075, 2090, K10, K20, K20X | Ano | K dispozici nyní, verze 4.1.1 |
† Očekávané zrychlení je velmi závislé na konfiguraci systému. Výkon GPU ve srovnání s vícejádrovou paticí x86 CPU. Výkon GPU srovnávaný s funkcemi podporovanými GPU a může jít o srovnání výkonu jádra s jádrem. Podrobnosti o použité konfiguraci naleznete na webových stránkách aplikace. Zrychlení podle interního testování Nvidia nebo dokumentace ISV.
‡ Q = Quadro GPU , T = Tesla GPU . Nvidia pro tuto aplikaci doporučila GPU. Informace o certifikaci získáte od vývojáře nebo ISV.
Viz také
- Jednotka pro zpracování grafiky
- OpenCL
- OpenMP
- OpenACC
- OpenHMPP
- Fastra II
- Zpracování streamu
- Mark Harris (programátor)
-
Fyzikální motor
- Advanced Simulation Library
- Jednotka pro zpracování fyziky (PPU)
- Havok (software) Physics, FX
- PhysX
- Blízko metalu
- C ++ AMP
- DirectCompute
- RenderScript
- Jednotka pro zpracování zvuku
- Larrabee (mikroarchitektura)
- Výpočet jádra
- Urychlovač AI
- Procesor hlubokého učení (DLP)
Reference
externí odkazy
- openhmpp.org-nový otevřený standard pro mnoho jader
- OCLTools Open Source OpenCL Compiler a Linker
- GPGPU.org-Univerzální výpočet pomocí grafického hardwaru
- Wiki GPGPU
- SIGGRAPH 2005 Poznámky k kurzu GPGPU
- Poznámky k kurzu IEEE VIS 2005 GPGPU
- Nvidia Developer Zone
- Nástroje AMD GPU
- CPU vs. GPGPU
- Co je to GPU Computing?
- Technická zpráva článek: „ATI vsazuje nároky na fyziku, základ GPGPU“ od Scotta Wassona
- Preis, Tobias; Virnau, Peter; Paul, Wolfgang; Schneider, Johannes J (2009). „GPU zrychlená simulace Monte Carlo modelu 2D a 3D Ising“. Journal of Computational Physics . 228 (12): 4468. Bibcode : 2009JCoPh.228.4468P . doi : 10.1016/j.jcp.2009.03.018 .
- GPGPU Computing @ Duke Statistical Science
- Programování GPGPU v F# pomocí systému Microsoft Research Accelerator