Vous êtes sur la page 1sur 6

Uma Implementa cao em Paralelo para o Metodo de

Interpolac ao Inverso da Distancia Ponderado(IDW)


Andrey Rodrigues
8 de Julho de 2013
1 Introducao
Com o avanco dos hardwares de computa cao massivamente paralelo (GPUs),
o mundo da computacao esta olhando para outro tipo de perspectiva: a com-
putacao massivamente paralela. Muitos problemas, que antes eram solucio-
nados por algoritmos simplesmente sequenciais, possuem uma caracterstica
que permitem facilmente a construcao de algoritmos paralelos similares, eles
sao chamados algoritmos bag of tasks. Um deles e o inverso da distancia
poderado(IDW), um algoritmo de interpolacao muito usado em dados ge-
ogracos. Nestre trabalho, vamos avaliar as diferencas no tempo de proces-
samento e a construcao de uma aplicacao utilizadora de 3 implementacoes
do IDW: sequencial, paralela e massivamente paralela(GPU). Primeiro va-
mos apresentar os algoritmos e falar sobre a tecnologia usada na GPU, e
depois apresentar a arquitetura do sistema e os testes realizados.
2 Interpolacao IDW
O metodo inverso ponderado da distancia (IDW), estima o valor de um
ponto desconhecido na area de calculo usando a combinacao linear dos va-
lores conhecidos, ponderado pelo inverso da distancia do ponto de interesse
aos pontos conhecidos. O metodo assume que os valores dos pontos desco-
nhecidos serao similares aos valores dos pontos conhecidos mais proximos.
O calculo pode ser expresso atraves da formula:

i
=
1/d
p
i

n
i=1
1/d
p
i
onde d
i
e a distancia entre x
0
e x
1
e p e o parametro de potencia e n
representa o n umero de pontos conhecidos no calculo. O fator de maior
importancia na acuracia do IDW e o parametro p. O peso diminui a medida
1
que a distancia aumenta, especialmente quando o fator p aumenta. Porem,
como o objetivo deste trabalho nao e avaliar a acuracia do algoritmo, mas sim
a execu cao do mesmo algoritmo em um ambiente distribudo, estabelecemos
o valor de p = 2.
3 Princpios basicos de CUDA
O CUDA extende a linguagem de programacao C, possibilitando o progra-
mador denir uma fun cao em C usando a declaracao:
__global__ void func~ao(){...}
que e chamada kernel, a qual sera executada em uma placa graca em
varias threads simultaneas. O programa CUDA e dividido em 2 partes:
a implementacao da CPU no lado hoste a implementacao da GPU no
lado device(placa graca). A GPU possui varios Streaming Multiproces-
sor(SM), que sao responsaveis por criar, gerenciar e carregar a execucao de
grupos de threads, atualmente 32, (chamados wrap). As threads sao or-
ganizadas em blocos(Block) e varios blocos de threads sao organizados em
grids(Grid). Finalmente o Kernel e chamado no lado host, pelo codigo:
func~ao<<<Grid, Block>>>(par^ametros...).
4 Kernel IDW
O kernel da interpolacao IDW recebe como parametro a posicao de calculo
atual(linha e coluna), bem como o conjunto de pontos conhecidos. O kernel
faz o somatorio do inverso das distancias e retorna o valor da interpola cao
para os parametros dados. Em CUDA, o kernel foi implementado da seguinte
maneira:
1. Recebe como parametro o n umero de linhas e colunas maximo da
matriz de calculo.
2. Calcula a posicao atual (linha e coluna) na matriz da thread que esta
executando o kernel.
3. Executa a funcao de interpola cao.
4. Salva o resultado interpolado na matrix nal.
2
5 Arquitetura
A gura 1 mostra o diagrama de classes do sistema. Nota-se a preocupacao
com a transparencia de acesso e comunicacao no ponto de vista da classe
InterpolatoExecutor, que e o cliente da interpola cao. A fabrica IDWInterpo-
lateFactory utiliza os parametros passados para instanciar o melhor metodo.
No estado atual do sistema, o cliente especica qual e o metodo que sera
instanciado, porem a arquitetura permite a eliminacao deste parametro, de
forma que o cliente ainda sim utilize qualquer implementacao do metodo,
cando totalmente transparente o acesso e localizacao dos recursos.
Figura 1: Diagrama de classes do sistema
As classes implementadoras da interface IDWInterpolateMethod, obtem
o kernel em diferentes localiza coes,porem o algoritmo e o mesmo. A unica
diferenca e a linguagem, ja que o IDWGPUKernel e escrito em C, e o IDW-
Kernel e escrito em Java.
6 Experimentacao
Como experimento, foi implementado um sistema em JAVA utilizando swing,
para executar 3 formas de c alculo do IDW a m de compara cao. O Kernel do
3
IDW foi escrito em duas versoes: uma para a GPU, utilizando a API CUDA,
e uma para a CPU, escrita em JAVA. A similadidade e a otimiza cao dos dois
kernels, foi uma preocupac ao, a m de evitar possvels discrepancias. Antes
de realizar os testes, os trechos de codigo foram executados o n umero de ve-
zes necessarios para o JIT do JAVA perceber os pontos quentesdo codigo
e compilar, otimizando-o.
6.1 Testes
A m de analisar a direfen ca de desempenho dos metodos foram preparados
os seguintes testes:
1. Verica cao da melhor quantidade de threads para o calculo na CPU.
2. Comparacao do tempo de execucao da interpolacao IDW com os ta-
manhos de grid: 100*100, 200*200, 300*300, 500*500, 1500*1500,
2000*2000, 3000*3000, 4000*4000, 5000*5000.
As conguracoes de processadores para este experimento foram:
CPU: Core i7Intel i7-2630QM / 2 GHz ( 2.9 GHz ). Numero de processadores: 8.
GPU: NVIDIA GForce 540M. 2GB DDR5. Numero de processadores: 96.
6.1.1 Teste 1
Para vericar a melhor quantidade de threads para o calculo em paralelo na
CPU, foi escolhido um tamanho de grid 5000*5000, com 10 pontos conheci-
dos e vericado para as quantidade de threads: 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15,16, 20, 25, 30, 40, 50. Para cada n umero de threads, o metodo foi
executado 5 vezes e a media dos tempos foi usada como resultado nal do
tempo. A tabela 1 mostra o tempo para cada valor do n umero de threads.
Como resultado deste experimento, percebe-se que nao ha menhora signi-
cativa na performance do calculo quando o n umero de threads ultrapassa,
o n umero de processadores da CPU (8). Por isso, na classe implementa-
dora do algoritmo em paralelo na CPU, e usada uma funcao que retorna a
quantidade atual de processadores do computador.
4
Tabela 1: Tempo de execucao para diferente n umero de threads
6.1.2 Teste 2
Para cada valor da matriz de interpola cao, variando entre 100 e 5000, foram
calculados pontos conhecido aleatorios com tamanho 10% da dimensao da
matriz. Para os mesmo pontos, uma matriz de interpolacao foi encontrada
para os 3 metodos distintos: Sequencial, Paralela, GPU. A tabela 2 mostra
o resultado da comparacao de valores.
Tabela 2: Tempo de execucao para os 3 metodos de interpola cao IDW
Verica-se claramente, o grande ganho de performance no calculo da
interpola cao, principalmente a partir de tamanhos da matriz 500*500, de-
vido o aumento do n umero de pontos conhecidos, alem do n umero de pon-
5
tos desconhecidos, que precisam ser calculados. Mesmo a GPU contento
uma quantidade muito maior de processadores, eles nao conseguem ser tao
rapidos quanto os da CPU. Porem, evidencia-se a grande vantagem da GPU,
que neste caso, com um custo monetario mais acessvel, consegue obter uma
performance 10x melhor que a CPU.
7 Conclusao
O sistema desenvolvido mostra o exemplo do ganho de performance do
calculo envolvido utilizando computacao paralela. A arquitetura permite
a abstra cao da localizacao e acesso dos metodos de calculo. O cliente nao
precisa se preocupar por exemplo, com a representa cao dos dados escrito
em CUDA, e a conversao de Java para C. Tambem ca transparente a lo-
calizacao dos recursos, ja que o calculo na GPU e localizada em um outro
hardware, com outros processadores e tipo de de memoria. Outro exem-
plo que seria facilmente implamtado, seria o uso de APISs de computa cao
paralela em sistemas de memoria compartilhada, como o OpenMP.
6