GPU

Úvod do programování GPU

Úvod do programování GPU

Univerzální výpočet na GPU (Graphics Processing Unit), lépe známý jako programování GPU, je použití GPU společně s CPU (Central Processing Unit) k urychlení výpočtu v aplikacích tradičně zpracovávaných pouze CPU.Přestože programování GPU je prakticky životaschopné pouze za poslední dvě desetiletí, jeho aplikace nyní zahrnují prakticky každé odvětví. Například programování GPU se mimo jiné používá k urychlení zpracování videa, digitálního obrazu a zvukového signálu, statistické fyziky, vědeckých výpočtů, lékařského zobrazování, počítačového vidění, neuronových sítí a hlubokého učení, kryptografie a dokonce detekce narušení.

Tento článek slouží jako teoretický úvod zaměřený na ty, kteří by se chtěli naučit psát programy urychlené GPU, i na ty, kteří se o toto fascinující téma zajímají jen obecně.

Rozdíl mezi GPU a CPU

Dlouho předtím, než se 3D grafika s vysokým rozlišením a věrností stala normou, většina počítačů neměla žádný GPU. Místo toho CPU provedla všechny pokyny počítačových programů provedením základních aritmetických, logických, řídicích a vstupních / výstupních (I / O) operací uvedených v pokynech. Z tohoto důvodu je CPU často popisována jako mozek počítače.

Ale v posledních letech GPU, který je navržen tak, aby urychlil vytváření obrazů pro výstup na zobrazovací zařízení, často pomáhal CPU řešit problémy v oblastech, které dříve zpracovával výhradně CPU.

Výrobce grafických karet Nvidia poskytuje jednoduchý způsob, jak pochopit zásadní rozdíl mezi GPU a CPU: „CPU se skládá z několika jader optimalizovaných pro sekvenční sériové zpracování, zatímco GPU má masivně paralelní architekturu skládající se z tisíců menších, efektivnějších jádra určená pro zpracování více úkolů současně.“

Díky schopnosti zvládat více úkolů najednou jsou GPU velmi vhodné pro některé úkoly, jako je hledání slova v dokumentu, zatímco jiné úkoly, jako je výpočet sekvence Fibonacci, vůbec neprospívají paralelnímu zpracování.

Mezi úkoly, které významně těží z paralelního zpracování, však patří hluboké učení, jedna z nejvyhledávanějších dovedností v technice současnosti. Algoritmy hlubokého učení napodobují aktivitu ve vrstvách neuronů v neokortexu a umožňují strojům naučit se rozumět jazyku, rozpoznávat vzorce nebo skládat hudbu.

V důsledku rostoucího významu umělé inteligence roste poptávka po vývojářích, kteří rozumějí všeobecným výpočtům na GPU.

CUDA Versus OpenCL Versus OpenACC

Vzhledem k tomu, že GPU chápou výpočtové problémy, pokud jde o grafické primitivy, vyžadovala časná snaha o použití GPU jako univerzálních procesorů přeformulování výpočetních problémů v jazyce grafických karet.

Naštěstí je nyní mnohem snazší provádět výpočty urychlené GPU díky platformám paralelních výpočtů, jako jsou CUDA, OpenCL nebo OpenACC od společnosti Nvidia. Tyto platformy umožňují vývojářům ignorovat jazykovou bariéru, která existuje mezi CPU a GPU, a místo toho se soustředit na výpočetní koncepty vyšší úrovně.

CUDA

CUDA (Compute Unified Device Architecture), původně vydaná společností Nvidia v roce 2007, je dnes dominantním proprietárním rámcem. „S CUDA jsou vývojáři schopni dramaticky urychlit výpočetní aplikace využitím výkonu GPU,“ popisuje rámec Nvidia.

Vývojáři mohou volat CUDA z programovacích jazyků, jako je C, C ++, Fortran nebo Python, bez jakýchkoli dovedností v grafickém programování. Sada CUDA Toolkit od společnosti Nvidia navíc obsahuje vše, co vývojáři potřebují, aby mohli začít vytvářet aplikace s akcelerací GPU, které výrazně předčí jejich protějšky vázané na CPU.

CUDA SDK je k dispozici pro Microsoft Windows, Linux a macOS. platforma CUDA také podporuje další výpočetní rozhraní, včetně OpenCL, Microsoft DirectCompute, OpenGL Compute Shaders a C ++ AMP.

OpenCL

OpenCL, který původně vydala skupina Khronos Group v roce 2009, je nejpopulárnějším otevřeným standardem bez licenčních poplatků pro multiplatformní paralelní programování. Podle skupiny Khronos Group „OpenCL výrazně zvyšuje rychlost a citlivost širokého spektra aplikací v mnoha kategoriích trhu, včetně herních a zábavních titulů, vědeckého a lékařského softwaru, profesionálních kreativních nástrojů, zpracování zraku, školení neuronových sítí a odvozování.“

OpenCL dosud implementovali Altera, AMD, Apple, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx a ZiiLABS a podporuje všechny populární operační systémy napříč všemi hlavními platformami, což z něj dělá extrémně univerzální. OpenCL definuje jazyk podobný C pro psaní programů, ale API jiných výrobců existují pro jiné programovací jazyky a platformy, jako je Python nebo Java.

Otevřít ACC

OpenACC je nejmladší programovací standard pro paralelní výpočty popsaný v tomto článku. To bylo původně vydáno v roce 2015 skupinou společností zahrnujících Cray, CAPS, Nvidia a PGI (skupina Portland), aby zjednodušilo paralelní programování heterogenních systémů CPU / GPU.

„OpenACC je uživatelsky řízený výkonově přenosný paralelní programovací model založený na směrnicích určený pro vědce a inženýry, kteří mají zájem o přenesení svých kódů na širokou škálu heterogenních hardwarových platforem a architektur HPC s výrazně menším programovacím úsilím, než je vyžadováno na nízké úrovni Modelka.,”Uvádí OpenACC na svých oficiálních webových stránkách.

Vývojáři, kteří se zajímají o OpenACC, mohou anotovat zdrojový kód C, C ++ a Fortran, aby řekli GPU, které oblasti by se měly zrychlit. Cílem je poskytnout model programování akcelerátoru, který je přenosný napříč operačními systémy a různými typy hostitelských procesorů a akcelerátorů.

Který bych měl použít?

Volba mezi těmito třemi paralelními výpočetními platformami závisí na vašich cílech a prostředí, ve kterém pracujete. Například CUDA je široce používán v akademické sféře a je také považován za nejjednodušší na učení. OpenCL je zdaleka nejpřenositelnější platformou pro paralelní výpočty, ačkoli programy napsané v OpenCL je stále třeba individuálně optimalizovat pro každou cílovou platformu.

Naučte se kódování GPU v systému LinuxHint.com

Programování GPU v Pythonu

Programování GPU s C++

Další čtení

Abyste se seznámili s CUDA, doporučujeme vám postupovat podle pokynů v příručce CUDA Quick Start Guide, která vysvětluje, jak spustit CUDA v systémech Linux, Windows a macOS. Průvodce programováním OpenCL společnosti AMD poskytuje fantastický a podrobný přehled OpenCL, ale předpokládá, že čtenář je obeznámen s prvními třemi kapitolami specifikace OpenCL. OpenACC nabízí úvodní výukový program o třech krocích, který má demonstrovat, jak využít programování GPU, a další informace najdete ve specifikaci OpenACC.

Hry Nejlepší emulátory herních konzolí pro Linux
Nejlepší emulátory herních konzolí pro Linux
Tento článek uvádí seznam populárního softwaru pro emulaci herních konzolí, který je k dispozici pro Linux. Emulace je vrstva softwarové kompatibility...
Hry Nejlepší linuxové distribuce pro hraní her v roce 2021
Nejlepší linuxové distribuce pro hraní her v roce 2021
Operační systém Linux má za sebou dlouhou cestu od svého původního, jednoduchého vzhledu založeného na serveru. Tento OS se v posledních letech nesmír...
Hry Jak zachytit a streamovat vaši herní relaci v systému Linux
Jak zachytit a streamovat vaši herní relaci v systému Linux
V minulosti bylo hraní her považováno pouze za koníček, ale postupem času došlo v herním průmyslu k obrovskému nárůstu z hlediska technologie a počtu ...