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.997 ]

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


Download e instalação



O download dos arquivos necessários para trabalhar com a tecnologia CUDA deverá ser obtido no endereço:
O arquivo cudatoolkit_2.3_linux_64_suse11.1.run contém as ferramentos de desenvolvimento (compilador entre outros). Já o arquivo cudasdk_2.3_linux.run, como o próprio nome diz, são os arquivos de desenvolvimento contendo exemplos. A seguir o link direto para download para a distribuição openSUSE 11.1/2 64 bits (as demais distribuições, selecionar no link de download).
ATENÇÃO: Ressalto que este documento parte do princípio que o equipamento possui instalado o driver NVIDIA 190 ou superior com suporte ao CUDA.
Linux: CUDA: Programe a sua NVIDIA.
Para instalar o pacote CUDA Toolkit, execute o arquivo cudatoolkit_2.3_linux_64_suse11.1.run:

# sh cudatoolkit_2.3_linux_64_suse11.1.run
Enter install path (default /usr/local/cuda, '/cuda' will be appended):

"man/man3/cudaBindTexture.3" -> "/usr/local/cuda/man/man3/cudaBindTexture.3"
"man/man3/cuMemsetD2D32.3" -> "/usr/local/cuda/man/man3/cuMemsetD2D32.3"
"man/man3/NumChannels.3" -> "/usr/local/cuda/man/man3/NumChannels.3"
"man/man3/cudaD3D9ResourceSetMapFlags.3" -> "/usr/local/cuda/man/man3/cudaD3D9ResourceSetMapFlags.3"
"man/man3/CUDA_ERROR_INVALID_HANDLE.3" -> "/usr/local/cuda/man/man3/CUDA_ERROR_INVALID_HANDLE.3"
"man/man3/cudaDeviceProp.3" -> "/usr/local/cuda/man/man3/cudaDeviceProp.3"
"man/man3/CU_MEMHOSTALLOC_PORTABLE.3" -> "/usr/local/cuda/man/man3/CU_MEMHOSTALLOC_PORTABLE.3"

========================================

* Please make sure your PATH includes /usr/local/cuda/bin
* Please make sure your LD_LIBRARY_PATH
*   for 32-bit Linux distributions includes /usr/local/cuda/lib
*   for 64-bit Linux distributions includes /usr/local/cuda/lib64
* OR
*   for 32-bit Linux distributions add /usr/local/cuda/lib
*   for 64-bit Linux distributions add /usr/local/cuda/lib64
* to /etc/ld.so.conf and run ldconfig as root

* Please read the release notes in /usr/local/cuda/doc/

* To uninstall CUDA, delete /usr/local/cuda
* Installation Complete

Insira a linha a seguir no arquivo /etc/ld.so.conf ou acrescente na variável de ambiente LD_LIBRARY_PATH:

/usr/local/cuda/lib64

Devemos também incluir a pasta bin na variável PATH:

# export PATH=$PATH:/usr/local/cuda/bin

Repita o procedimento para instalar o pacote CUDA SDK, executando o arquivo cudasdk_2.3_linux.run:

sh cudasdk_2.3_linux.run

ATENÇÃO: Para os compiladores gcc 4.3 ou superiores, antes de compilar os exemplos, alterar a linha 126 do arquivo common.mk conforme o exemplo a seguir.

vi ~/NVIDIA_GPU_Computing_SDK/C/common/common.mk

E modificar a linha 126:

NVCCFLAGS += --compiler-options -fno-strict-aliasing --compiler-options -fno-inline

Para compilar os exemplos, basta executar os comandos a seguir:

cd ~/NVIDIA_GPU_Computing_SDK/C
$ make


Teste os exemplos:

cd ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release

./deviceQuery
CUDA Device Query (Runtime API) version (CUDART static linking)
There is 1 device supporting CUDA

Device 0: "GeForce 8400M GS"
  CUDA Driver Version:                           2.30
  CUDA Runtime Version:                          2.30
  CUDA Capability Major revision number:         1
  CUDA Capability Minor revision number:         1
  Total amount of global memory:                 268107776 bytes
  Number of multiprocessors:                     2
  Number of cores:                               16
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       16384 bytes
  Total number of registers available per block: 8192
  Warp size:                                     32
  Maximum number of threads per block:           512
  Maximum sizes of each dimension of a block:    512 x 512 x 64
  Maximum sizes of each dimension of a grid:     65535 x 65535 x 1
  Maximum memory pitch:                          262144 bytes
  Texture alignment:                             256 bytes
  Clock rate:                                    0.80 GHz
  Concurrent copy and execution:                 Yes
  Run time limit on kernels:                     Yes
  Integrated:                                    No
  Support host page-locked memory mapping:       No
  Compute mode:                                  Default (multiple host threads 
						can use this device simultaneously)

Test PASSED

Press ENTER to exit...

Algumas imagens de programas exemplos utilizando a tecnologia CUBA:
Linux: CUDA: Programe a sua NVIDIA. Linux: CUDA: Programe a sua NVIDIA.
Para usar a força (ler os fontes), basta ler os exemplos na pasta ~/NVIDIA_GPU_Computing_SDK/C/src.
Sobre o autor: http://www.netitec.com.br/alessandro

Página anterior    

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

TerminatorX: Linux nas discotecas para os DJs!

Stopmotion: Crie animações com objetos inanimados e brinquedos

OAK: Câmera Open Source de Visão Computacional com AI

Faça um incrível espetáculo de efeitos visuais com vídeo em tempo real

Stella: Crie o seu próprio arcade ATARI 2600

Leitura recomendada

Instalação de softwares no Debian Linux e derivados

Instalando Freerock Gnome 2.12.1

Servidor Jabber com LDAP

VnStat - Monitorando o tráfego de sua rede

Instalação e Configuração do Puppet

  
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