GPU

Úvod do programovania GPU

Úvod do programovania GPU

Všeobecné použitie na GPU (Graphics Processing Unit), známejšie ako programovanie GPU, je použitie GPU spolu s CPU (Central Processing Unit) na urýchlenie výpočtu v aplikáciách, s ktorými tradične pracuje iba CPU.Aj keď je programovanie GPU prakticky životaschopné iba za posledné dve desaťročia, jeho aplikácie v súčasnosti zahŕňajú prakticky každé odvetvie. Napríklad programovanie GPU sa okrem mnohých ďalších oblastí používa na urýchlenie spracovania videa, digitálneho obrazu a zvukového signálu, štatistickej fyziky, vedeckých výpočtov, lekárskeho zobrazovania, počítačového videnia, neurónových sietí a hlbokého učenia, kryptografie a dokonca detekcie narušenia.

Tento článok slúži ako teoretický úvod zameraný na tých, ktorí by sa chceli naučiť písať programy zrýchlené na GPU, ako aj na tých, ktorí sa o túto fascinujúcu tému zaujímajú iba všeobecne.

Rozdiel medzi GPU a CPU

Dlho predtým, ako sa 3D grafika s vysokým rozlíšením a vernosťou stala normou, väčšina počítačov nemala GPU. Namiesto toho CPU vykonala všetky pokyny počítačových programov vykonaním základných aritmetických, logických, riadiacich a vstupných / výstupných (I / O) operácií špecifikovaných v pokynoch. Z tohto dôvodu sa CPU často označuje ako mozog počítača.

Ale v posledných rokoch GPU, ktorý je navrhnutý tak, aby urýchlil vytváranie obrázkov na výstup na zobrazovacie zariadenie, často pomáhal CPU riešiť problémy v oblastiach, ktoré predtým riešil iba CPU.

Výrobca grafických kariet Nvidia poskytuje jednoduchý spôsob, ako pochopiť zásadný rozdiel medzi GPU a CPU: „CPU sa skladá z niekoľkých jadier optimalizovaných pre postupné sériové spracovanie, zatiaľ čo GPU má masívne paralelnú architektúru pozostávajúcu z tisícov menších, efektívnejších jadrá určené na súčasné spracovanie viacerých úloh.“

Vďaka schopnosti zvládať viac úloh naraz sú GPU veľmi vhodné pre niektoré úlohy, ako je napríklad hľadanie slova v dokumente, zatiaľ čo iné úlohy, ako napríklad výpočet Fibonacciho sekvencie, vôbec neprinášajú výhody paralelného spracovania.

Medzi úlohy, ktoré z paralelného spracovania skutočne profitujú, je však aj hlboké učenie, jedna z najvyhľadávanejších schopností v súčasnosti. Algoritmy hlbokého učenia napodobňujú aktivitu vo vrstvách neurónov v neokortexe a umožňujú strojom naučiť sa porozumieť jazyku, rozpoznávať vzorce alebo skladať hudbu.

V dôsledku rastúceho významu umelej inteligencie stúpa dopyt po vývojároch, ktorí rozumejú univerzálnym výpočtom na GPU.

CUDA Versus OpenCL Versus OpenACC

Pretože GPU chápu výpočtové problémy v zmysle grafických primitívov, skoré úsilie o použitie GPU ako univerzálnych procesorov vyžadovalo preformulovanie výpočtových problémov v jazyku grafických kariet.

Našťastie je teraz oveľa jednoduchšie vykonávať výpočty zrýchlené pomocou GPU vďaka platformám paralelných výpočtov, ako sú CUDA, OpenCL alebo OpenACC od spoločnosti Nvidia. Tieto platformy umožňujú vývojárom ignorovať jazykovú bariéru, ktorá existuje medzi CPU a GPU, a namiesto toho sa zameriavajú na výpočtové koncepty vyššej úrovne.

CUDA

CUDA (Compute Unified Device Architecture), ktorá bola pôvodne vydaná spoločnosťou Nvidia v roku 2007, je dnes dominantným proprietárnym rámcom. „Vďaka CUDA sú vývojári schopní dramaticky urýchliť počítačové aplikácie využitím sily GPU,“ popisuje rámec Nvidia.

Vývojári môžu volať CUDA z programovacích jazykov ako C, C ++, Fortran alebo Python bez akýchkoľvek znalostí grafického programovania. Sada CUDA Toolkit od spoločnosti Nvidia navyše obsahuje všetko, čo vývojári potrebujú, aby mohli začať vytvárať aplikácie s akceleráciou GPU, ktoré výrazne prekonávajú svojich náprotivkov viazaných na CPU.

Sada CUDA SDK je k dispozícii pre systémy Microsoft Windows, Linux a macOS. platforma CUDA podporuje aj ďalšie výpočtové rozhrania vrátane OpenCL, Microsoft DirectCompute, OpenGL Compute Shaders a C ++ AMP.

OpenCL

OpenCL, ktorý pôvodne vydala skupina Khronos Group v roku 2009, je najpopulárnejším otvoreným, bezplatným štandardom pre multiplatformové paralelné programovanie. Podľa skupiny Khronos Group „OpenCL výrazne zvyšuje rýchlosť a odozvu širokého spektra aplikácií na mnohých trhových kategóriách vrátane herných a zábavných titulov, vedeckého a lekárskeho softvéru, profesionálnych kreatívnych nástrojov, spracovania zraku, školení a vyvodzovania neurónových sietí.“

OpenCL doteraz implementovali Altera, AMD, Apple, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx a ZiiLABS a podporuje všetky populárne operačné systémy na všetkých hlavných platformách, vďaka čomu je nesmierne všestranný. OpenCL definuje jazyk podobný C na písanie programov, ale API tretích strán existujú pre ďalšie programovacie jazyky a platformy ako Python alebo Java.

OpenACC

OpenACC je najmladší programovací štandard pre paralelné výpočty popísaný v tomto článku. Pôvodne ju vydal v roku 2015 skupina spoločností pozostávajúca z Cray, CAPS, Nvidia a PGI (skupina Portland) s cieľom zjednodušiť paralelné programovanie heterogénnych systémov CPU / GPU.

„OpenACC je užívateľsky riadený výkonovo prenosný paralelný programovací model založený na smernici, určený pre vedcov a technikov, ktorí majú záujem o prenos svojich kódov na širokú škálu heterogénnych hardvérových platforiem a architektúr HPC s výrazne menším programovacím úsilím, ako sa vyžaduje na nízkej úrovni Model.,”Uvádza OpenACC na svojej oficiálnej webovej stránke.

Vývojári so záujmom o OpenACC môžu anotovať zdrojové kódy C, C ++ a Fortran, aby povedali GPU, ktoré oblasti by sa mali urýchliť. Cieľom je poskytnúť model programovania akcelerátora, ktorý je prenosný medzi operačnými systémami a rôznymi typmi hostiteľských procesorov a akcelerátorov.

Ktorý z nich by som mal použiť?

Výber medzi týmito tromi platformami pre paralelné výpočty závisí od vašich cieľov a prostredia, v ktorom pracujete. Napríklad CUDA je široko používaný na akademickej pôde a považuje sa tiež za najjednoduchšie sa naučiť. OpenCL je zďaleka najprenosnejšia paralelná výpočtová platforma, aj keď programy napísané v OpenCL je stále potrebné individuálne optimalizovať pre každú cieľovú platformu.

Naučte sa kódovanie GPU v systéme LinuxHint.com

Programovanie GPU pomocou Pythonu

Programovanie GPU pomocou C++

Ďalšie čítanie

Ak sa chcete oboznámiť s CUDA, odporúčame vám postupovať podľa pokynov v Sprievodcovi rýchlym spustením CUDA, ktorý vysvetľuje, ako spustiť CUDA v systémoch Linux, Windows a macOS. Sprievodca programovaním OpenCL spoločnosti AMD poskytuje fantastický a podrobný prehľad o OpenCL, predpokladá však, že čitateľ je oboznámený s prvými tromi kapitolami špecifikácie OpenCL. OpenACC ponúka úvodný tutoriál pozostávajúci z troch krokov, ktorý má demonštrovať, ako využiť výhody programovania GPU, a ďalšie informácie nájdete v špecifikácii OpenACC.

Ovládajte a spravujte pohyb myši medzi viacerými monitormi v systéme Windows 10
Správca myši s duálnym displejom umožňuje ovládať a konfigurovať pohyb myši medzi viacerými monitormi spomalením jeho pohybu blízko hranice. Windows 1...
WinMouse vám umožňuje prispôsobiť a vylepšiť pohyb ukazovateľa myši na počítači so systémom Windows
Ak chcete vylepšiť predvolené funkcie kurzora myši, použite freeware WinMouse. Pridáva ďalšie funkcie, ktoré vám pomôžu vyťažiť zo svojej skromnej myš...
Tlačidlo ľavého kliknutia myši nefunguje v systéme Windows 10
Ak používate samostatnú myš s prenosným počítačom alebo stolovým počítačom, ale nefunguje ľavé tlačidlo myši vo Windows 10/8/7 z nejakého dôvodu uvádz...