GPU

GPU-programmering Introduksjon

GPU-programmering Introduksjon

Generell databehandling på en GPU (Graphics Processing Unit), bedre kjent som GPU-programmering, er bruken av en GPU sammen med en CPU (Central Processing Unit) for å akselerere beregning i applikasjoner som tradisjonelt bare håndteres av CPU.Selv om GPU-programmering bare har vært levedyktig de siste to tiårene, inkluderer applikasjonene nå nesten alle bransjer. For eksempel har GPU-programmering blitt brukt til å akselerere video-, digitalt bilde- og lydsignalbehandling, statistisk fysikk, vitenskapelig databehandling, medisinsk bildebehandling, datasyn, nevrale nettverk og dyp læring, kryptografi og til og med innbruddsdeteksjon, blant mange andre områder.

Denne artikkelen fungerer som en teoretisk introduksjon rettet mot de som ønsker å lære å skrive GPU-akselererte programmer, så vel som de som bare har en generell interesse i dette fascinerende emnet.

Forskjellen mellom en GPU og en CPU

Lang tid før høyoppløselig 3D-grafikk med høy kvalitet ble normen, hadde de fleste datamaskiner ingen GPU. I stedet utførte CPU alle instruksjonene til dataprogrammer ved å utføre de grunnleggende aritmetiske, logiske, kontroll- og inngangs- / utgangsoperasjonene (I / O) som er spesifisert i instruksjonene. Av denne grunn blir CPU ofte beskrevet som hjernen til datamaskinen.

Men de siste årene har GPU, som er designet for å akselerere opprettelsen av bilder for utdata til en skjermenhet, ofte hjulpet CPUen med å løse problemer i områder som tidligere ble håndtert utelukkende av CPU.

Grafikkortprodusenten Nvidia gir en enkel måte å forstå den grunnleggende forskjellen mellom en GPU og en CPU: “En CPU består av noen kjerner optimalisert for sekvensiell seriell prosessering mens en GPU har en massivt parallell arkitektur bestående av tusenvis av mindre, mer effektive kjerner designet for å håndtere flere oppgaver samtidig.”

Evnen til å håndtere flere oppgaver samtidig gjør GPUer svært egnet for noen oppgaver, for eksempel å søke etter et ord i et dokument, mens andre oppgaver, for eksempel beregning av Fibonacci-sekvensen, ikke drar nytte av parallell behandling i det hele tatt.

Imidlertid er dyp læring, en av de mest etterspurte ferdighetene innen teknologi i dag, blant oppgavene som har betydelig nytte av parallell prosessering. Dyplæringsalgoritmer etterligner aktiviteten i lag av nevroner i neokorteksen, slik at maskiner kan lære å forstå språk, gjenkjenne mønstre eller komponere musikk.

Som et resultat av den økende betydningen av kunstig intelligens, har etterspørselen etter utviklere som forstår databehandling for generelle formål på en GPU, økt.

CUDA Versus OpenCL Versus OpenACC

Fordi GPU-er forstår beregningsproblemer i form av grafikkprimitiver, krevde tidlig innsats for å bruke GPU-er som generelle prosessorer, omformulering av beregningsproblemer på grafikkortets språk.

Heldigvis er det nå mye lettere å gjøre GPU-akselerert databehandling takket være parallelle databehandlingsplattformer som Nvidias CUDA, OpenCL eller OpenACC. Disse plattformene tillater utviklere å ignorere språkbarrieren som eksisterer mellom CPU og GPU og i stedet fokusere på høyere nivå databehandlingskonsepter.

CUDA

Opprinnelig utgitt av Nvidia i 2007, er CUDA (Compute Unified Device Architecture) det dominerende proprietære rammeverket i dag. "Med CUDA er utviklere i stand til å øke hastigheten på dataprogrammer dramatisk ved å utnytte kraften til GPUer," beskriver rammeverket Nvidia.

Utviklere kan ringe CUDA fra programmeringsspråk som C, C ++, Fortran eller Python uten noen ferdigheter i grafisk programmering. Dessuten inneholder CUDA Toolkit fra Nvidia alt utviklere trenger for å begynne å lage GPU-akselererte applikasjoner som i sterkere grad overgår deres CPU-bundne kolleger.

CUDA SDK er tilgjengelig for Microsoft Windows, Linux og macOS. CUDA-plattformen støtter også andre beregningsgrensesnitt, inkludert OpenCL, Microsofts DirectCompute, OpenGL Compute Shaders og C ++ AMP.

OpenCL

Opprinnelig utgitt av Khronos Group i 2009, er OpenCL den mest populære åpne, royaltyfrie standarden for parallell programmering på tvers av plattformer. Ifølge Khronos Group forbedrer OpenCL hastigheten og responsen til et bredt spekter av applikasjoner i mange markedskategorier, inkludert spill- og underholdningstitler, vitenskapelig og medisinsk programvare, profesjonelle kreative verktøy, visjonsbehandling og nevral nettverksopplæring og inferensering.”

OpenCL har hittil blitt implementert av Altera, AMD, Apple, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx og ZiiLABS, og den støtter alle populære operativsystemer på tvers av alle større plattformer, noe som gjør det ekstremt allsidig. OpenCL definerer et C-lignende språk for å skrive programmer, men tredjeparts APIer eksisterer for andre programmeringsspråk og plattformer som Python eller Java.

OpenACC

OpenACC er den yngste programmeringsstandarden for parallell databehandling som er beskrevet i denne artikkelen. Den ble opprinnelig utgitt i 2015 av en gruppe selskaper som består av Cray, CAPS, Nvidia og PGI (Portland Group) for å forenkle parallell programmering av heterogene CPU / GPU-systemer.

“OpenACC er en brukerdrevet direktivbasert ytelses-bærbar parallell programmeringsmodell designet for forskere og ingeniører som er interessert i å portere kodene sine til et bredt utvalg av heterogene HPC-maskinvareplattformer og arkitekturer med betydelig mindre programmeringsinnsats enn nødvendig med et lavt nivå modell.,”Fastslår OpenACC på sin offisielle nettside.

Utviklere som er interessert i OpenACC kan kommentere kildekoden C, C ++ og Fortran for å fortelle GPU om hvilke områder som skal akselereres. Målet er å gi en modell for akseleratorprogrammering som er bærbar på tvers av operativsystemer og forskjellige typer verts-CPUer og akseleratorer.

Hvilken skal jeg bruke?

Valget mellom disse tre parallelle databehandlingsplattformene avhenger av målene dine og miljøet du jobber i. For eksempel er CUDA mye brukt i akademia, og det anses også å være den enkleste å lære. OpenCL er den klart mest bærbare parallelle databehandlingsplattformen, selv om programmer skrevet i OpenCL fremdeles må optimaliseres individuelt for hver målplattform.

Lær GPU-koding på LinuxHint.com

GPU-programmering med Python

GPU-programmering med C++

Videre lesning

For å bli kjent med CUDA, anbefaler vi at du følger instruksjonene i CUDA Quick Start Guide, som forklarer hvordan du kan få CUDA i gang på Linux, Windows og macOS. AMDs OpenCL Programming Guide gir en fantastisk, grundig oversikt over OpenCL, men den antar at leseren er kjent med de tre første kapitlene i OpenCL-spesifikasjonen. OpenACC tilbyr en tre-trinns introduksjonsveiledning designet for å demonstrere hvordan du kan dra nytte av GPU-programmering, og mer informasjon finner du i OpenACC-spesifikasjonen.

Beste Linux Distros for spill i 2021
Linux-operativsystemet har kommet langt fra det originale, enkle, serverbaserte utseendet. Dette operativsystemet har forbedret seg enormt de siste år...
Hvordan fange opp og streame spilløkten din på Linux
Tidligere ble spill bare ansett som en hobby, men med tiden så spillindustrien en enorm vekst når det gjelder teknologi og antall spillere. Spillpubli...
Beste spill å spille med håndsporing
Oculus Quest introduserte nylig den gode ideen om håndsporing uten kontrollere. Med et stadig økende antall spill og aktiviteter som utfører støtte en...