Artigo: https://1drv.ms/b/s!Aq6i6K-GwXx8qVfWNmmUzr9FJ0nE
Este artigo avalia a implementação de algoritmos concorrente e paralelo para realizar a convolução 2D, uma operação usada com frequência na implementação de filtros espaciais para processamento de imagens. Os algoritmos foram desenvolvidos em linguagem de programação paralela CUDA (Compute Unified Device Architecture), explorando recursos de
GPU’s, e em linguagem C com a API de programação de memória compartilha OpenMP, utilizando os recursos das CPU’s. Ao final, o artigo discute a redução do custo computacional da convolução 2D comparando essas abordagens com a implementação convencional, sequencial, realizada em CPU.
2. PARALELIZAÇÃO DE ALGORITMOS
DE VISÃO COMPUTACIONAL
WENDEL DE OLIVEIRA SANTOS
MAURICIOTORRES
Dr. LEONARDO NOGUEIRA MATOS
25/04/2013
3. Introdução
O algoritmo da convolução é bastante utilizado na
obtenção de filtros lineares em processamento de
imagens [Gonzalez and Woods 2001] e [Pedrini and
Schwartz 2008].
25/04/20133/19
4. Problemática Proposta
Complexidade convolucional 2D é na ordem O(mnMN),
onde m e n são as dimensões da máscara e M e N as
dimensões da imagem;
Custo elevado e influenciado pelo tamanho das imagens e
das máscaras.
25/04/20134/19
5. Objetivos
Reduzir o custo computacional da convolução 2D
utilizando a API OpenMP em programação concorrente e
programação paralela abordando CUDA;
Ao final, será comparado essas visões com a
implementação sequencial da convolução 2D.
25/04/20135/19
6. Convolução 2D
Feita na forma matricial e multiplicação vetorial;
Na forma matricial, o cálculo do resultado pixel a pixel,
onde cada valor resultante é a soma ponderada da
multiplicação entre os termos da máscara com a imagem
original.
Figura 1: Exemplo gráfico do cálculo da convolução 2D feito intuitivamente.
25/04/20136/19
7. Convolução 2D
Na multiplicação vetorial da imagem pela máscara;
Necessidade de custo de memória elevado;
Implementado paralelamente é mais vantajoso;
A soma é feita de forma dois a dois;
Diminui o custo desta etapa de forma logarítmica.
25/04/20137/19
8. Algoritmo Utilizando CUDA
Para realizar a convolução paralela:
Cada thread fica responsável pelo cálculo de um pixel;
Uma thread era percorrida a máscara e cada um de seus
elementos foram multiplicado com o valor de endereço
correspondente na imagem original, o resultado desse produto
era somado com o próximo endereço da máscara multiplicado
com o endereço correspondente na imagem até que toda a
máscara fosse percorrida.
25/04/20138/19
9. Algoritmo Utilizando OpenMP
Para realizar a convolução concorrente:
A imagem foi dividida em quadrantes de tamanhos iguais;
A quantidade de quadrantes é uma exponenciação, ex:
(1,4,9,16);
Cada thread fica responsável por um quadrante;
Cada thread tem uma identificação, utilizada no cálculo da
quantidade de quadrantes;
Cada thread tem seus cálculos privados.
25/04/20139/19
10. Comparação dos Tempos de Execução dos
Algoritmos
Paralelo com o Sequencial;
Concorrente com o Sequencial;
Utilizado uma máscara de média e uma imagem, cujos
elementos variam de 0 à 127 pixels;
Fixado o tamanho da imagem em 800x600 pixels e
variado a máscara de 5x5 até 65x65 pixels e obtido os
valores de tempo (em milissegundos) de execução dos
algoritmos paralelo e sequencial. Depois fixada a máscara
em 65x65 pixels e variou-se o tamanho da imagem de
100x100 até 700x700 pixels;
Foi utilizado linhas de tendência para encontrar o melhor
tempo do algoritmo sequencial em relação ao algoritmo
paralelo e concorrente.
25/04/201310/19
12. Utilizando CUDA
No melhor caso, o tempo de execução sequencial são
58,858 milissegundos mais lento do que o tempo de
execução do algoritmo paralelo, com a largura da máscara
em 1,5421 pixels.
Figura 3: Comparação entre os tempos de execução paralela e sequencial
modificando apenas o tamanho da máscara.
25/04/201312/19
13. Utilizando CUDA
No melhor caso, o tempo de execução sequencial são
5,581 milissegundos mais rápidos do que o tempo de
execução do algoritmo paralelo, com a largura da imagem
em 25,64 pixels.
Figura 4: Comparação entre os tempos de execução paralela e sequencial
modificando apenas o tamanho da imagem.
25/04/201313/19
15. Utilizando OpenMP
O algoritmo sequencial (melhor desempenho possível em
relação ao algoritmo paralelo), com largura da máscara
em 0,1128, são 2,7507 milissegundos mais rápidos.
Figura 6: Comparação entre os tempos de execução concorrente e
sequencial modificando apenas o tamanho da máscara.
25/04/201315/19
16. Utilizando OpenMP
Foi encontrada a largura da imagem igual a 0,47550 pixels,
com esse valor, o tempo de execução sequencial são
40,582 milissegundos mais lentos do que o tempo de
execução do algoritmo concorrente.
Figura 7: Comparação entre os tempos de execução concorrente e
sequencial modificando apenas o tamanho da imagem.
25/04/201316/19
17. Conclusão
Em CUDA, o desempenho foi muito satisfatório, sendo
bastante superior a implementação sequencial e também
superior a OpenMP. Esse desempenho mostrou-se
apropriado para convolução 2D, com melhoria de
desempenho de cerca de 800% em um dos experimentos
realizados.
25/04/201317/19
18. Referências
Gonzalez, R. and Woods, R. (2001). Digital Image
Processing, Prentice Hall, 2th edition.
Pedrini, H. and Schwartz,W. R. (2008).Análise de Imagens
Digitais: Princípios,Algoritmos e Aplicações, Cengage
Learning.
25/04/201318/19