Introdução NVIDIA CUDA é uma arquitetura de computação

Propaganda
Introdução
NVIDIA CUDA é uma arquitetura de computação paralela de propósito geral
que tira proveito do mecanismo de computação paralela das unidades de processamento
gráfico (GPUs) NVIDIA para resolver muitos problemas computacionais complexos em
uma fração do tempo necessário em uma CPU. Ela inclui a arquitetura de conjunto de
instruções CUDA ISA (Instruction Set Architecture) e o mecanismo de computação
paralela na GPU. Para programar segundo a arquitetura CUDA, os desenvolvedores
hoje em dia podem usar C - uma das mais amplamente utilizadas linguagens de
programação de alto nível, que pode ser então executada com alta performance em um
processador compatível com CUDA. Outras linguagens serão admitidas no futuro,
incluindo FORTRAN e C++.
Com 100 milhões de GPUs compatíveis com CUDA vendidas até o momento,
milhares de desenvolvedores de software já estão utilizando as ferramentas gratuitas de
desenvolvimento de software da CUDA para resolver problemas em uma variedade de
aplicativos profissionais ou domésticos, incluindo desde processamento de vídeos e
áudio e simulação de efeitos físicos, até exploração de gás e petróleo, design de
produtos, processamento de imagens na área médica e pesquisa científica. Com mais de
100 milhões de GPUs compatíveis com CUDA já implementadas, milhares de
desenvolvedores de software já estão utilizando as ferramentas gratuitas de
desenvolvimento de software da CUDA para acelerar aplicativos, incluindo desde
codificação de vídeo e áudio, até a exploração de gás e petróleo, design de produtos,
processamento de imagens na área médica e pesquisa científica.
Objetivo
Com o poder de processamento dos chips gráficos aumentando a cada dia – ao
ponto de serem mais rápidos do que processadores convencionais em operações
matemáticas – tem-se discutido já há algum tempo se os chips gráficos não poderiam
ser usados como processadores para a execução de programas. A idéia, conhecida como
GPGPU (General-Purpose Graphics Processing Unit ou Unidade de Processamento
Gráfico de Uso Geral), é direcionar para o chip gráfico cálculos que de outra maneira
seriam feitos pelo processador, aumentando assim o desempenho.
Características
Para direcionar para o chip gráfico os cálculos, o programador teria que saber
como programar um chip gráfico específico para que um programa pudesse ser
executado nele, e este programa não funcionaria em um chip gráfico diferente.
Para resolver este problema a NVIDIA lançou um compilador C para sua série
GeForce 8800, chamado CUDA. Com o CUDA qualquer programador pode facilmente
compilar seus programas escritos em C para usarem o poder de processamento do chip
gráfico do micro.
Dando um passo adiante, a NVIDIA lançou uma série de “placas de vídeo”
chamada Tesla. Essas “placas de vídeo” são equipadas com chips gráficos GeForce
8800, mas elas não produzem vídeo: elas foram desenvolvidas para serem usadas como
processadores, ou seja, para executarem programas.
Esses programas precisam ser compilados com o CUDA, obviamente. Dessa
forma usuários comuns não se beneficiarão desta tecnologia, ou seja, não ache que
instalando uma dessas placas no micro o desempenho de processamento aumentará
automaticamente.
Qualquer tipo de programa de cálculo pesado que faz muitas coisas em paralelo
podem se beneficiar de usar o GPGPU – se eles foram compilados para usar o chip
gráfico, obviamente. Isto inclui principalmente simulações (física, financeira, médica,
biológica e química, por exemplo).
Uma coisa muito interessante a respeito do CUDA é que você não precisa ter
uma placa Tesla instalada para usá-lo. Dessa forma um programador pode comprar
qualquer placa de vídeo da série GeForce 8800 e tentar ver se usando o chip gráfico em
vez do processador aumenta o desempenho da aplicação que ele está escrevendo. Se
funcionar bem, o programador pode pensar em comprar um sistema mais potente, ou
seja, uma solução Tesla.
Vantagens

CUDA tem várias vantagens sobre as tecnologias anteriores em suas GPUs
(GPGPU);

leitura dispersa - o código pode ler de endereços arbitrários na memória;

Memória compartilhada - CUDA expõe uma região de memória compartilhada
rápida (16KB em tamanho) que podem ser compartilhados entre threads. Isso pode ser
usado como um cache de usuário, permitindo maior largura de banda do que é possível
utilizando textura lookups;

Downloads mais rápidos e readbacks de e para a GPU;

Suporte completo para operações de números inteiros e operações de bitwise;
Limitações

Sem suporte a recursão;

Processamento de textura não é suportado;

As GPUs da NVIDIA rodam a apenas 32 bits, permitindo apenas dados com
single precision ao invés de Double precision (64 bits), existentes nos super
computadores;

A largura de banda e latência entre o CPU e a GPU pode ser um gargalo;

Threads devem ser executadas em grupos de no mínimo 32 para o melhor
desempenho, com o número total de segmentos que chegam aos milhares. Filiais no
código do programa não afetam o desempenho significativamente, desde que cada um
dos 32 segmentos toma o mesmo caminho de execução, o modelo de execução SIMD
torna-se uma limitação importante para qualquer tarefa inerentemente divergente (por
exemplo, percorrer um espaço de particionamento de dados estruturados durante
raytracing);

Ao contrário OpenCL, GPUs CUDA habilitadas só estão disponíveis a partir da
NVIDIA (GeForce série 8 e superiores, Quadro e Tesla). Deve-se dizer que a AMD /
ATI só suporta GPGPU em seus chips high-end;
Conclusões
Utilizando GPUs CUDA podemos obter speedups surpreendentes, em aplicações
que utilizam a mesma função para tratar múltiplos dados.
Para compararmos o poder de processamento de uma GPU CUDA foi realizado
o seguinte teste, multiplicação de duas matrizes com 1000 linhas e 1000 colunas, o
resultado desse calculo na GPU CUDA Geforce GTX 275 foi obtido em um intervalo
de tempo de 15ms e em uma CPU Intel Celeron de 2,8 GHZ o mesmo teste levou
aproximadamente 35s.
O desempenho em cálculo da GPU, se mostrou superior ao da CPU, sendo
então uma excelente fonte de processamento devido ao seu baixo custo beneficio.
Referências
[1] CARAPETO R. Programação em GPU. Disponível em: http://algos.inescid.pt/~jcm/cpd/papers/4a4/programacao_gpu.pdf . Acesso em Dezembro de 2009.
[2] NVIDIA CORPORATION, CUDA ZONE, Disponível em:
http://www.NVIDIA.com/object/cuda_home.html. Acesso em Dezembro de 2009.
[3] WIKIPÉDIA CORPORATION, CUDA, Disponível em:
http://en.wikipedia.org/wiki/CUDA. Acesso em Dezembro de 2009.
Download