Architettura del dispositivo unificata di calcolo

Architettura del dispositivo unificata di calcolo Descrizione dell'immagine CUDA.png.

Informazione
Sviluppato da Nvidia
Prima versione 23 giugno 2007
Ultima versione 11.2.2 (marzo 2021)
Sistema operativo Microsoft Windows , Linux e macOS
genere Linguaggio di programmazione
Licenza Gratuito
Sito web developer.nvidia.com/cuda-zone

CUDA (inizialmente acronimo di Compute Unified Device Architecture ) è una tecnologia di GPGPU ( General-Purpose Computing on Graphics Processing Units ), ovvero che utilizza un processore grafico (GPU) per eseguire calcoli generali al posto del core del processore (CPU). Infatti, questi processori comprendono comunemente l'ordine di mille circuiti di calcolo operanti tipicamente a 1  GHz , che rappresenta un potenziale molto maggiore di un processore centrale a 4  GHz , anche se è multicore e multi-thread , se e solo se il calcolo da eseguire è parallelizzabile .

CUDA consente di programmare GPU C . È sviluppato da Nvidia , inizialmente per le sue schede grafiche GeForce Serie 8 , e utilizza un driver unificato utilizzando una tecnica di streaming .

Il primo kit di sviluppo per CUDA rilasciato il15 febbraio 2007.

Applicazioni

Tutto ciò che richiede un calcolo intensivo che può essere meshato in due o tre dimensioni, così come ciò che può essere suddiviso in calcoli indipendenti su fattori primi, come decifrazione del codice, calcoli strutturali, simulazione di fluidi, algoritmi di ricottura simulata, può essere eseguito in CUDA . , i calcoli econometrici su matrici molto grandi (le tecniche di suddivisione di queste matrici in blocchi consentono di parallelizzare ampiamente il prodotto) possono trarre vantaggio da CUDA. Il cracking delle password non fa eccezione.

Architetture riconosciute da CUDA

Architettura di Tesla

L'architettura Tesla , che secondo NVidia offre la potenza di calcolo di un supercomputer (4 teraflop in singola precisione, 80 gigaflop in doppia precisione) per una cifra di 10.000 dollari, è costruita su CUDA.

architettura pascal

L'architettura Pascal , introdotta nel 2016 con le schede GTX1080 e GTX1070 con 2560 core (incisione 16nm) e che utilizza GDDR5X overclockabile a 2,1 GHz, può essere utilizzata anche con CUDA. NVidia annuncia 11 teraflop in singola precisione.

Architettura Fermi (obsoleta)

L'architettura Fermi , introdotta nel 2010 con il GF100, è ora deprecata, con le versioni CUDA successive alla 8.0.x che non la supportano.

Programmazione

CUDA ha diverse particolarità rispetto alla programmazione in C, offrendo di eseguire calcoli generici su GPU:

Alcune realizzazioni combinano l'utilizzo del linguaggio Go , molto orientato alla programmazione di processi concorrenti e alla gestione della memoria senza perdite, con quello di CUDA.

Benefici

limiti

Esempi

Esempio con l'emulazione della carta

#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]); } }

Questo esempio funziona solo se emuliamo la scheda grafica perché non copiamo i dati sulla scheda.

Compilato da:

nvcc -deviceemu -o run prog.cu

Esempio con una scheda grafica NVidia

#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]); } }

Compilato da:

nvcc -o add_cuda add_cuda.cu

Note e riferimenti

  1. "  https://docs.nvidia.com/cuda/  "
  2. "  https://developer.nvidia.com/cuda-toolkit-archive  "
  3. (in) Anand Lal Shimpi e Wilson, Derek, "  GPU Nvidia GeForce 8800 (G80) riprogettate per DirectX 10  " , AnandTech,8 novembre 2006(consultato il 16 maggio 2015 ) .
  4. (in) "  http://news.developer.nvidia.com/2007/02/cuda_for_gpu_co.html  " ( ArchivioWikiwixArchive.isGoogle • Cosa fare? ) , Su Nvidia .
  5. "  Cryptohaze  " , su SourceForge (consultato il 13 agosto 2020 ) .
  6. https://hpcugent.github.io/easybuild/files/FOSDEM14/FOSDEM14_HPC_devroom_14_GoCUDA.pdf

Vedi anche

Articoli Correlati

Prodotti della concorrenza

link esterno

Installazione di CUDA in base ai sistemi operativi Architettura CUDA