GPU

Introduktion til GPU-programmering

Introduktion til GPU-programmering

Generel beregning på en GPU (Grafikbehandlingsenhed), bedre kendt som GPU-programmering, er brugen af ​​en GPU sammen med en CPU (Central Processing Unit) til at fremskynde beregning i applikationer, der traditionelt kun håndteres af CPU'en.Selvom GPU-programmering kun har været praktisk levedygtig i de sidste to årtier, inkluderer dens applikationer nu stort set alle brancher. For eksempel er GPU-programmering blevet brugt til at fremskynde video-, digitalt billed- og audiosignalbehandling, statistisk fysik, videnskabelig computing, medicinsk billeddannelse, computersyn, neurale netværk og dyb læring, kryptografi og endda indtrængen detektion blandt mange andre områder.

Denne artikel fungerer som en teoretisk introduktion rettet mod dem, der gerne vil lære at skrive GPU-accelererede programmer såvel som dem, der bare har en generel interesse i dette fascinerende emne.

Forskellen mellem en GPU og en CPU

Længe før højopløsnings 3D-grafik blev normen, havde de fleste computere ingen GPU. I stedet udførte CPU'en alle instruktioner fra computerprogrammer ved at udføre de grundlæggende aritmetiske, logiske, kontrol- og input / output (I / O) operationer, der er specificeret i instruktionerne. Af denne grund beskrives CPU'en ofte som hjernen på computeren.

Men i de senere år har GPU, som er designet til at fremskynde oprettelsen af ​​billeder til output til en displayenhed, ofte hjulpet CPU med at løse problemer i områder, der tidligere kun blev håndteret af CPU.

Grafikkortproducent Nvidia giver en enkel måde at forstå den grundlæggende forskel mellem en GPU og en CPU: ”En CPU består af et par kerner optimeret til sekventiel seriel behandling, mens en GPU har en massiv parallel arkitektur bestående af tusindvis af mindre, mere effektive kerner designet til at håndtere flere opgaver samtidigt.”

Evnen til at håndtere flere opgaver på samme tid gør GPU'er meget velegnede til nogle opgaver, såsom at søge efter et ord i et dokument, mens andre opgaver, såsom beregning af Fibonacci-sekvensen, overhovedet ikke drager fordel af parallel behandling.

Imidlertid er dyb læring blandt de opgaver, der i væsentlig grad drager fordel af parallelbehandling, en af ​​de mest efterspurgte færdigheder inden for teknologi i dag. Dyb læringsalgoritmer efterligner aktiviteten i lag af neuroner i neocortex, så maskiner kan lære at forstå sprog, genkende mønstre eller komponere musik.

Som et resultat af den voksende betydning af kunstig intelligens har efterspørgslen efter udviklere, der forstår computere til generelle formål på en GPU, været kraftigt stigende.

CUDA Versus OpenCL Versus OpenACC

Fordi GPU'er forstår beregningsproblemer med hensyn til grafikprimitiver, krævede en tidlig indsats for at bruge GPU'er som almindelige processorer en reformulering af beregningsproblemer på grafikkortsproget.

Heldigvis er det nu meget nemmere at lave GPU-accelereret computing takket være parallelle computerplatforme som Nvidias CUDA, OpenCL eller OpenACC. Disse platforme giver udviklere mulighed for at ignorere den sprogbarriere, der findes mellem CPU'en og GPU'en og i stedet fokusere på højere niveau computerkoncepter.

CUDA

Oprindeligt udgivet af Nvidia i 2007, er CUDA (Compute Unified Device Architecture) den dominerende proprietære ramme i dag. "Med CUDA er udviklere i stand til dramatisk at fremskynde computerapplikationer ved at udnytte kraften fra GPU'er," beskriver rammen Nvidia.

Udviklere kan ringe til CUDA fra programmeringssprog som C, C ++, Fortran eller Python uden færdigheder i grafisk programmering. Hvad mere er, CUDA Toolkit fra Nvidia indeholder alt, hvad udviklere har brug for for at begynde at oprette GPU-accelererede applikationer, der i høj grad overgår deres CPU-bundne kolleger.

CUDA SDK er tilgængelig til Microsoft Windows, Linux og macOS. CUDA-platformen understøtter også andre beregningsgrænseflader, herunder OpenCL, Microsofts DirectCompute, OpenGL Compute Shaders og C ++ AMP.

OpenCL

Oprindeligt udgivet af Khronos Group i 2009, er OpenCL den mest populære åbne, royaltyfri standard til parallel-programmering på tværs af platforme. Ifølge Khronos Group forbedrer OpenCL i høj grad hastigheden og lydhørheden af ​​et bredt spektrum af applikationer i adskillige markedskategorier, herunder spil- og underholdningstitler, videnskabelig og medicinsk software, professionelle kreative værktøjer, visionbehandling og neuralt netværkstræning og inferencing.”

OpenCL er indtil videre implementeret af Altera, AMD, Apple, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx og ZiiLABS, og det understøtter alle populære operativsystemer på tværs af alle større platforme, hvilket gør det ekstremt alsidig. OpenCL definerer et C-lignende sprog til skrivning af programmer, men der findes tredjeparts-API'er til andre programmeringssprog og platforme som Python eller Java.

OpenACC

OpenACC er den yngste programmeringsstandard for parallel computing beskrevet i denne artikel. Det blev oprindeligt frigivet i 2015 af en gruppe virksomheder, der består af Cray, CAPS, Nvidia og PGI (Portland Group) for at forenkle parallel programmering af heterogene CPU / GPU-systemer.

“OpenACC er en brugerdrevet direktivbaseret performance-bærbar parallel programmeringsmodel designet til forskere og ingeniører, der er interesseret i at overføre deres koder til en bred vifte af heterogene HPC-hardwareplatforme og -arkitekturer med betydeligt mindre programmeringsindsats end krævet med et lavt niveau model.,”Siger OpenACC på sin officielle hjemmeside.

Udviklere, der er interesserede i OpenACC, kan kommentere C-, C ++- og Fortran-kildekoden for at fortælle GPU'en, hvilke områder der skal accelereres. Målet er at give en model til acceleratorprogrammering, der er bærbar på tværs af operativsystemer og forskellige typer værts-CPU'er og acceleratorer.

Hvilken skal jeg bruge?

Valget mellem disse tre parallelle computerplatforme afhænger af dine mål og det miljø, du arbejder i. For eksempel er CUDA meget brugt i den akademiske verden, og det anses også for at være den nemmeste at lære. OpenCL er langt den mest bærbare parallelcomputerplatform, skønt programmer skrevet i OpenCL stadig skal optimeres individuelt til hver målplatform.

Lær GPU-kodning på LinuxHint.com

GPU-programmering med Python

GPU-programmering med C++

Yderligere læsning

For at blive fortrolig med CUDA anbefaler vi, at du følger instruktionerne i CUDA Quick Start Guide, der forklarer, hvordan du får CUDA til at køre på Linux, Windows og macOS. AMDs OpenCL-programmeringsvejledning giver et fantastisk og dybtgående overblik over OpenCL, men det antages, at læseren er fortrolig med de første tre kapitler i OpenCL-specifikationen. OpenACC tilbyder en introduktion i tre trin, der er designet til at demonstrere, hvordan man udnytter GPU-programmering, og mere information kan findes i OpenACC-specifikationen.

Sådan installeres og afspilles Doom på Linux
Introduktion til undergang Doom-serien opstod i 90'erne efter frigivelsen af ​​den originale Doom. Det var et øjeblikkeligt hit, og fra den tid af har...
Vulkan til Linux-brugere
Med hver nye generation af grafikkort ser vi spiludviklere skubbe grænserne for grafisk troskab og komme et skridt tættere på fotorealisme. Men på tro...
OpenTTD vs Simutrans
Oprettelse af din egen transportsimulering kan være sjovt, afslappende og ekstremt lokkende. Derfor skal du sørge for at prøve så mange spil som mulig...