GPU

Introduktion till GPU-programmering

Introduktion till GPU-programmering

Allmän databehandling på en GPU (Graphics Processing Unit), bättre känd som GPU-programmering, är användningen av en GPU tillsammans med en CPU (Central Processing Unit) för att påskynda beräkning i applikationer som traditionellt endast hanteras av CPU.Även om GPU-programmering har varit praktiskt genomförbar endast under de senaste två decennierna, omfattar dess applikationer praktiskt taget alla branscher. GPU-programmering har till exempel använts för att påskynda bearbetning av video, digital bild och ljudsignal, statistisk fysik, vetenskaplig databehandling, medicinsk bildbehandling, datorsyn, neurala nätverk och djupinlärning, kryptografi och till och med intrångsdetektering, bland många andra områden.

Den här artikeln fungerar som en teoretisk introduktion riktad till dem som vill lära sig att skriva GPU-accelererade program såväl som de som bara har ett allmänt intresse för detta fascinerande ämne.

Skillnaden mellan en GPU och en CPU

En lång tid innan högupplöst 3D-grafik med hög kvalitet blev normen hade de flesta datorer ingen GPU. Istället utförde CPU alla instruktioner från datorprogram genom att utföra de grundläggande aritmetiska, logiska, kontroll- och in / ut-operationerna (I / O) som anges i instruktionerna. Av denna anledning beskrivs CPU: n ofta som datorns hjärna.

Men de senaste åren har GPU, som är utformad för att påskynda skapandet av bilder för utdata till en visningsenhet, ofta hjälpt CPU: n att lösa problem i områden som tidigare hanterades enbart av CPU: n.

Grafikkortstillverkaren Nvidia ger ett enkelt sätt att förstå den grundläggande skillnaden mellan en GPU och en CPU: ”En processor består av några kärnor optimerade för sekventiell seriell bearbetning medan en GPU har en massivt parallell arkitektur bestående av tusentals mindre, mer effektiva kärnor utformade för att hantera flera uppgifter samtidigt.”

Förmågan att hantera flera uppgifter samtidigt gör GPU: er mycket lämpliga för vissa uppgifter, som att söka efter ett ord i ett dokument, medan andra uppgifter, som att beräkna Fibonacci-sekvensen, inte gynnas av parallell bearbetning alls.

Men bland de uppgifter som avsevärt drar nytta av parallell bearbetning är djupt lärande, en av de mest eftertraktade färdigheterna inom teknik idag. Djupinlärningsalgoritmer härmar aktiviteten i lager av neuroner i neokortexen, så att maskiner kan lära sig att förstå språk, känna igen mönster eller komponera musik.

Som ett resultat av den ökande betydelsen av artificiell intelligens har efterfrågan på utvecklare som förstår allmänna datorer på en GPU ökat.

CUDA Versus OpenCL Versus OpenACC

Eftersom grafikprocessorer förstår beräkningsproblem i termer av grafiska primitiva, krävdes tidiga ansträngningar för att använda grafikprocessorer som processorer för allmänt ändamål omformulering av beräkningsproblem på grafikkortens språk.

Lyckligtvis är det nu mycket lättare att göra GPU-accelererad dator tack vare parallella datorplattformar som Nvidias CUDA, OpenCL eller OpenACC. Dessa plattformar tillåter utvecklare att ignorera språkbarriären som finns mellan CPU: n och GPU: n och istället fokusera på högre koncept.

CUDA

Ursprungligen släppt av Nvidia 2007, är CUDA (Compute Unified Device Architecture) det dominerande proprietära ramverket idag. "Med CUDA kan utvecklare påskynda datorapplikationer dramatiskt genom att utnyttja kraften hos GPU: er," beskriver ramverket Nvidia.

Utvecklare kan ringa CUDA från programmeringsspråk som C, C ++, Fortran eller Python utan några kunskaper i grafisk programmering. Dessutom innehåller CUDA Toolkit från Nvidia allt som utvecklare behöver för att börja skapa GPU-accelererade applikationer som kraftigt överträffar deras CPU-bundna motsvarigheter.

CUDA SDK är tillgänglig för Microsoft Windows, Linux och macOS. CUDA-plattformen stöder också andra beräkningsgränssnitt, inklusive OpenCL, Microsofts DirectCompute, OpenGL Compute Shaders och C ++ AMP.

OpenCL

Ursprungligen släppt av Khronos Group 2009, är OpenCL den mest populära öppna, royaltyfria standarden för plattformsplattform, parallell programmering. Enligt Khronos-gruppen förbättrar OpenCL hastigheten och responsen hos ett brett spektrum av applikationer i många marknadskategorier, inklusive spel- och underhållningstitlar, vetenskaplig och medicinsk programvara, professionella kreativa verktyg, synbehandling och neuralt nätverksutbildning och inferens.”

OpenCL har hittills implementerats av Altera, AMD, Apple, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx och ZiiLABS, och det stöder alla populära operativsystem på alla större plattformar, vilket gör det extremt mångsidig. OpenCL definierar ett C-liknande språk för att skriva program, men tredjeparts API finns för andra programmeringsspråk och plattformar som Python eller Java.

OpenACC

OpenACC är den yngsta programmeringsstandarden för parallell beräkning som beskrivs i den här artikeln. Den släpptes ursprungligen 2015 av en grupp företag som består av Cray, CAPS, Nvidia och PGI (Portland Group) för att förenkla parallell programmering av heterogena CPU / GPU-system.

”OpenACC är en användardriven, direktbaserad, prestationsbärbar parallell programmeringsmodell utformad för forskare och ingenjörer som är intresserade av att porta sina koder till en mängd olika heterogena HPC-hårdvaruplattformar och arkitekturer med betydligt mindre programmeringsansträngning än vad som krävs med en låg nivå modell.,”Säger OpenACC på sin officiella webbplats.

Utvecklare som är intresserade av OpenACC kan kommentera källkoden C, C ++ och Fortran för att berätta för GPU: n vilka områden som ska accelereras. Målet är att tillhandahålla en modell för acceleratorprogrammering som är bärbar över operativsystem och olika typer av värdprocessorer och acceleratorer.

Vilken ska jag använda?

Valet mellan dessa tre parallella datorplattformar beror på dina mål och den miljö du arbetar i. Till exempel används CUDA i stor utsträckning i den akademiska världen, och det anses också vara det enklaste att lära sig. OpenCL är den överlägset mest bärbara parallella datorplattformen, även om program skrivna i OpenCL fortfarande behöver optimeras individuellt för varje målplattform.

Lär dig GPU-kodning på LinuxHint.com

GPU-programmering med Python

GPU-programmering med C++

Vidare läsning

För att bli bekant med CUDA rekommenderar vi att du följer instruktionerna i CUDA Quick Start Guide, som förklarar hur du kan få CUDA igång på Linux, Windows och macOS. AMDs OpenCL-programmeringsguide ger en fantastisk, djupgående översikt av OpenCL, men den antar att läsaren är bekant med de tre första kapitlen i OpenCL-specifikationen. OpenACC erbjuder en introduktionshandledning i tre steg som är utformad för att visa hur man utnyttjar GPU-programmering, och mer information finns i OpenACC-specifikationen.

OpenTTD vs Simutrans
Att skapa din egen transportsimulering kan vara rolig, avkopplande och extremt lockande. Det är därför du måste se till att du testar så många spel so...
OpenTTD-handledning
OpenTTD är ett av de mest populära affärssimuleringsspelen där ute. I det här spelet måste du skapa en underbar transportaffär. Du kommer dock att bör...
SuperTuxKart för Linux
SuperTuxKart är en fantastisk titel som är utformad för att ge dig Mario Kart-upplevelsen gratis på ditt Linux-system. Det är ganska utmanande och rol...