Escolar Documentos
Profissional Documentos
Cultura Documentos
PROGRAMAÇÃO
O
uso orquestrado das GPUs A edição 61 da Linux Magazine processadores atuais, pois analisar e
(unidades de processamento contém um artigo sobre visão compu- processar imagens ao vivo significa
gráfico, o processador das tacional [1] que menciona a aplica- aplicar complexos algoritmos em 30
placas de vídeo) e CPUs mudará o bilidade dessa tecnologia em projetos com dimensões de 640x480 pixels por
rumo da computação. Trabalhos que de realidade aumentada, robótica e segundo. Neste cenário, os chips grá-
levam dias para serem processados biometria que utilizam reconheci- ficos serão imprescindíveis para um
poderão reduzir esse tempo para ho- mento de padrões e processamento ganho significativo de desempenho
ras. Protetores de tela que trabalham de imagens em tempo real. nessas aplicações.
em cluster utilizando a GPU permi- Aplicar processos de visão com-
tirão acelerar trabalhos de pesquisas putacional em fluxos de vídeo ao CPU x GPU
para o desenvolvimento da cura de vivo é uma tarefa morosa devido ao Vale a pena mencionar que, em
doenças letais. Este artigo mostrará grande consumo de processamen- teoria, quanto mais núcleos tem
como utilizar recursos da GPU com to matemático. Esse custo compu- uma CPU, maior o número de
a tecnologia NVIDIA CUDA. tacional é alto até mesmo para os transístores e, por consequência,
70 http://www.linuxmagazine.com.br
CUDA | PROGRAMAÇÃO
melhor o desempenho. Contudo, No passado, era muito clara essa aos programadores artistas. O ter-
na prática, isso não acontece por diferença entres os chips, pois as mo “shader” é originado programa
um motivo principal: o software placas 3D processavam muitos tri- RenderMan, criado pela Pixar no
está anos atrás do hardware. Uma ângulos por segundo (como a 3dfx final da década de 80.
CPU com quatro núcleos pode Voodoo, por exemplo). Porém, com Uma placa de vídeo GeForce
perder em termos de desempenho o surgimento dos shaders (rotinas 9600 GT apresenta desempenho
nos jogos pelo fato do software ser criadas para tarefas específicas na fantástico quando comparada a um
otimizado para dois núcleos. A criação de cenas), as GPUs passa- processador Intel Core 2 Duo E6700
programação paralela para quatro ram a ganhar capacidade de pro- na tarefa de codificação de vídeos
núcleos significa aumentar o pro- cessamento sequencial como as H.264. Nos testes realizados para
blema, sem contar a otimização CPUs. Os shaders permitem pro- este artigo, um trailer na resolução
dos compiladores para fazer uso cedimentos de sombreamento e de 1920x1080 pixels levou aproxima-
do paralelismo. iluminação, dando assim liberdade damente 3:36 minutos para ser co-
Assim, entendemos a recente
aquisição de um supercomputador
baseado em GPUs pela Petrobras Listagem 1: Instalação do pacote CUDA Toolkit
[2]. O seu poder de processamento
# sh cudatoolkit_2.3_linux_64_suse11.1.run
é de 250 Teraflops, caracterizando-
Uncompressing NVIDIA CUDA...........................................
o como 16º maior supercomputador ....................................................................
do planeta. ....................................................................
Para entender melhor a diferença ....................................
fundamental entre os processadores Enter install path (default /usr/local/cuda, ‘/cuda’ will be appended):
convencionais (CPUs) e os chips de
vídeo (GPUs), é importante saber “man/man3/cudaBindTexture.3” -> “/usr/local/cuda/man/man3
que as CPUs são otimizadas para /cudaBindTexture.3”
cálculos sequenciais, enquanto que “man/man3/cuMemsetD2D32.3” -> “/usr/local/cuda/man/man3
as GPUs são otimizadas para cálculos /cuMemsetD2D32.3”
intensamente paralelos. “man/man3/NumChannels.3” -> “/usr/local/cuda/man/man3/NumChannels.3”
“man/man3/cudaD3D9ResourceSetMapFlags.3” -> “/usr/local/cuda/man/man3/
CUDA cudaD3D9ResourceSetMapFlags.3”
A tecnologia NVIDIA CUDA é uma “man/man3/CUDA_ERROR_INVALID_HANDLE.3” -> “/usr/local/cuda/man/man3
arquitetura de computação paralela /CUDA_ERROR_INVALID_HANDLE.3”
cujo objetivo principal é tirar proveito “man/man3/cudaDeviceProp.3” -> “/usr/local/cuda/man/man3
máximo da computação paralela das /cudaDeviceProp.3”
GPUs NVIDIA, com a finalidade de “man/man3/CU_MEMHOSTALLOC_PORTABLE.3” -> “/usr/local/cuda/man/man3
resolver problemas computacionais /CU_MEMHOSTALLOC_PORTABLE.3”
complexos em uma fração do tem-
========================================
po gasto por uma CPU. A seguir, os
principais recursos da tecnologia:
* Please make sure your PATH includes /usr/local/cuda/bin
linguagem C padrão para de-
* Please make sure your LD_LIBRARY_PATH
senvolvimento de aplicativos * for 32-bit Linux distributions includes /usr/local/cuda/lib
em paralelo na GPU; * for 64-bit Linux distributions includes /usr/local/cuda/lib64
lbibliotecas numéricas padrão * OR
para FFT e BLAS; * for 32-bit Linux distributions add /usr/local/cuda/lib
ltransferência rápida de dados * for 64-bit Linux distributions add /usr/local/cuda/lib64
entre a GPU e a CPU; * to /etc/ld.so.conf and run ldconfig as root
linteroperação do driver CUDA
com os drivers gráficos OpenGL * Please read the release notes in /usr/local/cuda/doc/
e DirectX;
lsuporte a sistemas operacionais * To uninstall CUDA, delete /usr/local/cuda
Linux de 32 e 64 bits e Windows * Installation Complete
XP de 32 e 64 bits.
dificado pela GPU; já a codificação Java (jCUDA), C# (CUDA.NET) e de de sua compatibilidade com as
por processos convencionais (isto também Python (PyCUDA). GPUs, a prática retrata um cenário
é, CPUs) levou em torno de 17:17 um pouco diferente. O OpenCL
minutos. Logo, é possível utilizar OpenCL proporciona funções específicas
a tecnologia NVIDIA CUDA para O OpenCL pode ser entendido como para cada fámilia de GPUs. Com
codificar e decodificar vídeos, como “parente” do OpenGL. Desenvolvi- isso, o desenvolvimento de soluções
também em aplicações científicas de do pelo Khronos Group, associação e aplicativos genéricos implica abs-
alta performance. de fabricantes dedicada à criação de trair algumas funções em virtude do
A CUDA permite empregar re- padrões abertos, o OpenCL permite hardware em questão.
cursos das placas NVIDIA utilizan- não somente o uso de GPUs, como Está muito claro que os benefícios
do chamadas em C (C for CUDA, também o acesso aos chips acelera- dessa tecnologia são enormes. No en-
compilador nvcc), o que é um pro- dores (processadores Cell). Isto de- tanto, as dificuldades são ainda maio-
cesso relativamente fácil para os bons monstra a flexibilidade do projeto. res, pois o desenvolvimento paralelo
programadores. Também existem abs- Embora pareça lógica a escolha exige aplicar nova metodologia de
trações de CUDA para a linguagem da tecnologia OpenCL em virtu- desenvolvimento. Poucos aplicativos
são capazes de explorar tecnologias
com quatro núcleos; imagine então
Listagem 2: Instalação do pacote CUDA SDK como utilizar os recursos de hard-
wares de 5.000 núcleos.
$ sh cudasdk_2.3_linux.run O processamento paralelo pela
Verifying archive integrity... All good. GPU executa mais ações com me-
Uncompressing NVIDIA GPU Computing SDK............................. nos tráfego de informações em bar-
...................................................................
ramentos, usando a área de cache
...................................................................
comum e acesso direto a memória.
........................
Com a utilização da API (OpenMM),
Enter install path (default ~/NVIDIA_GPU_Computing_SDK): which: no
será possível desenvolver cálculos
nvcc in (/usr/lib64/mpi/gcc/openmpi/bin:/home/cabelo/bin:/usr moleculares de maneira simples e
/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games: integrada com as GPUs. Logo, o
/opt/kde3/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin) trabalho que uma CPU processa
em dias será processado em horas.
Could not locate CUDA. Enter the full path to CUDA. Os especialistas no segmento di-
If you do not know the path, accept the default and then zem que, no futuro, os processadores
modify the CUDA_INSTALL_PATH variable in terão uma unidade de processamento
/home/cabelo/NVIDIA_GPU_Computing_SDK/shared/common.mk. paralelo integrada, executando assim
múltiplas funções. Então, é possível
acreditar que a GPU será mais um
“sdk/shared/inc/stopwatch_base.inl” -> “/home/cabelo/NVIDIA_GPU_ processador auxiliar, como aconteceu
Computing_SDK/shared/inc/stopwatch_base.inl” com o co-processador matemático
“sdk/shared/inc/nvShaderUtils.h” -> “/home/cabelo/NVIDIA_GPU_
integrado nos processadores 486. Na
Computing_SDK/shared/inc/nvShaderUtils.h”
geração dos processadores 386, era
“sdk/shared/inc/stopwatch.h” -> “/home/cabelo/NVIDIA_GPU_Computing_
preciso usar co-processadores mate-
SDK/shared/inc/stopwatch.h”
“sdk/shared/inc/cudpp” -> “/home/cabelo/NVIDIA_GPU_Computing_SDK
máticos externos à CPU.
/shared/inc/cudpp”
“sdk/shared/inc/cudpp/cudpp.h” -> “/home/cabelo/NVIDIA_GPU_ Download e instalação
Computing_SDK/shared/inc/cudpp/cudpp.h” Os arquivos necessários para se traba-
“sdk/shared/Makefile” -> “/home/cabelo/NVIDIA_GPU_Computing_SDK lhar com a tecnologia CUDA devem
/shared/Makefile” ser obtidos no site da NVIDIA [3].
O arquivo cudatoolkit_2.3_li-
======================================== nux_64_suse11.1.run contém as ferra-
Configuring SDK Makefile (/home/cabelo/NVIDIA_GPU_Computing_SDK mentas de desenvolvimento (com-
/shared/common.mk)... pilador, entre outros). Já o arquivo
cudasdk_2.3_linux.run, como o próprio
72 http://www.linuxmagazine.com.br
te a CUDA.
Test PASSED
Warp size:
Integrated:
Clock rate:
$ ./deviceQuery
Compute mode:
Number of cores:
de ambiente LD_LIBRARY_PATH:
2
1
1
No
No
32
16
Yes
Yes
512
Total number of registers available per block: 8192
2.30
2.30
/usr/local/cuda/lib64
0.80 GHz
256 bytes
16384 bytes
65536 bytes
262144 bytes
CUDA Device Query (Runtime API) version (CUDART static linking)
retório bin/ na váriavel PATH:
512 x 512 x 64
268107776 bytes
PATH=“$PATH:/usr/local/cuda/bin”
Default (multiple
65535 x 65535 x 1
e posteriores do compilador GCC
va neste ponto: para as versões 4.3
É importante fazer uma ressal-
tando o arquivo cudasdk_2.3_linux.
talar o pacote CUDA SDK, execu-
Repita o procedimento para ins-
Além disso, é preciso incluir o di-
LINUX NA
ARA p.24 CÂM
02/2010
Nova migr
ação para
Livre na Software SUPORTE LOCA
Câmara L p.28
de Camp
inas Maddog
explica
p.30
CLOUD COMPUTING E OPEN SOURCE
SUPORTE LOCAL p.28
por que
LINUX NA CÂMARA p.26 Cezar Taurion lista as iniciativas
Maddog explica por que o em nuvem
o
CLOUD COM
Nova migração para Software abertas para computação
suporte
suporte local é essencial
Livre na Câmara de Campinas
local é esse PUTIN
ncial Cezar Tauri
on lista
G E OPEN SOUR
abertas as inicia CE p.30
para comp tivas
utação em
nuvem
Linux Maga
zine
# 63 Feve
PARA VOCÊ GARANTIR A SUA
SYSADMIN
PROGRAMAS, FERRAMENTAS E TÉCNICAS
TRANQUILIDADE E O FUNCIONAMENTO
PERFEITO DOS SISTEMAS p. 31
reiro 2010
» Storage completo: FreeNAS p.32
p.37
» Rede sadia com traffic shaping
» Sudo: problema ou solução? p.40
» Fcron, um Cron bem melhor p.44
dois
REDES: APACHE + SELINUXosP.64
Velocidade ou segurança? Escolha
com o módulo mod_selinux do Apache.
# 63
VEJA TAMBÉM NESTA EDIÇÃO:
restauração em UFS p.54
e
» OpenSolaris, parte 10: Backup
p.50
» GPS rastreado com o OpenGTS
Serna p.48
» Novo editor XML livre: Syntext
p.58
» Alta disponibilidade sobre OpenSolaris
WWW.LINUXMAGAZINE.COM.BR
A REVISTA
DO PROFISS
IONAL DE
TI
SYSADMIN
FREENAS
CASE ALFRESCO
A Construcap p.26
projetos com agilizou seus LINUX PARK
o Alfresco Iniciada em 2008 p.28
Porto Alegre
de seminários
Linux Park a temporada CEZAR TAURION
de 2008 O Código Aberto p.34
incentivo à como
inovação
#44 07/08
R$ 13,90
€ 7,50
00044
A REVISTA
DO PROFISSIONAL
DE TI
942009
e
GOVERNANÇ
9 771806
WONDERSH
A COM
de
SEJA UM
BOM GESTOR
MELHORES E UTILIZE
PRÁTICAS AS
RECOMENDADAS ADOTADAS
E
PELOS PROFISSIONAIS
MAIS EXPERIENTES
NESSA ÁREA
» O que dizem p.36
certificados os profissionais
p.24
» Cobit, CMMI,
melhores ITIL. Quais
práticas? as
proib ida
p.36
» ITIL na prática
p.39
» Novidades
do ITIL v3.
p.44
exemplar
APER SUDO
SEGURANÇA:
Com o DNSSEC, DNSSEC p.69
a resolução VEJA TAMBÉM
de nomes NESTA EDIÇÃO:
PROGRAMAS
fica protegida » Relatórios
de ataques. do Squid com
Mas seu o SARG p.60
preço vale » Java, Ruby
a pena? e Rails: conheça
» Benchmarks o JRuby on
, FERRAME
REDES: IPV6 do GCC 4.3? Rails p.74
p.64 » Becape p.58
Conheça as
vantagens de bancos
nova versão da » LPI nível
de dados com
a Libferris
do Internet 2: Servidores p.46
TRANQUIL NTAS E TÉCN
Protocol, e NIS e DHCP
veja por que p.52
venda
é difícil adotá-la
IDADE E O
WWW.LINUXMAGAZINE.CO
M.BR
FUNCIONAME ICAS PARA VOCÊ GAR
FCRON
NTO PERFEIT ANTIR A SUA
SYSADMIN
O DOS SIST
Assinant
EMAS p. 31
» Storage
completo:
» Rede sadia FreeNAS p.32
com traffic
CRIPTOGRA
» Sudo: prob shap
lema ou soluç ing p.37
FIA
» Fcron, um ão? p.40
Cron bem
melhor p.44
MOD_SELIN
REDES: APA
UX OPEN
Velocidade CHE + SELINU
com o mód
ou seguranç
a? Escolha
X p.64
os
SOLA
ulo mod_sel
inux do Apac dois
he.
RIS OPEN
CUDA | PROGRAMAÇÃO
SEGURANÇA
GTS
No segundo : CRIPTO
artigo da série GRAFIA p.70
de bom e , conheça
mau usos exemplos
da criptogra
fia.
SERNA ALTA
11 4082-1300
DISPO
VEJA TAMBÉM
» OpenSola NES
ris, parte 10: TA EDIÇÃO:
» GPS rastr Backup e
restauração
NIBILIDADE
eado com
73
o OpenGTS em UFS p.54
» Novo edito
r XML livre p.50
» Alta disp : Syntext Sern
onibilidade a p.48
sobre Open
Solaris p.58
WWW.LI
NUXMAG
AZIN E.COM.B
R
PROGRAMAÇÃO | CUDA
4.3, antes de compilar os exemplos Em seguida, teste os exemplos os vetores A e B, com o vetor B re-
é necessário alterar a linha 126 do ar- como mostra a listagem 3. A figura 1 presentando o vetor A multiplicado
quivo ~/NVIDIA_GPU_Computing_SDK/C/ demonstra um programa que utiliza pelo fator 2.
common/common.mk da seguinte forma: a tecnologia CUDA em tempo real. Com a função gettimeofday(),
Para “usar a força” (isto é, ler os registraremos os tempos inicial e
NVCCFLAGS += --compiler-options fontes), basta abrir os exemplos lo- final da operação de multiplicação
-fno-strict-aliasing --compiler calizados na pasta ~/NVIDIA_GPU_Com- dos vetores. Com isso, tornaremos
-options -fno-inline puting_SDK/C/src/. possível a medição do tempo de
execução de cada um dos processos
Mão na massa isoladamente. A listagem 4 mostra
Teste prático Agora, com um simples programa o código-fonte para efetuar os tes-
Para compilar os exemplos, basta em C, multiplicaremos um vetor tes mencionados (arquivo teste
executar os comandos a seguir: com 50 milhões de elementos utili- NVIDIA.cu).
zando a GPU e, em seguida, a CPU, A função vecMult_d() é utilizada
$ cd ~/NVIDIA_GPU_Computing_SDK/C para efeito de comparação temporal. para efetuar o processamento na
$ make Neste simples programa, criaremos GPU; já a função vecMult_d() é vol-
74 http://www.linuxmagazine.com.br
CUDA | PROGRAMAÇÃO
$ nvcc testeNVIDIA.cu \
-o testeNVIDIA \
--compiler-options \
-fno-strict-aliasing \
--compiler-options -fno-inline \
-I/usr/local/cuda/include/ \
-I[/home/user]/NVIDIA_GPU_
Computing_SDK/C/common/inc/ Figura 1 Programa de exemplo para uso da tecnologia CUDA.
$ nvcc fill_copy_sequence.cu \
-o fill_copy_sequence \
Sobre o autor
--compiler-options \ Alessandro Faria é sócio-proprietário da NETi Tecnologia (http://www.netitec.com.br), funda-
da em Junho de 1996, empresa especializada em desenvolvimento de software e soluções bio-
-fno-strict-aliasing \
métricas. Consultor Biométrico na tecnologia de reconhecimento facial, atuando na área de tec-
--compiler-options -fno-inline \ nologia desde 1986, assim propiciando ao mercado soluções em software. Leva o Linux a sério
-I/usr/local/cuda/include/ \ desde 1998 com desenvolvimento de soluções open-source, membro colaborador da comunida-
de Viva O Linux, mantenedor da biblioteca open-source de vídeo-captura entre outros projetos.
-I[/home/user]/NVIDIA_GPU_
Computing_SDK/C/common/inc/
Gostou do artigo?
Feito isso, basta executar o pro-
Queremos ouvir sua opinião. Fale conosco em
grama recém-compilado: cartas@linuxmagazine.com.br
76 http://www.linuxmagazine.com.br
CUDA
Linux Pro
COLEÇÃO
UBUNTU
UBUNTU
www.LinuxMagazine.com.br
14/07/09 11:56