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
Veja também: GPU
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
- push-relabel algoritmo de fluxo máximo
- rápido algoritmos de ordenação de grandes listas
- bidimensional ondulação transformar
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).
|
|
|
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 |
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
- Fortran - FORTRAN CUDA , CUDA IGP Fortran Compiler
- Lua - KappaCUDA
- IDL - GPULib
- Mathematica - CUDALink
- MATLAB - Toolbox Computação Paralela e Server Computação Distribuída [16] , bem como pacotes do partido como 3 Jacket .
- . NET - CUDA.NET
- Perl - KappaCUDA , CUDA:: Minimal
- Python - PyCUDA KappaCUDA
- Rubi - KappaCUDA
- Java - jCUDA , JCuda , JCublas , JCufft
- Haskell - Data.Array.Accelerate
- . NET - CUDAfy.NET do kernel NET e código de host, CURAND, CUBLAS, CUFFT..
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
- Renderização de gráficos 3D acelerados
- Interconversão acelerado de formatos de arquivos de vídeo
- Aceleração de criptografia , descriptografia e compressão
- Cálculos distribuídos, tais como a previsão da conformação nativa de proteínas
- Simulações de análises clínicas, por exemplo de realidade virtual baseado em CT e MRI digitalizar imagens.
- Simulações físicas, em especial em dinâmica de fluidos .
- Real Time Simulation OptiTex.com Cloth - Simulação em Tempo Real Cloth
- Search for Extra-Terrestrial Intelligence (SETI @ Home) programa
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.
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.
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