GPU -programmering Introduksjon

GPU -programmering Introduksjon

Generell formål databehandling på en GPU (Graphics Processing Unit), bedre kjent som GPU-programmering, er bruken av en GPU sammen med en CPU (sentral prosesseringsenhet) for å akselerere beregning i applikasjoner som bare er håndtert av CPU.Selv om GPU -programmering har vært praktisk talt bare de siste to tiårene, inkluderer applikasjonene nå praktisk talt alle bransjer. For eksempel har GPU -programmering blitt brukt til å akselerere video-, digitalt bilde og lydsignalbehandling, statistisk fysikk, vitenskapelig databehandling, medisinsk avbildning, datamaskinvisjon, nevrale nettverk og dyp læring, kryptografi og til og med inntrengingsdeteksjon, 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 for dette fascinerende emnet.

Forskjellen mellom en GPU og en CPU

Lenge før høyoppløselig 3D-grafikk ble normen, hadde de fleste datamaskiner ingen GPU. I stedet utførte CPU alle instruksjonene til dataprogrammer ved å utføre grunnleggende aritmetikk, logisk, kontroll og inngang/utgang (I/O) operasjoner spesifisert i instruksjonene. Av denne grunn beskrives CPU ofte som hjernen til datamaskinen.

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

Grafikkortprodusent NVIDIA gir en enkel måte å forstå den grunnleggende forskjellen mellom en GPU og en CPU: “En CPU består av noen få 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 parallellbehandling i det hele tatt.

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

Som et resultat av den økende viktigheten av kunstig intelligens, har etterspørselen etter utviklere som forstår generell formål på en GPU, steget seg stigende.

Cuda kontra opencl kontra openacc

Fordi GPUer forstår beregningsproblemer når det.

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

Cuda

Opprinnelig utgitt av Nvidia i 2007, er CUDA (Compute Unified Device Architecture) det dominerende proprietære rammeverket i dag. "Med CUDA kan utviklere dramatisk fremskynde databehandlingsapplikasjoner ved å utnytte kraften til GPUer," beskriver rammen NVIDIA.

Utviklere kan ringe CUDA fra programmeringsspråk som C, C ++, Fortran eller Python uten ferdigheter i grafikkprogrammering. Dessuten inneholder CUDA-verktøyet fra NVIDIA alt utviklere må begynne å lage GPU-akselererte applikasjoner som i stor grad overgår sine 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, royalty-frie standarden for tverrplattform, parallell programmering. I følge Khronos -gruppen 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 nevrale nettverkstrening og inferencing.”

OpenCL er så langt 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, og gjør det Ekstremt allsidig. OpenCL definerer et C-lignende språk for å skrive programmer, men tredjeparts API-er eksisterer for andre programmeringsspråk og plattformer som Python eller Java.

OpenAcc

OpenACC er den yngste programmeringsstandarden for parallell databehandling beskrevet i denne artikkelen. Det 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 ytelse-bærbar parallell programmeringsmodell designet for forskere og ingeniører som er interessert i modell.,”Stater OpenACC på sin offisielle hjemmeside.

Utviklere som er interessert i OpenACC kan kommentere C, C ++ og Fortran kildekode for å fortelle GPU 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 dataplattformene avhenger av dine mål og miljøet du jobber i. For eksempel er CUDA mye brukt i akademia, og det anses også for å være den enkleste å lære. OpenCL er den desidert 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

https: // linuxhint.com/gpu-programmering-python/

https: // linuxhint.com/gpu-programmering-cpp/

Videre lesning

For å bli kjent med CUDA, anbefaler vi at du følger instruksjonene i CUDA Quick Start Guide, som forklarer hvordan du får CUDA i gang på Linux, Windows og MacOS. AMDs OpenCL-programmeringsguide gir en fantastisk, dyptgående oversikt over OpenCL, men den forutsetter at leseren er kjent med de tre første kapitlene i OpenCL-spesifikasjonen. OpenACC tilbyr en tretrinns introduksjonsopplæring designet for å demonstrere hvordan man kan dra nytte av GPU-programmering, og mer informasjon finner du i OpenACC-spesifikasjonen.