GPU

GPU-programmering Inleiding

GPU-programmering Inleiding

Algemeen gebruik op een GPU (Graphics Processing Unit), beter bekend als GPU-programmering, is het gebruik van een GPU samen met een CPU (Central Processing Unit) om de berekening te versnellen in toepassingen die traditioneel alleen door de CPU worden afgehandeld.Hoewel GPU-programmering pas de afgelopen twee decennia praktisch levensvatbaar is geweest, omvatten de toepassingen nu vrijwel elke industrie. GPU-programmering is bijvoorbeeld gebruikt om video-, digitale beeld- en audiosignaalverwerking, statistische fysica, wetenschappelijke informatica, medische beeldvorming, computervisie, neurale netwerken en diep leren, cryptografie en zelfs inbraakdetectie te versnellen, naast vele andere gebieden.

Dit artikel dient als een theoretische introductie voor diegenen die willen leren hoe ze GPU-versnelde programma's kunnen schrijven en voor diegenen die slechts een algemene interesse hebben in dit fascinerende onderwerp.

Het verschil tussen een GPU en een CPU

Lang voordat hoge resolutie, high-fidelity 3D-graphics de norm werden, hadden de meeste computers geen GPU. In plaats daarvan voerde de CPU alle instructies van computerprogramma's uit door de elementaire rekenkundige, logische, controle- en invoer-/uitvoerbewerkingen (I/O) uit te voeren die door de instructies worden gespecificeerd. Om deze reden wordt de CPU vaak omschreven als het brein van de computer.

Maar de afgelopen jaren heeft de GPU, die is ontworpen om het maken van afbeeldingen voor uitvoer naar een weergaveapparaat te versnellen, de CPU vaak geholpen bij het oplossen van problemen in gebieden die voorheen alleen door de CPU werden afgehandeld.

Fabrikant van grafische kaarten Nvidia biedt een eenvoudige manier om het fundamentele verschil tussen een GPU en een CPU te begrijpen: "Een CPU bestaat uit een paar kernen die zijn geoptimaliseerd voor sequentiële seriële verwerking, terwijl een GPU een enorm parallelle architectuur heeft die bestaat uit duizenden kleinere, efficiëntere kernen ontworpen voor het gelijktijdig uitvoeren van meerdere taken.”

De mogelijkheid om meerdere taken tegelijkertijd uit te voeren, maakt GPU's zeer geschikt voor sommige taken, zoals het zoeken naar een woord in een document, terwijl andere taken, zoals het berekenen van de Fibonacci-reeks, helemaal niet profiteren van parallelle verwerking.

Een van de taken die aanzienlijk baat hebben bij parallelle verwerking, is echter diep leren, een van de meest gewilde vaardigheden in de technologie van vandaag. Deep learning-algoritmen bootsen de activiteit na in lagen van neuronen in de neocortex, waardoor machines kunnen leren hoe ze taal kunnen begrijpen, patronen kunnen herkennen of muziek kunnen componeren.

Als gevolg van het groeiende belang van kunstmatige intelligentie is de vraag naar ontwikkelaars die algemeen computergebruik op een GPU begrijpen enorm gestegen.

CUDA versus OpenCL versus OpenACC

Omdat GPU's rekenproblemen begrijpen in termen van grafische primitieven, vereisten vroege pogingen om GPU's te gebruiken als processors voor algemene doeleinden het herformuleren van rekenproblemen in de taal van grafische kaarten.

Gelukkig is het nu veel gemakkelijker om GPU-versneld computergebruik uit te voeren dankzij parallelle computerplatforms zoals Nvidia's CUDA, OpenCL of OpenACC. Met deze platforms kunnen ontwikkelaars de taalbarrière tussen de CPU en de GPU negeren en zich in plaats daarvan concentreren op computerconcepten op een hoger niveau.

CUDA

Oorspronkelijk uitgebracht door Nvidia in 2007, is CUDA (Compute Unified Device Architecture) tegenwoordig het dominante propriëtaire framework. "Met CUDA kunnen ontwikkelaars computertoepassingen drastisch versnellen door gebruik te maken van de kracht van GPU's", beschrijft het framework Nvidia.

Ontwikkelaars kunnen CUDA bellen vanuit programmeertalen zoals C, C++, Fortran of Python zonder enige kennis van grafisch programmeren. Bovendien bevat de CUDA Toolkit van Nvidia alles wat ontwikkelaars nodig hebben om GPU-versnelde applicaties te maken die aanzienlijk beter presteren dan hun CPU-gebonden tegenhangers.

De CUDA SDK is beschikbaar voor Microsoft Windows, Linux en macOS. het CUDA-platform ondersteunt ook andere computerinterfaces, waaronder OpenCL, Microsoft's DirectCompute, OpenGL Compute Shaders en C++ AMP.

OpenCL

OpenCL, oorspronkelijk uitgebracht door de Khronos Group in 2009, is de meest populaire open, royaltyvrije standaard voor platformonafhankelijke, parallelle programmering. Volgens de Khronos Group: "OpenCL verbetert de snelheid en het reactievermogen van een breed spectrum aan toepassingen in tal van marktcategorieën, waaronder gaming- en entertainmenttitels, wetenschappelijke en medische software, professionele creatieve tools, visieverwerking en neurale netwerktraining en -inferentie.”

OpenCL is tot nu toe geïmplementeerd door Altera, AMD, Apple, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx en ZiiLABS, en het ondersteunt alle populaire besturingssystemen op alle belangrijke platforms, waardoor het extreem veelzijdig. OpenCL definieert een C-achtige taal voor het schrijven van programma's, maar er bestaan ​​API's van derden voor andere programmeertalen en platforms zoals Python of Java.

OpenACC

OpenACC is de jongste programmeerstandaard voor parallel computergebruik die in dit artikel wordt beschreven. Het werd oorspronkelijk uitgebracht in 2015 door een groep bedrijven bestaande uit Cray, CAPS, Nvidia en PGI (de Portland Group) om parallel programmeren van heterogene CPU/GPU-systemen te vereenvoudigen.

“OpenACC is een gebruikersgestuurd, op richtlijnen gebaseerd, prestatie-draagbaar parallel programmeermodel, ontworpen voor wetenschappers en ingenieurs die geïnteresseerd zijn in het overzetten van hun codes naar een breed scala aan heterogene HPC-hardwareplatforms en architecturen met aanzienlijk minder programmeerinspanning dan vereist met een laag niveau model-.,” stelt OpenACC op haar officiële website.

Ontwikkelaars die geïnteresseerd zijn in OpenACC kunnen de C-, C++- en Fortran-broncode annoteren om de GPU te vertellen welke gebieden moeten worden versneld. Het doel is om een ​​model te bieden voor acceleratorprogrammering dat overdraagbaar is tussen besturingssystemen en verschillende soorten host-CPU's en accelerators.

Welke moet ik gebruiken??

De keuze tussen deze drie parallelle computerplatforms hangt af van uw doelen en de omgeving waarin u werkt. CUDA wordt bijvoorbeeld veel gebruikt in de academische wereld en wordt ook beschouwd als de gemakkelijkste om te leren. OpenCL is verreweg het meest draagbare parallelle computerplatform, hoewel programma's die in OpenCL zijn geschreven nog steeds individueel moeten worden geoptimaliseerd voor elk doelplatform.

Leer GPU-codering op LinuxHint.com

GPU-programmering met Python

GPU-programmering met C++

Verder lezen

Om vertrouwd te raken met CUDA, raden we u aan de instructies te volgen in de CUDA Quick Start Guide, waarin wordt uitgelegd hoe u CUDA aan de gang krijgt op Linux, Windows en macOS. AMD's OpenCL Programming Guide biedt een fantastisch, diepgaand overzicht van OpenCL, maar gaat ervan uit dat de lezer bekend is met de eerste drie hoofdstukken van de OpenCL-specificatie. OpenACC biedt een inleidende zelfstudie in drie stappen die is ontworpen om te demonstreren hoe u kunt profiteren van GPU-programmering, en meer informatie is te vinden in de OpenACC-specificatie.

OpenTTD-zelfstudie
OpenTTD is een van de meest populaire simulatiegames voor bedrijven die er zijn. In dit spel moet je een geweldig transportbedrijf creëren. U begint e...
SuperTuxKart voor Linux
SuperTuxKart is een geweldige titel die is ontworpen om je de Mario Kart-ervaring gratis te bieden op je Linux-systeem. Het is behoorlijk uitdagend en...
Strijd om Wesnoth Zelfstudie
The Battle for Wesnoth is een van de meest populaire open source strategiespellen die je op dit moment kunt spelen. Dit spel is niet alleen al heel la...