Arquitetura de dispositivo unificado de computação

Arquitetura de dispositivo unificado de computação Descrição da imagem CUDA.png.

Em formação
Desenvolvido por Nvidia
Primeira versão 23 de junho de 2007
Última versão 11.2.2 (Março de 2021)
Sistema operacional Microsoft Windows , Linux e macOS
Modelo Linguagem de programação
Licença freeware
Local na rede Internet developer.nvidia.com/cuda-zone

CUDA (inicialmente a sigla para Compute Unified Device Architecture ) é uma tecnologia de GPGPU ( General-Purpose Computing on Graphics Processing Units ), ou seja, usa um processador gráfico (GPU) para realizar cálculos gerais em vez do núcleo do processador (CPU). Na verdade, esses processadores comumente compreendem da ordem de mil circuitos de computação normalmente operando a 1  GHz , o que representa um potencial muito maior do que um processador central a 4  GHz , mesmo que seja multicore e multi-threaded , se e somente se o cálculo a ser realizada é paralelizável .

CUDA permite programar GPU C . Ele é desenvolvido pela Nvidia , inicialmente para suas placas de vídeo GeForce 8 Series , e usa um driver unificado usando uma técnica de streaming .

O primeiro kit de desenvolvimento para CUDA lançado em15 de fevereiro de 2007.

Formulários

Qualquer coisa que requeira computação intensiva que pode ser combinada em duas ou três dimensões, bem como o que pode ser dividido em cálculos independentes em fatores principais, como quebra de código, cálculos estruturais, simulação de fluido, algoritmos de recozimento simulado, pode ser feito em CUDA . , cálculos econométricos em matrizes muito grandes (técnicas para dividir essas matrizes em blocos permitem que o produto seja amplamente paralelizado) podem tirar proveito do CUDA. A quebra de senha não é exceção.

Arquiteturas reconhecidas por CUDA

Arquitetura Tesla

A arquitetura Tesla , que segundo a NVidia oferece o poder de computação de um supercomputador (4 teraflops em precisão simples, 80 gigaflops em precisão dupla) por um valor de 10.000 dólares, é construída em CUDA.

Arquitetura Pascal

A arquitetura Pascal , introduzida em 2016 com as placas GTX1080 e GTX1070 com 2560 núcleos (gravação de 16nm) e que usa GDDR5X com overclock a 2,1 GHz, também pode ser usada com CUDA. NVidia anuncia 11 teraflops em precisão simples.

Arquitetura Fermi (obsoleta)

A arquitetura Fermi , introduzida em 2010 com o GF100, agora está obsoleta, com versões CUDA posteriores a 8.0.x sem suporte.

Programação

CUDA tem várias particularidades em relação à programação C, oferecendo a realização de cálculos genéricos em GPUs:

Algumas realizações combinam o uso da linguagem Go , muito orientada para a programação de processos concorrentes e o gerenciamento de memória sem vazamentos, com a do CUDA.

Benefícios

Limites

Exemplos

Exemplo com emulação de cartão

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

Este exemplo só funciona se emularmos a placa gráfica porque não copiamos os dados na placa.

Compilado por:

nvcc -deviceemu -o run prog.cu

Exemplo com uma placa gráfica 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]); } }

Compilado por:

nvcc -o add_cuda add_cuda.cu

Notas e referências

  1. "  https://docs.nvidia.com/cuda/  "
  2. "  https://developer.nvidia.com/cuda-toolkit-archive  "
  3. (em) Anand Lal Shimpi e Wilson, Derek, "  GPUs Nvidia's GeForce 8800 (G80) Re-arquitetadas para DirectX 10  " , AnandTech,8 de novembro de 2006(acessado em 16 de maio de 2015 ) .
  4. (in) "  http://news.developer.nvidia.com/2007/02/cuda_for_gpu_co.html  " ( ArquivoWikiwixArchive.isGoogle • O que fazer? ) , Na Nvidia .
  5. "  Cryptohaze  " , no SourceForge (acessado em 13 de agosto de 2020 ) .
  6. https://hpcugent.github.io/easybuild/files/FOSDEM14/FOSDEM14_HPC_devroom_14_GoCUDA.pdf

Veja também

Artigos relacionados

Produtos concorrentes

links externos

Instalação de CUDA de acordo com os sistemas operacionais Arquitetura CUDA