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:

Aplikace

Níže jsou uvedeny některé z oblastí, kde byly GPU použity pro výpočet pro obecné účely:

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é

Reference

externí odkazy