Sei sulla pagina 1di 8

1.

Introduo
No final dos anos 90, surgiu a primeira GPU da NVIDIA, quando o hardware comeou a
tornar-se cada vez mais programvel. A partir de ento pesquisadores comearam a estudar
sobre o assunto, culminando na GPU de Propsito Geral (GPGPU).
Entretanto a GPGPU naquela poca era muito mais complexa e poucas pessoas
conseguiam trabalhar com ela, at que uma equipe de pesquisadores da Universidade de
Stanford reuniu-se para melhorar a GPU.
Em 2003, um grupo de pesquisadores liderado por Ian Buck desenvolveu o Brook, o
primeiro modelo de programao a adotar a linguagem C em uma plataforma de computao
paralela, revelam assim uma GPU como um processador de propsito geral em uma linguagem
de alto nvel, alm de os programas em Brook serem sete vezes mais rpidos.
A NVIDIA ento sabia que um hardware extremamente rpido assim, deveria conter
ferramentas intuitivas, por isso convidou Ian Buck para trabalhar na empresa, e comear a
desenvolver uma soluo para executar o C na GPU de forma melhor. Assim, a NVIDIA
apresentou em 2006 o CUDA, a primeira soluo para computao de propsito geral em
GPUs.
Compute Unified Device Architecture ou simplesmente CUDA uma plataforma de
computao paralela de propsito geral que tira proveito das unidades de processamento
grfico (GPUs) NVIDIA, para resolver muitos problemas computacionais complexos em uma
frao do tempo menor do que a necessria em uma CPU. Ela inclui a arquitetura de conjunto
de instrues CUDA ISA (Instruction Set Architecture) e o mecanismo de computao paralela
na GPU. Para programar segundo a arquitetura CUDA, os desenvolvedores hoje em dia podem
usar a linguagem C - uma das mais amplamente utilizadas linguagens de programao capaz
de realizar operaes de baixo nvel, que pode ser ento executada com alta performance em
um processador compatvel com CUDA. Outras linguagens tambm so admitidas, como
FORTRAN.
Ele expe os diferentes tipos de memria da placa e obriga que o desenvolvedor
configure os acessos da memria global, a cache, a quantidade e a disposio das threads. O
desenvolvedor tambm ser responsvel por escalonar as atividades entre a GPU e o CPU.
Esta tecnologia tem um uso bastante variado, seja para realizar clculos para
propriedades fsicas em jogos, identificar placas ocultas em artrias, analisar fluxo do trfego
areo e visualizao de molculas.
Em verses antigas do CUDA Toolkit, era possvel desenvolver mesmo sem ter o
hardware necessrio, usando um emulador, mas a partir da verso 3.0, essa funcionalidade
no mais suportada.
Benefcios
Leitura paralela - o cdigo pode ler de endereos arbitrrios na memria;
Memria compartilhada - CUDA expe uma regio de memria compartilhada rpida
(16KB em tamanho) que podem ser compartilhados entre threads. Isso pode ser usado
como um cache de usurio, permitindo maior largura de banda do que possvel
utilizando textura lookups;
Downloads mais rpidos e readbacks para a GPU;
Suporte completo para operaes de nmeros inteiros e operaes de bitwise;
Limitaes
A renderizao de texturas no suportado;
As cpias realizadas entre uma memria e outra podem gerar algum problema na
performance das aplicaes;
Ao contrrio do OpenCL, o CUDA est disponvel apenas para placas de vdeo fabricadas
pela prpria NVIDIA. Caso seja usado em outro tipo de placa, o CUDA funcionar
corretamente, entretanto a performance ser bem limitada;
O objetivo desse relatrio ser apresentar a uma comparao de desempenho entre os
processamentos dos filtros entre as tecnologias Java e Cuda.
2. Metodologia
Nessa seo, falaremos sobre a metodologia utilizada na experincia.
2.1 Linguagem de programao JAVA
Java uma linguagem de programao que permite programadores a escrever
instrues para o computador usando uma linguagem de alto-nvel que pode ser lida e escrita
facilmente por humanos. O Java foi criado no comeo dos anos noventa por um time liderado
por James Gosling da Sun Microsystems. Foi originalmente desenhado para uso em aparelhos
digitais mveis, como celulares. Mas quando o Java 1.0 foi lanado para o pblico em 1996,
seu principal foco tinha mudado para o seu uso na Internet .
Atualmente o Java usado tanto em aplicaes para internet quanto em aplicaes
desktop. Uma dcada depois do seu lanamento, o Java j era extremamente popular, com
mais de 6.5 milhes de desenvolvedores ao redor do mundo. Entre as caractersticas da
linguagem encontram-se: a facilidade de uso, a confiabilidade, a segurana, e a independncia
de sistemas operacionais e hardware .
2.2 Linguagem de programao C++
O C++ uma linguagem de programao de nvel mdio, baseada na linguagem C. O
desenvolvimento da linguagem comeou na dcada de 80, por Bjarne Stroustrup. O objetivo do
desenvolvimento desta linguagem era melhorar uma verso do ncleo Unix. Para desenvolver
a linguagem, foram acrecentados elementos de outras linguagens de vrios nveis, na tentativa
de criar uma linguagem com elementos novos, sem trazer problemas para a programao. No
inicio do desenvolvimento, a linguagem usava um pr-processador, mais Stroustrup criou um
compilador prprio, com novas caracteristicas.
A primeira verso oficial do C++ apareceu em 1985, juntamente com o livro The C++
Programming Language, que esclareceu vrios pontos sobre o C++. Em 1989 foi lanada uma
segunda verso da linguagem, com acrscimo das caractersticas: Herana mltipla, classes
abstratas, mtodos estticos, mtodos constantes e membros protegidos, incrementando
tambm um suporte de orientao a objeto.
O C++ possui uma quantidades de cdigos, pois alm de seus cdigos, pode contar
com vrios da linguagem C. Esta variedade possibilita a programao em alto e baixo nveis. O
C++ apresenta grande flexibilidade, embora seja bom, este fato faz com que a programao
seja muito mais cuidadosa para no terem erros.
Como CUDA d suporte a linguagem C++, usamos essa linguagem para fazer os
testes.
2.3 Ambiente de desenvolvimento JAVA
O Eclipse Kepler foi construdo sobre a plataforma do Eclipse 4.x, escolhida como base
para futuras verses desde o lanamento do Eclipse Juno no ano passado. Em 2012, o
lanamento da verso 4.2 foi acompanhado pelo da verso 3.8; dessa vez no existe verso
3.9. Alm disso, a srie 3.x no tem sido mantida desde janeiro de 2013 e no h atualizaes
planejadas.
Desse modo, para usurios que queiram usar as novas funcionalidades do Kepler, o
nico caminho adotar a verso 4.3. Alguns plug-ins como o EGit j abandonaram o suporte a
verses 3.x e vo se concentrar somente nas verses 4.x em diante.
Usamos essa IDE para fazer os filtros em JAVA.
2.4 Ambiente de desenvolvimento C++
Usamos a ferramenta do Visual Studio 2008 para fazer os filtros em CUDA. O Visual
C++ 2008 Express Edition continua apresentando sua caractersticas para uma programao
simples, porm com nvel profissional e acessvel para todos os usurios, desde os mais
experientes at os novatos em programao.
O programa de carter e nvel profissional, pois permite desenvolver as mais variadas
aplicaes, sejam elas de console, janela, APIs para ambiente Windows, API DirectX,
aplicaes de 64 bits e at .NET Framework. Ele possui uma ampla variedade de bibliotecas,
atendendo s necessidades de usurios iniciantes e avanados.
2.5 Filtros de Imagens
Utilizamos dois filtros de imagens para realizarmos os nossos testes: Filtro da Mdia e
o Filtro da Convoluo. Escolhemos esses dois filtros por serem fceis de serem
implementados e tambm eram os filtros que tnhamos mais conhecimentos do funcionamento
deles.
2.5.1 Filtros da Mdia
O filtro da mdia uma tcnica que permite a reduo de rudo em uma imagem.
Considerando uma dada vizinhana, o mtodo consiste em calcular a mdia de todos os
pontos dentro desta vizinhana para cada pixel da imagem original.
No nosso experiemento, usamos uma vizinhana de de tamanho nove. Ou seja,
utilizamos uma matriz 9x9 para fazer o filtro da mdia nas imagens.
2.5.2 Filtros da Convoluo
Os filtros de convoluo podem ser calculados de forma espacial ou no domnio da
frequncia. Filtros no domnio espacial tm a vantagem de no requerirem nenhuma
transformao e operam diretamente sobre os pixels da imagem. So eles (filtros espaciais)
que sero abordados nesta pgina. Para facilitar a compreenso de filtros de convoluo
espaciais, primeiro lida-se com a aplicao deles em imagens em escala de cinza, para depois
ento ser discutido algo sobre sua aplicabilidade em imagens coloridas.
O clculo de filtros de convoluo em imagens feito usando uma mscara ou kernel
que multiplicado pelos valores de intensidade da imagem. A aplicao desta mscara na
imagem atual gera uma imagem nova de mesmas dimenses.
A mscara que usamos para fazer os testes as imagens foi essa:

1.0 0.0 -1.0
1.0 0.0 -1.0
1.0 0.0 -1.0

A formula da convoluo:





3. Resultados e Discusses
Usamos esta imagem para fazer os testes:

Figura 1
Para comparar os resultados, testamos os filtros da Media e Convoluo usando os
mesmos parmetros tanto com CUDA quanto em JAVA.
3.1 Filtro da Media
Como j foi dito, usamos uma matriz 3x3 para fazer o filtro da Mdia. Usando JAVA
obtivemos um tempo de processamento em torno de 652 milisegundos. Enquanto em CUDA,
tivemos um resultado muito melhor, 6 milisegundos.
A imagem da figura 2 mostra a foto original e da figura 3 mostra a imagem depois que
aplicamos o filtro da mdia nas duas tecnologias.


Figura 2 Figura 3


3.2 Filtro da Convoluo
No filtro da convoluo, os tempos obtidos foram de 328 milisegundos usando JAVA e 5
milisegundos em CUDA. As imagens dos resultados do processamento esto logo abaixo, a
figura da esquerda a imagem original e o da direita a imagem aps ser aplicado o filtro.

figura 2 figura 4
Portanto, observamos que o processamento das imagens em CUDA foi superior ao
JAVA. Isso acontece, pois CUDA trabalha quase que diretamente nas GPUs, com isso,
aumenta a velocidade de processamento das imagens, enquanto em JAVA no, j que o
cdigo ainda deve passar por uma mquina virtual que transforma o cdigo em bytescode para
que a CPU possa processar a os comandos, e isso leva tempo.
4. Consideraes Finais e Trabalhos futuros
Depois de analisar os testes acima, conclumos que CUDA a melhor ferramenta para
trabalhar com imagens do que JAVA. No entanto, existe restries no uso do CUDA como j foi
mencionado na introduo, dentre essas restries, acreditamos que a maior dela seja que
CUDA s trabalhe nas placas de vdeo da NVIDIA. Diferentemente de JAVA que pode trabalhar
em qualquer placa de vdeo.
Para os trabalhos futuros, queremos fazer mais teste com outros filtros de imagens.
Queremos tambm fazer anlise de performance entre JAVA, CUDA e Matlab, que um
software interativo de alta performance para clculos nmericos, matrizez e processamentos de
sinais.


5.Referncias
CUDA SAMPLES: REFERENCE MANUAL - Disponvel em:
<http://www.ecse.rpi.edu/~wrf/wiki/ParallelComputingSpring2014/nvidia/CUDA_Samples.pdf>.
Acesso em: 25 de julho de 2014.

BILATERAL FILTERING WITH CUDA - Disponvel em:
<http://cs.au.dk/~staal/dpc/20072300_paper_final.pdf>. Acesso em: 25 de julho de 2014.

CONSIDERAES DE DESEMPENHO EM CUDA - Disponvel em:
<http://pt.slideshare.net/souzatharsis/consideracoes-de-desempenho-em-gpgpu-e-cuda#>.
Acesso em: 25 de julho de 2014.

NVIDIA CUDA: O QUE E COMO FUNCIONA - Disponvel em:
<http://www.tecmundo.com.br/computacao-grafica/10507-nvidia-cuda-o-que-e-e-como-
funciona.htm>. Acesso em: 28 de julho de 2014.

COMPUTE UNIFIED DEVICE ARCHITECTUR - Disponvel em:
<http://pt.wikipedia.org/wiki/CUDA>. Acesso em: 28 de julho de 2014.

http://java.about.com/od/gettingstarted/a/whatisjava.htm, Acessado em 13 de agosto de 2014.

http://www.infoq.com/br/news/2013/07/eclipse-kepler , Acessado em 21 de agosto de 2014.

http://www.infoescola.com/informatica/cpp/, Acessado em 18 de agosto de 2014.

Potrebbero piacerti anche