Beregn enhetlig enhetsarkitektur

Beregn enhetlig enhetsarkitektur Beskrivelse av CUDA.png-bildet.

Informasjon
Utviklet av Nvidia
Første versjon 23. juni 2007
Siste versjon 11.2.2 (Mars 2021)
Operativsystem Microsoft Windows , Linux og macOS
Type Programmeringsspråk
Tillatelse Gratisprogramvare
Nettsted developer.nvidia.com/cuda-zone

CUDA (i utgangspunktet forkortelsen for Compute Unified Device Architecture ) er en teknologi for GPGPU ( General Purpose Computing on Graphics Processing Units ), det vil si å bruke en grafikkprosessor (GPU) for å utføre generelle beregninger i stedet for prosessorkjernen (CPU). Faktisk består disse prosessorene ofte i størrelsesorden tusen datakretser som vanligvis fungerer ved 1  GHz , noe som representerer et mye større potensial enn en sentral prosessor ved 4  GHz , selv om den er flerkjernet og flertrådet , hvis og bare hvis beregningen som skal utføres kan parallelliseres .

CUDA tillater programmering GPU C . Den er utviklet av Nvidia , opprinnelig for GeForce 8-serie grafikkort , og bruker en enhetlig driver ved hjelp av en streamingteknikk .

Det første utviklingssettet for CUDA utgitt den15. februar 2007.

applikasjoner

Alt som krever intensiv beregning som kan maskes i to eller tre dimensjoner, så vel som det som kan brytes ned i uavhengige beregninger på hovedfaktorer, som kodebryting, strukturelle beregninger, væskesimulering, simulerte glødningsalgoritmer, kan gjøres i CUDA . , økonometriske beregninger på veldig store matriser (teknikker for å dele disse matrisene i blokker gjør at produktet i stor grad kan parallelliseres) kan dra nytte av CUDA. Den passordknekking er intet unntak.

Arkitekturer anerkjent av CUDA

Tesla Architecture

Tesla- arkitekturen , som ifølge NVidia tilbyr datakraften til en superdatamaskin (4 teraflops i én presisjon, 80 gigaflops i dobbel presisjon) for en sum på 10.000 dollar, er bygget på CUDA.

Pascal arkitektur

Pascal- arkitekturen , introdusert i 2016 med GTX1080- og GTX1070-kortene med 2560 kjerner (16 nm gravering) og som bruker overklokkbar GDDR5X ved 2,1 GHz, kan også brukes med CUDA. NVidia kunngjør 11 teraflops i en enkelt presisjon.

Fermi-arkitektur (foreldet)

Fermi- arkitekturen , introdusert i 2010 med GF100, er nå avviklet, med CUDA-versjoner senere enn 8.0.x som ikke støtter den.

Programmering

CUDA har flere særegenheter sammenlignet med C-programmering, ved å tilby å utføre generiske beregninger på GPUer:

Noen realiseringer kombinerer bruken av Go- språket , veldig orientert om programmering av samtidige prosesser og styring av minne uten lekkasjer, med CUDA.

fordeler

Grenser

Eksempler

Eksempel med kortemulering

#include <stdio.h> #include <stdlib.h> #include <cuda.h> #include <cuda_runtime.h> __global__ void mykernel(float *A1, float *A2, float *R) { int p = threadIdx.x; R[p] = A1[p] + A2[p]; } int main() { float A1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; float A2[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90 }; float R[9]; // 9 additions, aucune boucle ! mykernel<<<1 ,9>>>(A1, A2, R); // sortie à l'ecran for (int i = 0; i < 9; i++) { printf("%f\n", R[i]); } }

Dette eksemplet fungerer bare hvis vi etterligner grafikkortet fordi vi ikke kopierer dataene på kortet.

Sammensatt av:

nvcc -deviceemu -o run prog.cu

Eksempel med et NVidia-grafikkort

#include <stdio.h> #include <stdlib.h> #include <cuda.h> #include <cuda_runtime.h> __global__ void mykernel(float *A1, float *A2, float *R) { int p = threadIdx.x; R[p] = A1[p] + A2[p]; } int main() { float A1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; float A2[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90 }; float R[9]; int taille_mem = sizeof(float) * 9; // on alloue de la memoire sur la carte graphique float *a1_device; float *a2_device; float *r_device; cudaMalloc((void**) &a1_device, taille_mem); cudaMalloc((void**) &a2_device, taille_mem); cudaMalloc((void**) &r_device, taille_mem); // on copie les donnees sur la carte cudaMemcpy(a1_device, A1, taille_mem, cudaMemcpyHostToDevice); cudaMemcpy(a2_device, A2, taille_mem, cudaMemcpyHostToDevice); //9 additions, aucune boucle ! mykernel<<<1, 9>>>(a1_device, a2_device, r_device); // on recupere le resultat cudaMemcpy(R, r_device, taille_mem, cudaMemcpyDeviceToHost); // sortie à l'ecran for(int i = 0; i < 9; i++) { printf("%f\n", R[i]); } }

Sammensatt av:

nvcc -o add_cuda add_cuda.cu

Merknader og referanser

  1. "  https://docs.nvidia.com/cuda/  "
  2. "  https://developer.nvidia.com/cuda-toolkit-archive  "
  3. (in) Anand Lal Shimpi og Wilson, Derek, "  Nvidias GeForce 8800 (G80) GPUer som er arkitektert for DirectX 10  " , AnandTech,8. november 2006(åpnet 16. mai 2015 ) .
  4. (in) "  http://news.developer.nvidia.com/2007/02/cuda_for_gpu_co.html  " ( ArkivWikiwixArchive.isGoogle • Hva skal jeg gjøre? ) , On Nvidia .
  5. "  Cryptohaze  " , på SourceForge (åpnes 13 august 2020 ) .
  6. https://hpcugent.github.io/easybuild/files/FOSDEM14/FOSDEM14_HPC_devroom_14_GoCUDA.pdf

Se også

Relaterte artikler

Konkurrentprodukter

Eksterne linker

Installasjon av CUDA i henhold til operativsystemer CUDA-arkitektur