Obecný výpočet na jednotce grafického zpracování

General Purpose Computation on Graphics Processing Unit (zkráceně GPGPU , z angličtiny pro obecné účely výpočtu na grafických procesorových jednotkách ) odkazuje na použití grafického procesoru pro výpočty nad jeho původní rozsah. Může se jednat například o výpočty pro technické nebo ekonomické simulace. S paralelními algoritmy lze dosáhnout enormního zvýšení rychlosti ve srovnání s hlavním procesorem .

přehled

GPGPU se vynořilo ze shaderů grafických procesorů. Jeho síla spočívá ve provádění jednotných úkolů současně, jako je barvení pixelů nebo násobení velkých matic . Vzhledem k tomu, že zvýšení rychlosti moderních procesorů již v současné době nelze (primárně) dosáhnout zvýšením taktovací frekvence, je paralelizace důležitým faktorem při dosahování vyššího výpočetního výkonu v moderních počítačích. Výhoda použití GPU oproti CPU spočívá ve vyšším výpočetním výkonu a vyšší šířce pásma paměti. Rychlost se dosahuje hlavně vysokým stupněm paralelismu aritmetických operací grafického procesoru.

Modelka Teoretický výpočetní výkon
Rychlost datové sběrnice paměti
( GByte / s )
Typ úložiště Umění
s jednoduchým na dvojnásobek
Přesnost ( GFlops )
AMD Radeon Pro Duo 16,384 1024 1024 HBM GPU
AMD Radeon R9 Fury X 8 602 538 512
Nvidia Geforce GTX Titan X 6 144 192 336 GDDR5
AMD FirePro W9100 5 350 2675 320
Nvidia Tesla K20X 3950 1.310 250
AMD Radeon HD 7970 3,789 947 264
Intel Xeon Phi 7120 2,420 1210 352 Koprocesor
PlayStation 4 SoC ( AMD ) 1860 - 167 APU
Nvidia Geforce GTX 580 1581 198 192.4 GPU
Intel Xeon E7-8890 v3 1440 720 102,4 (?) DDR4 procesor
AMD A10-7850k 856 - 34 DDR3 APU
Intel Core i7-3930K 307.2 153.6 51.2 procesor
Intel Pentium 4 s SSE3, 3,6 GHz 14.4 7.2 6.4 DDR2

Shadery fragmentů a vrcholů mohou běžet současně. Další výhodou je nízká cena ve srovnání s podobně rychlými jinými řešeními a také skutečnost, že vhodné grafické karty dnes najdete téměř na každém PC.

Dějiny

Na začátku byly shadery spojeny pouze se speciálními funkcemi, které byly úzce spojeny s grafickými výpočty. Aby se urychlila rychlost výpočtu jednotlivých pixelů, bylo provedeno provádění výpočtu jednotlivých pixelů současně pomocí několika podobných aritmetických jednotek. Později vznikla myšlenka rozšířit velmi omezené možnosti shaderů, aby se z nich mohly stát masivně paralelní výpočetní jednotky pro jakýkoli úkol: Objevily se první - víceméně volně programovatelné shadery. Trend volně programovatelného navrhování shaderů pokračuje dodnes a s každou novou generací technologie ho posouvají designéři čipů. Moderní GPU někdy obsahují více než 1000 těchto programovatelných shaderových jednotek, a proto mohou současně provádět více než 1000 výpočetních operací.

kritika

Podle OpenCL existuje jednotné rozhraní pro implementaci výpočtů GPGPU. Nevýhodou ve srovnání s konvenčními CPU je masivní paralelismus, s nímž musí být programy prováděny, aby bylo možné tyto výhody využít. GPU jsou také omezené ve své funkčnosti. Pro vědecký sektor existují speciální grafické modely ( Nvidia Tesla , AMD FireStream ). Paměť těchto grafických karet má postupy pro opravu chyb a jejich přesnost při výpočtu čísel s plovoucí desetinnou čárkou je větší, což se také odráží v nákladech.

programování

OpenCL , CUDA a od roku 2012 C ++ AMP jsou k dispozici hlavně pro vývoj programů kompatibilních s GPGPU . OpenCL je otevřený standard, který je k dispozici na mnoha platformách, zatímco CUDA je proprietární rámec od Nvidia a může běžet pouze na GPU od tohoto výrobce. AMP je jedním z Microsoftem iniciovaných C ++ -Spracherweiterung ve spojení s malou šablonou - knihovnou, která je otevřená v tom smyslu, že ani produkty společnosti Microsoft, ani určitý hardware Accelerator nejsou omezené typy nebo někteří výrobci hardwaru (mohou používat nejen GPGPU, ale také CPU a v budoucnu další možnosti paralelizace, jako je cloud computing ). V implementaci AMP společnosti Microsoft se očekává , že GPU bude podporovat DirectX verze 11, protože pouze s touto verzí byla věnována zvláštní pozornost použití GPU jako GPGPU. Pokud program využívající AMP nenajde dostatečně aktuální GPU, algoritmus naprogramovaný pomocí AMP se automaticky provede na CPU pomocí jeho možností paralelizace ( multithreading na několika jádrech procesoru , instrukce SIMD ). AMP by tedy měl vytvořit úplnou abstrakční vrstvu mezi algoritmem a hardwarovým vybavením provádějícího počítače. Kromě toho omezení na několik nových konstrukcí jazyka C ++ a několik nových tříd knihoven by mělo omezit předchozí překážky a úsilí při vývoji paralelních algoritmů. DirectX 11 je již nativně hardwarově podporován všemi běžnými řadami GPU (novější než představení DirectX 11) (včetně základních výkonových GPU, jako jsou GPU integrované do čipové sady Intel ), ale DirectX 11 byl představen pouze s Windows 7 a je dodáván pro Windows Vista pouze proto, že starší operační systémy Windows nelze s AMP použít. Zda bude C ++ AMP někdy přizpůsoben jinými platformami nebo vývojovými prostředími C ++ mimo svět Windows, je v současné době stále zcela otevřené.

Novější přístup je OpenACC , který je stejně jako OpenMP řízen pomocí pragmat kompilátoru. Obyčejný zdrojový kód, např. B. v C ++, automaticky paralelizovány v tom, že před sériově formulované smyčky jsou umístěna některá pragma kompilátoru, například „#pragma acc parallel“. Úsilí o přenesení je relativně malé. Automatická paralelizace však ne vždy vede k optimálnímu řešení. OpenACC proto nikdy nemůže úplně nahradit explicitní paralelní programování jako v OpenCL. V mnoha případech však stojí za to, aby bylo možné tímto způsobem dosáhnout vysokých faktorů zrychlení na GPGPU. OpenACC je podporován komerčními kompilátory jako PGI a bezplatnými kompilátory jako GNU Compiler Collection .

Ke spuštění programů na GPU potřebujete hostitelský program, který řídí tok informací. Obvykle je kód GPGPU formulovaný v jazyce C podobném kompilován za běhu na pokyn hostitelského programu a odeslán do grafického procesoru k dalšímu zpracování, který poté vrací vypočítaná data hostitelskému programu.

Viz také

literatura

  • Matt Pharr: GPU Gems 2 . Addison-Wesley Publishing Company, 2005, ISBN 0-321-33559-7 , část IV - Obecný výpočet na GPU: Primer.
  • David B. Kirk: Programování masivně paralelních procesorů: praktický přístup [brožovaný výtisk] . Morgan Kaufmann, 2010, ISBN 978-0-12-381472-2 .

webové odkazy