skip to main | skip to sidebar
Loading

terça-feira, 23 de agosto de 2011

CUDA

CUDA ou Compute Unified Device Architecture é uma arquitetura de computação paralela desenvolvida pela Nvidia . CUDA é o motor de computação em Nvidia unidades de processamento gráfico (GPUs), que é acessível para os desenvolvedores de software por meio de variantes de línguas de programação padrão da indústria. Programadores usam 'C para o CUDA (C com extensões Nvidia e certas restrições), compilado através de um Pathscale Open64 C compilador, para algoritmos de código para execução no GPU. Partes arquitetura CUDA uma gama de interfaces computacionais com dois concorrentes, o Grupo Khronos 's OpenCL  e da Microsoft DirectCompute invólucros de terceiros também estão disponíveis para Python , Perl , Fortran , Java , rubi , Lua , MATLAB e IDL , e suporte nativo existe no Mathematica .
CUDA dá aos desenvolvedores acesso ao conjunto de instruções virtuais e memória do paralelo computacional elementos em GPUs CUDA. Usando CUDA, o mais recente Nvidia GPUs se tornam acessíveis para a computação como CPUs . Ao contrário de CPUs no entanto, GPUs têm uma arquitetura de processamento paralelo que enfatiza executar tantas threads simultâneas lentamente, em vez de executar uma única linha muito rapidamente. Esta abordagem de resolução de problemas de uso geral em GPUs é conhecida como GPGPU .
No jogo de computador da indústria, além de renderização de gráficos, as GPUs são usados ​​em cálculos de física do jogo (efeitos físicos, como detritos, fumaça, fogo, líquidos); exemplos incluem PhysX e bala . CUDA também tem sido usada para acelerar a não-gráfico aplicações em biologia computacional , criptografia e outros campos por uma ordem de magnitude ou mais.  Um exemplo disso é o BOINC computação distribuída cliente. 
CUDA fornece tanto um baixo nível API e uma API de alto nível. Inicial CUDA SDK foi tornado público em 15 de fevereiro de 2007, para Microsoft Windows e Linux . Mac OS X suporte mais tarde foi adicionado na versão 2.0,  que substitui o beta lançado 14 de fevereiro de 2008.  CUDA da Nvidia funciona com todos os GPUs a partir da série G8x, incluindo GeForce , Quadro e Tesla linha. Nvidia afirma que programas desenvolvidos para a série G8x também irá funcionar sem modificações em todas as placas de vídeo Nvidia futuro, devido a compatibilidade binária.


Antecedentes

A GPU é uma empresa especializada processador desenhado para responder às demandas de tempo real de alta resolução gráfica 3D computar tarefas intensivas. GPUs modernas evoluíram em paralelo altamente multi core sistemas que permitam a manipulação muito eficiente de grandes blocos de dados. Este projeto é mais eficaz do que de propósito geral CPUs para algoritmos quando o tratamento de grandes blocos de dados é feito em paralelo, como
Por exemplo, a natureza paralela de dinâmica molecular simulações é adequado para a implementação CUDA. 

Vantagens

CUDA tem várias vantagens sobre computação tradicional finalidade geral de GPUs (GPGPU) usando APIs gráficas.
  • Espalhados lê - código pode ler a partir de endereços arbitrários na memória.
  • Memória compartilhada - CUDA expõe um jejum de memória compartilhada região (até 48KB por Multi-Processor) que podem ser compartilhados entre threads. Isto pode ser usado como um cache do usuário de gestão, permitindo maior largura de banda do que é possível usando pesquisas de textura. 
  • Downloads mais rápidos e readbacks de e para a GPU
  • Suporte completo para operações com números inteiros e bit a bit, incluindo pesquisas textura inteiro.

Limitações

  • Renderização textura não é suportado (CUDA 3.2 e até aborda esta introduzindo "superfície escreve" para cudaArrays, a estrutura base de dados opaco).
  • Cópia entre o hospedeiro ea memória do dispositivo podem ter um impacto no desempenho devido à largura de banda e latência sistema de ônibus (isso pode ser parcialmente aliviado com transferências de memória assíncrona, manuseados pelo motor da GPU DMA)
  • Tópicos deve ser executado em grupos de pelo menos 32 para o melhor desempenho, com o número total de segmentos que chegavam aos milhares. Ramos no código do programa não impactar o desempenho significativamente, desde que cada um dos 32 tópicos leva o mesmo caminho de execução, o SIMD modelo de execução torna-se uma limitação significativa para qualquer tarefa inerentemente divergente (por exemplo, percorrendo um espaço de particionamento estrutura de dados durante ray tracing ).
  • Ao contrário OpenCL , CUDA ativado GPUs estão apenas disponíveis das Nvidia 
  • Válido C / C + + pode às vezes ser marcada e evitar a compilação devido a técnicas de otimização do compilador é obrigado a empregar a usar recursos limitados.
  • CUDA (com capacidade de calcular 1.x) usa uma recursão-free, função de ponteiro-livre subconjunto da linguagem C, além de algumas extensões simples. No entanto, um único processo deve executar espalhados por múltiplos espaços de memória separado, ao contrário de outros ambientes de execução C língua.
  • CUDA (com capacidade de calcular 2.x) permite que um subconjunto de C + + funcionalidade de classe, por exemplo, as funções de membro não pode ser virtual (esta restrição será removida em alguma versão futura) [Ver CUDA Guia de programação C 3.1 - Apêndice D.6].
  • Precisão dupla (capacidade de computação CUDA 1.3 e acima) desviar-se dos 754 IEEE padrão: volta-a-mais próximo, mesmo se o modo de arredondamento suportado apenas para recíprocas, divisão e raiz quadrada. Em precisão simples , denormals e sinalização NaNs não são suportadas; apenas dois IEEE arredondamento modos são suportados (chop e volta-a-par mais próximo), e esses são especificados com base na instrução por, em vez de em uma palavra de controle e da precisão de divisão / raiz quadrada é ligeiramente inferior ao de precisão simples.

suportados GPUs

Calcular tabela de capacidade (versão do CUDA suportado) pela GPU e cartão. Também disponível directamente a partir Nvidia
Computar
capacidade
(Versão)
GPUs Cartões
1,0 G80, G92, G92b, G94, G94b, GF108, GF106 GeForce 8800GTX/Ultra, 9400GT, 9600GT, 9800GT, Tesla C/D/S870, FX4/5600, 360M, GT 420, GT 430, GT 440
1,1 G86, G84, G98, G96, G96b, G94, G94b, G92, G92b GeForce 8400GS/GT, 8600GT/GTS, 8800GT/GTS, 9600 GSO, 9800GTX/GX2, GTS 250, GT 120/30/40, FX 4 / 570, 3 / 580, 17/18/3700, 4700x2, 1xxM, 32 / 370M, 3/5/770M, 16/17/27/28/36/37/3800M, NVS420/50
1,2 GT218, GT216, GT215 GeForce 210, GT 220/40, LP FX380, 1800M, 370/380M, NVS 2/3100M
1,3 GT200, GT200b GeForce GTX 260, GTX 275, GTX 280, GTX 285, GTX 295, Tesla C/M1060, S1070, a Quadro CX, FX 3/4/5800
2,0 GF100, GF110 GeForce (GF100) GTX 465, GTX 470, GTX 480, Tesla C2050, C2070, S/M2050/70, Quadro Plex 7000, GeForce (GF110) GTX570, GTX580, GTX590
2,1 GF104, GF114, GF116 GeForce GTS 450, GTX 460, GTX 550 Ti, GTX 560, GTX 560 Ti, 500M, Quadro 600, 2000, 4000, 5000, 6000
Uma tabela de dispositivos oficialmente apoio CUDA (Note-se que muitas aplicações requerem pelo menos 256 MB de VRAM dedicada, e alguns recomendam pelo menos 96 núcleos CUDA).
Nvidia GeForce
GeForce GTX 590
GeForce GTX 580
GeForce GTX 570
GeForce GTX 560 Ti
GeForce GTX 560
GeForce GTX 550 Ti
GeForce GTX 480
GeForce GTX 470
GeForce GTX 465
GeForce GTX 460
GeForce GTX 460 SE
GeForce GTS 450
GeForce GT 440
GeForce GT 430
GeForce GT 420
GeForce GTX 295
GeForce GTX 285
GeForce GTX 280
GeForce GTX 275
GeForce GTX 260
GeForce GTS 250
GeForce GTS 240
GeForce GT 240
GeForce GT 220
GeForce 210/G210
GeForce GT 140
GeForce 9800 GX2
GeForce 9800 GTX +
GeForce 9800 GTX
GeForce 9800 GT
GeForce 9600 GSO
GeForce 9600 GT
GeForce 9500 GT
GeForce 9400 GT
GeForce 9400 mGPU
GeForce 9300 mGPU
GeForce 9100 mGPU
GeForce 8800 Ultra
GeForce 8800 GTX
GeForce 8800 GTS
GeForce 8800 GT
GeForce 8800 GS
GeForce 8600 GTS
GeForce 8600 GT
GeForce 8600 MGT
GeForce 8500 GT
GeForce 8400 GS
GeForce 8300 mGPU
GeForce 8200 mGPU
GeForce 8100 mGPU
Nvidia GeForce móvel
GeForce GT 555m
GeForce GT 550M
GeForce GT 540M
GeForce GT 525 milhões
GeForce GT 520M
GeForce GTX 480M
GeForce GTX 470M
GeForce GTX 460M
GeForce GT 445m
GeForce GT 435m
GeForce GT 425m
GeForce GT 420m
GeForce GT 415M
GeForce GTX 285M
GeForce GTX 280M
GeForce GTX 260M
GeForce GTS 360M
GeForce GTS 350M
GeForce GTS 260M
GeForce GTS 250M
GeForce GT 335M
GeForce GT 330M
GeForce GT 325M
GeForce GT 320M
GeForce 310M
GeForce GT 240M
GeForce GT 230M
GeForce GT 220M
GeForce G210M
GeForce GTS 160M
GeForce GTS 150M
GeForce GT 130M
GeForce GT 120M
GeForce G110M
GeForce G105M
GeForce G103M
GeForce G102M
GeForce G100
GeForce 9800M GTX
GeForce 9800M GTS
GeForce 9800M GT
GeForce 9800M GS
GeForce 9700M GTS
GeForce 9700M GT
GeForce 9650M GT
GeForce 9650M GS
GeForce 9600M GT
GeForce 9600M GS
GeForce 9500M GS
GeForce 9500M G
GeForce 9400M G
GeForce 9300M GS
GeForce 9300M G
GeForce 9200M GS
GeForce 9100M G
GeForce 8800M GTX
GeForce 8800M GTS
GeForce 8700M GT
GeForce 8600M GT
GeForce 8600M GS
GeForce 8400M GT
GeForce 8400M GS
GeForce 8400M G
GeForce 8200M G
Nvidia Quadro
Quadro 6000
Quadro 5000
Quadro 4000
Quadro 2000
Quadro 600
Quadro FX 5800
Quadro FX 5600
Quadro FX 4800
Quadro FX 4700 X2
Quadro FX 4600
Quadro FX 3800
Quadro FX 3700
Quadro FX 1800
Quadro FX 1700
Quadro FX 580
Quadro FX 570
Quadro FX 380
Quadro FX 370
Quadro NVS 450
Quadro NVS 420
Quadro NVS 295
Quadro NVS 290
Quadro Plex 1000 Modelo IV
Quadro Plex 1000 S4 Modelo
Nvidia Quadro móvel
Quadro 5000M
Quadro FX 3800M
Quadro FX 3700M
Quadro FX 3600M
Quadro FX 2800M
Quadro FX 2700M
Quadro FX 1800M
Quadro FX 1700M
Quadro FX 1600M
Quadro FX 880M
Quadro FX 770M
Quadro FX 570M
Quadro FX 380M
Quadro FX 370M
Quadro FX 360M
Quadro NVS 320M
Quadro NVS 160M
Quadro NVS 150M
Quadro NVS 140M
Quadro NVS 135M
Quadro NVS 130M
Nvidia Tesla
Tesla C2050/2070
Tesla M2050/M2070
Tesla S2050
Tesla S1070
Tesla M1060
Tesla C1060
Tesla C870
Tesla D870
Tesla S870

Versão características e especificações

Suporte para o recurso (recursos não listados são
suporte para todas as capacidades de computação)
Calcular a capacidade (versão)
1,0 1,1 1,2 1,3 2.x
Grade 3D de bloco de rosca Não Sim
Integer funções atômicas que operam em
Palavras de 32 bits na memória global
Não Sim
Integer funções atômicas que operam em
64-bit palavras em memória global
Não Sim
Integer funções atômicas que operam em
Palavras de 32 bits na memória compartilhada
Urdidura funções voto
Precisão dupla operações de ponto flutuante Não Sim
De ponto flutuante operacional além atômicas sobre
Palavras de 32 bits na memória global e partilhada
Não Sim
_ballot ()
_threadfence_system ()
_syncthreads_count (),
_syncthreads_and (),
_syncthreads_or ()
Funções de superfície
Especificações técnicas Calcular a capacidade (versão)
1,0 1,1 1,2 1,3 2.x
Dimensionalidade máximo de grade de blocos de thread 2 3
Máximo de x, y blocos de thread, ou z dimensão de uma grade de 65535
Dimensionalidade máximo de bloco de rosca 3
Máximo x ou y dimensão de um bloco 512 1024
Z máxima dimensão de um bloco 64
Número máximo de threads por bloco 512 1024
Tamanho da urdidura 32
Número máximo de blocos de residente por multiprocessador 8
Número máximo de warps residente por multiprocessador 24 32 48
Número máximo de threads de residente por multiprocessador 768 1024 1536
Número de registradores de 32 bits por multiprocessador 8 K 16 K 32 K
Quantidade máxima de memória compartilhada por múltiplos 16 KB 48 KB
Número de bancos de memória compartilhada 16 32
Quantidade de memória local por thread 16 KB 512 KB
Tamanho da memória constante 64 KB
Conjunto de cache de trabalho por multiprocessador de memória constante 8 KB
Conjunto de cache de trabalho por multiprocessador de memória de textura Dependentes do dispositivo, entre 6 e 8 KB KB
Largura máxima de textura 1D
referência vinculado a um conjunto CUDA
8192 32768
Largura máxima de textura 1D
de referência ligado à memória linear
2 27
Largura máxima e número de camadas
para uma referência textura 1D em camadas
8192 x 512 16384 x 2048
Largura máxima e altura para 2D
referência textura obrigado a
memória linear ou uma matriz CUDA
65536 x 32768 65536 x 65535
Largura máxima, altura e número
de camadas de uma referência de textura 2D em camadas
8192 x 8192 x 512 16384 x 16384 x 2048
Largura máxima, altura e profundidade
para uma referência textura 3D obrigado a linear
memória ou uma matriz CUDA
2048 x 2048 x 2048
Número máximo de texturas que
pode ser vinculado a um kernel
128
Largura máxima para uma superfície 1D
referência vinculado a um conjunto CUDA
Não
suportados
8192
Largura máxima e altura para um 2D
referência de superfície acoplado a um conjunto CUDA
8192 x 8192
Número máximo de superfícies que
pode ser vinculado a um kernel
8
Número máximo de instruções por
núcleo
2000000
Para mais informações visite este leia também Nvidia CUDA de guia de programação. 

Exemplo

Este exemplo de código em C + + carrega uma textura de uma imagem em um array na GPU:
 void foo () {cudaArray * cu_array;  2, cudaReadModeElementType> textura tex; / / array Alocar cudaChannelFormatDesc description = cudaCreateChannelDesc  (); image / Copy /; cudaMallocArray (& cu_array, e descrição, altura, largura) dados para array cudaMemcpyToArray (cu_array, imagem, largura * altura * sizeof (float), cudaMemcpyHostToDevice); parâmetros / / Set textura  não normalizar coordenadas / / Bind a matriz para a textura cudaBindTextureToArray (tex, cu_array); / Run / kernel dim3 blockDim (16, 16, 1); dim3  Desvincular a matriz da cudaUnbindTexture textura (tex);} / / fim 
Abaixo está um exemplo dado em Python que calcula o produto de duas matrizes na GPU. As ligações de linguagem não-oficial Python pode ser obtido a partir PyCUDA .
 
 importação pycuda. ​​compilador como comp
 importação pycuda driver. drv como
 importação numpy
 importação pycuda. ​​autoinit
 
 mod = comp SourceModule. ("" " 
  __global__ vazio multiply_them (float * dest, float * a, float * b) 
  { 
    const int i = threadIdx.x; 
    dest [i] = a [i] * b [i]; 
  } 
  "" ")
 
 multiply_them = mod. get_function ("multiply_them")
 
 = uma numpy. aleatória. randn (400). astype (numpy. float32)
 b = numpy. aleatória. randn (400). astype (numpy. float32)
 
 dest = numpy. zeros_like (a)
 multiply_them (
         drv. Out (dest), drv. In (a), drv. In (b),
         bloco = (400, 1, 1))
 
 imprimir dest-a * b
Adicionais bindings Python para simplificar as operações de multiplicação de matrizes pode ser encontrado no programa pycublas .
 
 importação numpy
 pycublas de importação CUBLASMatrix
 A CUBLASMatrix = (numpy. mat ([[1, 2, 3], [4, 5, 6]], numpy. Float32))
 B = CUBLASMatrix (numpy. mat ([[2, 3], [4, 5], [6, 7]], numpy. Float32))
 C = A * B
 imprimir C. np_mat ()

Língua bindings

arquiteturas atual CUDA

A atual geração de arquitetura CUDA (codinome: " Fermi "), que é padrão em lançado da Nvidia ( GeForce 400 Series [GF100] (GPU) 2010/03/27)  GPU é projetado a partir do solo até suporte nativo para mais idiomas de programação tais como C + + . Ele tem oito vezes o pico de precisão dupla de desempenho de ponto flutuante em relação ao da geração anterior da Nvidia Tesla GPU. Ele também introduziu vários novos recursos  , incluindo:
  • até 1024 núcleos CUDA e 3,0 bilhões de transistores na GTX 590
  • Nvidia Parallel tecnologia DataCache
  • Nvidia motor GigaThread
  • ECC de memória suporte
  • Suporte nativo para o Visual Studio

usos atual e futuro da arquitetura CUDA

Fonte: http://en.wikipedia.org/wiki/CUDA

O que é CUDA ?


CUDA é a arquitetura de computação paralela NVIDIA. Ele permite um aumento dramático no desempenho de computação, aproveitando o poder da GPU.
Com milhões de GPUs habilitadas para CUDA vendidas até agora, os desenvolvedores de software, cientistas e pesquisadores estão encontrando abrangente usa para CUDA, incluindo processamento de imagem e vídeo, biologia computacional e química, simulação de dinâmica de fluidos, CT imagem reconstrução, análise sísmica, ray tracing , e muito mais.

Fundo

Computação está evoluindo de "processamento central" na CPU para "co-processamento" na CPU e GPU. Para ativar esse novo paradigma de computação, NVIDIA CUDA inventou a arquitetura de computação paralela que já está sendo distribuído na GeForce, ION, Quadro, e GPUs Tesla, que representa uma base instalada significativa para desenvolvedores de aplicativos.
No mercado de consumo, quase todas as aplicações de vídeo grandes consumidores tem sido ou serão em breve, acelerada pela CUDA, incluindo produtos da Elemental Technologies, MotionDSP e, LoiLo Inc.
CUDA foi entusiasticamente recebido na área da pesquisa científica. Por exemplo, agora CUDA acelera AMBER, um programa de simulação de dinâmica molecular usado por mais de 60 mil pesquisadores no meio acadêmico e as empresas farmacêuticas em todo o mundo para acelerar a descoberta de novos medicamentos.
No mercado financeiro, Numerix e CompatibL CUDA anunciou apoio para uma nova aplicação risco de contraparte e alcançou um aumento de velocidade de 18X. Numerix é utilizado por quase 400 instituições financeiras.
Um indicador da adoção CUDA é a rampa da GPU Tesla para computação GPU. Existem hoje mais de 700 grupos GPU instalada ao redor do mundo em empresas da Fortune 500 que vão desde a Schlumberger ea Chevron no sector da energia ao BNP Paribas no setor bancário.
E com os lançamentos recentes do Microsoft Windows 7 eo Snow Leopard da Apple, computação via GPU está indo mainstream. Nestes novos sistemas operacionais, a GPU não será apenas o processador gráfico, mas também um processador paralelo de propósito geral acessíveis a qualquer aplicação.
Existem várias maneiras de explorar o poder da GPU Computing, escrever código em CUDA C / C + + , OpenCL , DirectCompute , CUDA Fortran e outros.
Também é possível se beneficiar de aceleração GPU Compute usando bibliotecas poderosas, como o MATLAB, CULA e outros .
Muitos amplamente adotado códigos comerciais têm sido desenvolvidos para uso GPU Computing, visite nossa página de soluções verticais para descobrir se o software que você usa já foi portado.

0 comentários:

Postar um comentário

2leep.com