CUDA: Programe a sua NVIDIA

O uso orquestrado das GPU e CPU mudará o rumo da computação, pois trabalhos que processam em dias poderão ser processados em horas. Screensavers que trabalham em cluster, utilizando a GPU, permitirão acelerar trabalhos de pesquisas para o desenvolvimento da curas de doenças letais.

[ Hits: 42.405 ]

Por: Alessandro de Oliveira Faria (A.K.A. CABELO) em 22/12/2009 | Blog: http://assuntonerd.com.br


Introdução



Na revista Linux Magazine deste mês (exemplar número 61, dezembro/2009) publiquei um artigo sobre visão computacional onde menciono a sua aplicabilidade em projetos de realidade aumentada, robótica e biometria que utilizam reconhecimento de padrões e processamento de imagens em tempo real.

Aplicar processos de visão computacional em fluxos de vídeo ao vivo é uma tarefa morosa devido ao grande consumo de processamento matemático. Este custo computacional é grande mesmo para os processadores atuais, pois analisar e processar imagens ao vivo significa aplicar complexos algoritmos em 30 quadros com dimensões 640x480 por segundo. Neste cenário os chips gráficos serão imprescindíveis para um ganho significativo na performance destes aplicativos.

Vale a pena mencionar que, na teoria, quanto mais núcleos tem uma CPU, maior o número de transístores e, por consequência, melhor sua performance. Mas, na prática, isto não acontece pelo principal motivo: o software está anos atrás do hardware. Uma CPU com 4 núcleos pode perder em performance nos games pelo fato do software ser otimizados para 2 núcleos. A programação em paralelo para 4 núcleos significa aumentar o problema, sem contar na otimização dos compiladores para fazer uso do paralelismo.

Linux: CUDA: Programe a sua NVIDIA. Assim entendemos a aquisição pela Petrobras do supercomputador baseado em GPU (chips gráficos encontrados nas placas de vídeo). O seu poder de processamento é de 250 teraflops e caracterizado como 16° maior supercomputador do planeta. Este equipamento auxiliará simulações geofísicas cujo objetivo é "aprimorar a visualização das camadas geológicas do subsolo para suportar a exploração e produção de petróleo", segundo o anúncio da Bull à imprensa.

Baseada na maravilhosa tecnologia NVIDIA CUDA™, o seu uso ajudará também a melhorar o desempenho das análises sísmicas. Para isto a Petrobras investiu em um cluster baseado em GPUs composto de 190 processadores paralelos NVIDIA Tesla.

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.

A expectativa da Petrobras é de que a performance das GPUs aumente, e pretende atingir uma potência superior a 400 teraflops no seu data center. Para entender melhor a diferença fundamental entre os processadores convencionais (CPUs) e os chipsets de vídeo (GPUs), digamos que as CPUs são otimizadas para cálculos sequenciais já as GPUs são otimizadas para cálculos intensamente paralelos.

No passado ficava muito clara esta diferença entres os chips, pois as placas 3D processavam muitos triângulos por segundo (3df Voodoo). Mas com o surgimento dos shaders (rotinas criadas para tarefas específicas na criação de cenas), as GPUs passaram a ganhar capacidade de processamento sequencial como as CPUs. Os shaders permite procedimentos de sombreamento e/ou iluminação, dando assim liberdade aos programadores artistas. O termo shader é originado do programa RenderMan, criado pela Pixar no final da década de 80.

Sendo mais objetivo, uma GeForce 9600 GT apresenta uma performance seis vezes superior comparado com um processador Core 2 Duo E6700 na tarefa de codificação de vídeos H.264. Em um trailer na resolução 1920 x 1080 pixels, a codificação com uma GPUs levou aproximadamente 3:36 minutos, já a codificação com processos convencionais levaram em torno de 17:17 minutos. Logo, é possível utilizar a tecnologia NVIDIA CUDA em codificações e decodificações de vídeos, como também em aplicações científicas de alta performance.

O CUDA permite utilizar recursos das placas NVIDIA utilizando chamadas em C (C for CUDA, compilador nvcc), o que torna o processo como um todo relativamente fácil para os BONS PROGRAMADORES. Existem também abstração para a linguagem Java (jCUDA), C# (CUDA.NET) e também Python (PyCUDA).

O processamento paralelo da GPU permite executar-se mais ações com menos tráfego de informações em barramentos, usando a área de cache comum e acesso direto a memória. Com a utilização da API (OpenMM), será possível desenvolver cálculos moleculares de maneira simples e integrada com as GPUs. Logo o trabalho que uma CPU processa em dias, sera processado em horas!

Os especialistas no segmento, dizem que, para o futuro, os processadores terão unidade processamento paralelo integrado, executando assim múltiplas funções. Então acredito que a GPU será outro processador auxiliar, como aconteceu com o coprocessador matemático integrado nos processadores 486. Bons tempos quando eu e o meu sócio comprávamos coprocessadores matemáticos para instalar em placas com processadores 386...
Linux: CUDA: Programe a sua NVIDIA.
    Próxima página

Páginas do artigo
   1. Introdução
   2. Download e instalação
Outros artigos deste autor

Terasology: O Minecraft gratuito e com gráfico realista

Instalando o Android SDK na plataforma Linux

Criando um serviço de monitoramento de vídeo e detector de presença com sua WebCam no Linux

Biometria: Reconhecimento Facial OpenSource!

Montando um mirror de atualização do anti-vírus AVG

Leitura recomendada

Apresentando a programação orientada a objetos

Configurando Webcam com o Mercury

Instalando o Biblioteca Livre - BIBLIVRE

Kdrive, um X em miniatura

Instalação do Lazarus no Slackware Linux

  
Comentários
[1] Comentário enviado por cleysinhonv em 22/12/2009 - 10:37h

Olá Alessandro,

Obrigado pela contribuição do rico documento. Gostaria de saber a respeito desta tecnologia anexada aos conceitos de clusters. Há no mercado clusters que vem com a tecnologia GPU?

[2] Comentário enviado por cabelo em 22/12/2009 - 10:47h

Ola Clevsinhonv... Veja esta criança: http://www.nvidia.com/object/preconfigured_clusters.html

[3] Comentário enviado por paulorvojr em 22/12/2009 - 11:15h

Belo artigo Alessandro!! parabens!!!

cresceu muito o produto da nvidia com essa arquitetura CUDA, que não é de hoje, faz anos que eles anunciam, mas so esse ano divulgaram mais.

Pena que ainda não tive a oportunidade de experimentar essa maravilha.

Vou estudar um pouco sobre ela, ja que minha gtx suporta isso

abraçcos ae

[4] Comentário enviado por cleysinhonv em 22/12/2009 - 11:26h

Obrigado Alessndro,

Fiz esta pergunta pois estou começando a estudar CUDA e GPU, sou menino no assunto (um curumin). Estamos processo de aquisição de um cluster aqui na Universidade onde trabalho, para processarmos tarefas da área de bioinformática, climatologia e astronomia.

Mais uma vez obrigado.

Um forte abraço. Boas Festas!

[5] Comentário enviado por removido em 22/12/2009 - 14:58h

Muito bom cabelo!!!

Uma aplicação interessante usando o CUDA esta sendo usada para quebrar a criptografia A5/1 do GSM. O A5/1 é usado para criptografar voz e sinalização na rede GSM. Mais informações podem ser encontradas aqui:
http://alexloula.blogspot.com/2009/09/quebrando-criptografia-a5-do-gsm.html

Infelizmente minha NVIDIA não suporta CUDA.


[6] Comentário enviado por lyma em 23/12/2009 - 10:09h

Boa Cabelo!

[7] Comentário enviado por dastyler em 23/12/2009 - 11:15h

Mais uma vez Cabelo e seus artigos de tecnologia impressionantes. Eu nem conhecia esta tecnologia CUDA, e para mim a GPU era apenas um processador gráfico da placa de vídeo para aumentar o desempenho em jogos.
MAterial ótimo e os links de referencia são excelentes!!

Valeu Cabelo por compartilhar tão valioso conhecimento conosco!!

>)

[8] Comentário enviado por removido em 23/12/2009 - 12:53h

ERRATA:
"Sendo mais objetivo, uma GeForce 9600 GT apresenta uma performance seis vezes superior comparado com um processador Core 2 Duo E6700 na tarefa de codificação de vídeos H.264".

Uma GeForce 9600 GT é "duas" vezes mais rápida que um Core 2 Duo E6700 ao codificar vídeos em H.264 usando o PowerDirector 7 (otimizado para o CUDA) e quase 6 vezes mais rápida no SETI@Home.
Você pode ver alguns números aqui.
SETI@HOME;
SETI (sigla em inglês para Search for Extra-Terrestrial Intelligence, que significa Busca por Inteligência Extraterrestre) é um projeto que tem por objetivo analisar o máximo de sinais de rádio captados por radiotelescópios terrestres (principalmente pelo Radiotelescópio de Arecibo), a partir da idéia que se existe alguma forma de vida inteligente no universo, ela tentará se comunicar com outra formas de vida através de ondas eletromagnéticas (sinais de rádio), pois estas representam a forma de transmissão de informação mais rápida conhecida.
(fonte: http://pt.wikipedia.org/wiki/SETI)

Usa-se muito cálculo matemático assim como o FOLDING@HOME, que tem outra finalidade.
http://pt.wikipedia.org/wiki/Folding@home


Voltando a análise pessoal sobre o artigo, apesar do título ser somente do CUDA, não foi muito abranjente, na minha opinião poderia ser comentado outras possiblilidades, fala somente da nVidia e a ATI? Para programar para nVidia usa-se em linguagem C (C for CUDA - apartir do chipSet "G80" , para ATI usa-se BROOK+ é baseado na linguagem BROOK, que é um variante do C - apartir do chipSet R520) sem falar do openCL, que serve de genérico para ambos, mas para programar em ambos o openCL usa funções comuns as duas, lembrando que a performace não é igual a de usar para uma placa específica.

[9] Comentário enviado por cabelo em 23/12/2009 - 13:27h

Cesin:

Você tem razão, houve uma falha da minha parte com relação aos comparativos na interpretação dos gráficos:

http://media.bestofmicro.com/B/8/210356/original/image006.png
http://media.bestofmicro.com/B/9/210357/original/image007.png

Mas ressalto que nos meus testes laboratoriais, a multiplicação de vetores com 50 milhões de elementos levaram 20µs na GPU contra 401742µs (microsegundos) na CPU "Intel(R) Core(TM)2 Duo CPU T7250 @ 2.00GHz". O objetivo do texto é mostrar este novo cenário/horizonte.

Já com relação ao aprofundamento, pretendo publica-los ao fechar o novo ciclo de pesquisa/desenvolvimento. Assim não torno o texto extenso... Mas agredeço a dica/crítica para a minha própria evolução natural.

No proximo documento, falarei sobre o nvcc (C for CUDA - apartir do chipSet "G80" ) e outros tópicos.

Assim que eu obter uma placa ATI, publicarei a respeito BROOK+. Pois atualmente meu note possue uma modesta mas notável "GeForce 8400M GS".

Abraços

[10] Comentário enviado por removido em 24/12/2009 - 07:13h

Que isso, meu comentario é somente dica mesmo, foi bom o artigo, parabens, sua contribuição aki no vol é sem dúvida valiosa, muita gente inclusive eu, aprende com vc! Um abço t+

[11] Comentário enviado por jokerAMD em 28/12/2009 - 16:49h

Muito bom msm tava atras de alguns comentarios em portugues(so tenho videos e apostilas em ingles)valeu kara bizu muito bom, esse sera o tema do meu tcc pro ano q vem, logo tenho q correr atraz de qualquer que vai facilitar minha vida ate la na linguagem cuda, se tu tiver mas coisa sobre cuda em portugues posta ai blza
valeu kra abraços

[12] Comentário enviado por guilx em 28/12/2009 - 18:09h

Posso compilar qualquer coisa com o nvcc ?? Por exemplo o kernel ?

[13] Comentário enviado por percival em 30/12/2009 - 11:54h

Toma um 10 pelo artigo.

Abraço.

[14] Comentário enviado por grandmaster em 05/01/2010 - 12:44h

muito bom artigo.

---
Renato de Castro Henriques
CobiT Foundation 4.1 Certified ID: 90391725
http://www.renato.henriques.nom.br

[15] Comentário enviado por JefersonLopes em 06/01/2010 - 20:54h

Engraçado... hoje precisei levar um impressora para manutenção e na empresa havia umas caixinhas com o slogan "NVIDIA CUDA"... fiquei olhando por alguns minutos, pois já havia visto alguns artigos em inglês e visto no próprio site da Nvidia, mas nunca vi em lugar algum no Brasil. Bem, não perguntei nada em tal empresa.

Agora entro no Viva o Linux, (que faz um bom tempo que não fazia isto) e me deparo com este ótimo artigo!?!?!

Poxa... parabéns Alessandro, muito boa as informações.

E também estava contado alguns servidores para virtualização! Sei que por enquanto não há um porte de softwares e sistemas virtualizadores para utilização de tal tecnologia... massss... Será um sinal dos tempos para mim!?

rss

Vamos ver! ;-)

[16] Comentário enviado por albfneto em 16/01/2010 - 16:28h

parabéns, cabelo, mais um artigão!
em meus sistemas, a GPU já usa CUDA apenas com o driver instalado, sem precisar do CUDA Toolkit em separado.
Eu uso CUDA porque faço cálculos químicos e porque gosto muito de BOINC eo BOINC usa CUDA.

[17] Comentário enviado por cleysinhonv em 26/08/2010 - 14:03h

Olá Alessandro,

Estou compilando os exemplos porém está com o seguinte erro.


linux-bks0:~/NVIDIA_GPU_Computing_SDK/C # make
make[1]: Entrando no diretório `/root/NVIDIA_GPU_Computing_SDK/C/common'
make[1]: Saindo do diretório `/root/NVIDIA_GPU_Computing_SDK/C/common'
make[1]: Entrando no diretório `/root/NVIDIA_GPU_Computing_SDK/C/common'
make[1]: Saindo do diretório `/root/NVIDIA_GPU_Computing_SDK/C/common'
make[1]: Entrando no diretório `/root/NVIDIA_GPU_Computing_SDK/C/common'
make[1]: Saindo do diretório `/root/NVIDIA_GPU_Computing_SDK/C/common'
make -C src/simpleTexture/
make[1]: Entrando no diretório `/root/NVIDIA_GPU_Computing_SDK/C/src/simpleTexture'
nvcc �%6X: Unknown option 'compiler-options'
make[1]: ** [obj/release/simpleTexture.cu.o] Erro 255
make[1]: Saindo do diretório `/root/NVIDIA_GPU_Computing_SDK/C/src/simpleTexture'
make: ** [src/simpleTexture/Makefile.ph_build] Erro 2

Você pode me ajudar?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts