O documento propõe acelerar algoritmos de visão computacional em sistemas embarcados utilizando GPUs embarcadas através de OpenGL ES 2.0. O autor desenvolve e avalia o desempenho de aplicações de processamento de imagens em GPU comparando com implementações em CPU utilizando OpenCV. Os resultados demonstram ganhos de desempenho significativos ao executar algoritmos como o filtro de Sobel na GPU.
Estação de Controle Multimídia com Interface Web utilizando Sistema Operacion...
Proposta para Aceleração de Desempenho de Algoritmos de Visão Computacional em Sistemas Embarcados
1. 1
Proposta para aceleração
de desempenho de
algoritmos de visão
computacional em
sistemas embarcados
André Márcio de Lima Curvello
Orientador: Prof. Dr. Evandro Luís Linhari Rodrigues
2. 2
Sobre mim
André Márcio de Lima Curvello
Engenharia de Computação – USP São Carlos
MBA em Gestão de TI – UNIFRAN
Defesa em Processamento de Sinais e Instrumentação – USP EESC
3. 3
“Se vi mais longe foi por estar de
pé sobre ombros de gigantes
Isaac Newton
6. 6
1. História
▸ Acorn Risc Machine
▸ Linux Embarcado – 94 a 97
▸ OpenCV - 1999
▸ Indústria, Eletrônica, Consumo
▸ Pesquisa e Desenvolvimento
Fonte: www.anytux.org Fonte: Sharp.com Fonet: www.open-electronics.org
7. 7
1. História
▸ Estado da Arte
▸ Gestos, Interação Visual
▸ Novos desafios
Fonte: Samsung.com Fonte: talkandroid.com
8. 8
Motivação
▸ Uso cada vez maior de dispositivos com recursos de
processamento de imagens – Wilson e Dipert, 2013;
▸ Processadores ARM consomem menos energia do que
processadores de outras arquiteturas.
▸ Arquiteturas recentes possuem desempenho
gradativamente maior;
▸ Agregação de componentes como GPUs, unidades
coprocessadoras e DSPs no SoC ARM.
Fonte: www.arstechnica.com
9. 9
Contribuição
▸ Como rotinas de Processamento de Imagens
podem ser computadas em GPUs embarcadas
por meio de OpenGL ES 2.0;
▸ Detalhamento da aplicação de OpenGL ES 2.0
em sistemas embarcados com Linux;
▸ Aplicação do Filtro de Sobel em GPU embarcada
com OpenGL ES 2.0;
▸ Comparativo da sua execução em CPU com
OpenCV.
10. 10
▸ Desenvolver e avaliar a execução de aplicações
com rotinas de processamento de imagens em
GPU embarcada com uso de OpenGL ES 2.0
▸ Comparar seu desempenho frente a uma aplicação
equivalente executada em CPU.
1.4 Objetivos
12. 12
2.1 Trabalhos Publicados
▹Wilson e Dipert (2013)
▹Embedded Vision on Mobile Devices – Oportunities and Challenges
▹Até 2017:
▹ Cerca de 600 milhões de celulares smartphones com
funcionalidades de controle gestual, por meio de visão
computacional
▹Desafios de visão computacional em dispositivos móveis
▹Novos arranjos arquiteturais para aumento de performance
▹Desafios na otimização de rotinas e uso eficiente de recursos
13. 13
2.1 Trabalhos Publicados
▹Pulli et. al. (2012)
▹Realtime Computer Vision with OpenCV
▹Otimização de rotinas de visão computacional para
a plataforma NVIDIA Tegra 3
▹Autores também destacam a falta de otimizações,
desafios e exigências para processamento de
rotinas destinadas à visão computacional em
tempo real.
14. 14
2.1 Trabalhos Publicados
▹Maghazeh et. al. (2013)
▹General Purpose Computing on Low-Power Embedded
GPUs: Has it Come of Age?
▹Comparativo
• Arquitetura Embarcada i.MX6:
SoC ARM Cortex A9 + GPU Vivante GC2000: 4 núcleos
• Arquitetura desktop
CPU Intel Xeon E5520 + GPU NVIDIA Tesla M2050: 448 núcleos
▹Avaliação de desempenho com base em tempo gasto para
processar convolução de matrizes.
15. 15
2.1 Trabalhos Publicados
▹Roberts-Huffman e Hedge (2009)
▹ARM Cortex-A8 vs Intel Atom: Architectural and Benchmark Comparisons
▹Comparação de desempenho entre um sistema embarcado ARM e
outro sistema embarcado x86
▹Arquiteturas:
▹SoC OMAP 3530
▹Intel Atom N330
▹Abordagem:
▹Realização de cálculos de benchmark e comparação frente à
consumo energético.
16. 16
2.1 Trabalhos Publicados
▹Coombs e Prabhu (2011)
▹OpenCV on TI’s DSP+ARM platforms: Mitigating the Challenges of
porting OpenCV to embedded Platforms
▹Avaliação de ganhos de desempenho com uma
arquitetura ARM e DSP em conjunto;
▹Foco em aplicações de visão
computacional com as rotinas
da biblioteca OpenCV;
Fonte: Coombs e Prabhu (2011)
17. 17
2.1 Trabalhos Publicados
▹Ali (2013)
▹Estudo comparativo entre abordagens de programação
paralela para GPU e CPU
▹Tristam e Bradshaw (2010)
▹Investigating the Performance and Code Characteristics of Three
Parallel Programming Models for C++
▹Thouti e Sathe (2012)
▹Comparison of OpenMP & OpenCL Parallel Processing
Technologies
18. 18
2.2 Processadores ARM
▹Arquitetura de processadores RISC de baixo
consumo elétrico;
▹Amplo uso em sistemas e aplicações embarcadas
▹Atualmente:
▹Arquiteturas de 32 e 64 bits
▹Processadores de 1, 2, 4 e 8 núcleos
19. 19
▹Biblioteca de Processamento de Imagens e de visão
computacional
▹Código aberto
▹Grande gama de funções implementadas
▹C, C++, Java, Python e outras.
▹Estrutura modular
▹Interface gráfica
▹Processamento de imagens
▹Processamento de vídeo
▹Dentre outras.
2.3 OpenCV
20. 20
2.4 OpenMP
▹Plataforma facilitadora para o desenvolvimento
de aplicações com foco em execução de rotinas
paralelas.
▹Controlada por meio de
▹Diretivas de compilação
▹Rotinas em tempo de execução
▹Variáveis de ambiente
▹Melhor abstração da organização de threads
21. 21
2.5 Threading Building Blocks
▸TBB – Threading Building Blocks
▹Iniciativa da Intel de prover recursos de
paralelização de código
▹Abstração em nível de orientação a objetos
▹Tarefas que serão paralelizadas são chamadas de tasks
▹Somente usada em linguagens orientadas a objetos
22. 22
2.6 OpenCL
▹Desenvolvido e mantido pelo consórcio Khronos
Group
▹Mapeamento de sistemas
homogêneos ou heterogêneos
▹Arranjos envolvendo CPUs e GPUs
www.drdobbs.com
23. 23
2.6 OpenGL ES 2.0
▸ Conjunto de Rotinas para
Computação Gráfica
▸ Sistemas Embarcados
▸ Execução na GPU
▸ Programas
▹ Vertex Shader
▹ Fragment Shader Fonte: http://glslstudio.com
30. 30
3.2 Benchmarks
Dhrystone
Reinhold P. Weicker,
1984;
Objetivo:
Representar o poder
computacional de um
sistema com números
inteiros.
Linpack
Jack Dongarra, 1977
Pacote Linpack de
rotinas de álgebra
linear;
Objetivo:
Avaliar desempenho de
operações com
matrizes.
Whetstone
Harold Curnow, 1972
Objetivo:
Avaliar o desempenho
na operação de
cálculos com ponto
flutuante.
▸ Com base no trabalho de Roberts-Huffman e
Hedge (2009)
32. 32
3.4 Instalação e Compilação
▸ apt-get
▸ wget
▸ Compilação de Fontes
▸ Instalação do Driver Vivante GC2000 - GAL
33. 33
3.5 Medida de Tempo
▸ getTickCount - OpenCV.
-Retorna o número de pulsos de operação
(ticks)
▸ getTickFrequency - OpenCV
-Retorna o número de pulsos de operação
(ticks) do sistema em segundos.
37. 37
3.6.3
Recuperação de
Imagem em GPU
com OpenGL
-glReadPixels()
-FrameBuffer
-OpenCV – Mat
-Flip
Fonte: http://vgl-ait.org
Fonte: http://vgl-ait.org
39. 39
Dados de
desempenho
Dhrystone (VAX
MIPS)
Whetstone (MIPS) Linpack (MFLOPS)
WandBoard Quad 1638,98 1523,84 146,89
BeagleBoard 822 100 23,376
Atom 330 Desktop 1822 1667 933,638
4 - Benchmark
Com base em Roberts-Huffman e Hedge (2009)
40. 40
4 - OpenCV em CPU
OpenCV CPU
Resolução 320x240 640x480 800x600 1280x720
Medidas de
Tempo (ms)
2,83E-05 0,000109769 0,000152647 0,000307357
3,24E-05 0,000102529 0,000152733 0,000310978
5,62E-05 0,000102579 0,00015291 0,000311881
5,03E-05 0,000101179 0,000152943 0,000310435
3,84E-05 0,000116182 0,000152936 0,000310143
2,64E-05 0,00010251 0,000153007 0,0003102
2,26E-05 0,000103326 0,000153617 0,000312846
4,43E-05 0,000113962 0,00015354 0,000312418
3,24E-05 0,000103281 0,000153403 0,000311069
2,27E-05 0,000114308 0,00015816 0,000311189
Tempo Médio
Total (ms)
3,54058E-05 0,000106963 0,00015359 0,000310852
41. 41
4 - OpenGL em GPU
Renderização de OpenGL ES 2.0 em GPU
Resolução 320x240 640x480 800x600 1280x720
Medidas de
Tempo (ms)
1,53153E-05 1,48E-05 1,54E-05 2,70E-05
2,16E-05 2,96E-05 3,48E-05 4,84E-05
1,31E-05 1,46E-05 1,56E-05 2,45E-05
1,48E-05 1,46E-05 1,66E-05 2,66E-05
1,22E-05 1,48E-05 3,28E-05 5,01E-05
1,52E-05 2,04E-05 2,10E-05 2,38E-05
1,44E-05 2,01E-05 1,53E-05 2,74E-05
1,35E-05 1,42E-05 2,96E-05 4,93E-05
1,35E-05 1,44E-05 1,62E-05 2,40E-05
1,20E-05 1,63E-05 1,61E-05 2,80E-05
Tempo Médio
Total (ms)
1,45508E-05 1,73804E-05 2,13568E-05 3,29113E-05
42. 42
4 – OpenCV vs OpenGL
0
0,00005
0,0001
0,00015
0,0002
0,00025
0,0003
0,00035
320x240 640x480 800x600 1280x720
Tempoemms
Resolução
Execução de Sobel em GPU com
OpenGL vs CPU com OpenCV
OpenGL GPU OpenCV CPU
44. 44
4 – Recuperação do Quadro da GPU com
OpenGL
Recuperação de Quadros de Imagem de OpenGL para OpenCV
Resolução 320x240 640x480 800x600 1280x720
Medidas de
Tempo (ms)
2,31E-06 1,94E-05 2,05E-05 3,75E-05
2,26E-06 1,07E-05 1,73E-05 3,69E-05
2,27E-06 1,38E-05 1,94E-05 4,22E-05
2,05E-06 1,01E-05 1,97E-05 4,97E-05
2,05E-06 1,02E-05 1,98E-05 5,66E-05
2,08E-06 1,02E-05 2,48E-05 3,75E-05
2,38E-06 9,40E-06 1,97E-05 3,77E-05
3,37E-06 1,82E-05 1,85E-05 3,72E-05
2,09E-06 1,05E-05 1,71E-05 3,71E-05
2,22E-06 1,05E-05 1,93E-05 3,75E-05
Tempo Médio
Total (ms)
2,31E-06 1,23E-05 1,96E-05 4,10E-05
45. 45
4 – Processamento em GPU com OpenGL +
Tempo de Recuperação
Tempo Total - Processamento + Recuperação de Imagem em OpenGL para OpenCV
Resolução 320x240 640x480 800x600 1280x720
Medidas de
Tempo (ms)
1,76E-05 3,42E-05 3,59E-05 6,45E-05
2,38E-05 4,03E-05 5,21E-05 8,53E-05
1,54E-05 2,84E-05 3,50E-05 6,66E-05
1,68E-05 2,47E-05 3,63E-05 7,64E-05
1,42E-05 2,51E-05 5,26E-05 1,07E-04
1,72E-05 3,06E-05 4,58E-05 6,13E-05
1,68E-05 2,95E-05 3,50E-05 6,51E-05
1,68E-05 3,24E-05 4,81E-05 8,64E-05
1,56E-05 2,49E-05 3,33E-05 6,11E-05
1,42E-05 2,68E-05 3,54E-05 6,55E-05
Tempo Médio
Total (ms)
1,69E-05 2,97E-05 4,10E-05 7,39E-05
46. 46
4 – Execução em GPU com OpenGL +
Tempo de Recuperação vs CPU com
OpenCV
1,69E-05
2,97E-05
4,10E-05
7,39E-05
3,54058E-05
0,000106963
0,00015359
0,000310852
0,00E+00
5,00E-05
1,00E-04
1,50E-04
2,00E-04
2,50E-04
3,00E-04
3,50E-04
320x240 640x480 800x600 1280x720
OpenGL GPU OpenCV CPU
47. 47
4 – Ganho de Desempenho Total
2,1
3,6
3,8
4,21
0
0,5
1
1,5
2
2,5
3
3,5
4
4,5
320x240 640x480 800x600 1280x720
Ganho de Desempenho Total com GPU com
OpenGL VS CPU com OpenCV
50. 50
Ganho de 9xOperando Diretamente em GPU
Real - 4xConsiderando a Recuperação do Quadro de imagem da GPU!
Desempenho?
51. 51
OpenGL 670 linhas
▸ Inicialização de OpenGL
▸ Compilação e loading de Shaders
▸ Operação direta em GPU
OpenCV - 70 linhas
▸ Uso de Bibliotecas Prontas – OpenCV
▸ Execução na CPU (+NEON)
52. 52
5 - Conclusões
▸ Pouca documentação sobre Processamento de Imagens em
GPU
▹ Application Note 4629 da Freescale
▸ Resultados podem ser aprimorados…?
▹ Técnica de recuperação dos quadros da GPU
▸ Programação da GPU via Shaders
▸ Dependência de Drivers para acesso a recursos da GPU
via OpenGL!
▹ Ponto a ser observado na plataforma-alvo
▹ Fabricante disponibiliza drivers?
53. 53
5 - Conclusões
▸ Ganho de desempenho vale o esforço?
▸ Em se tratando de sistemas embarcados, sim!
▸ Uso da GPU?
▸ No presente momento, há mais dispositivos embarcados
compatíveis com OpenGL ES 2.0 do que com OpenCL.
▸ Mais de 8 milhões de Raspberry Pi vendidas (Fonte: Raspberry Pi
Foundation)
▸ Aplicação em Robótica e Automação!
▸ Objetivo alcançado? Sim!
Fonte: https://www.khronos.org/