aplicações multicore com linux embarcado usando raspberry pi 2 - tdc2015
TRANSCRIPT
Globalcode – Open4education
Aplicações multicore com Linux Embarcado usando a Raspberry Pi 2
André Márcio de Lima CurvelloTrilha Embarcados
Globalcode – Open4education
Slide 2 de 40
Sobre o Palestrante
QualificaçãoEngenheiro de Computação pela USP de São Carlos
MBA em Gestão de TI pela UNIFRAN
Mestrando em Processamento de Sinais e Instrumentação pela USP de São Carlos - EESC
AtuaçãoProfessor Universitário – UNIFRAN
Desenvolvedor e Consultor
Articulista do Portal Embarcados
Globalcode – Open4education
Slide 3 de 40
Agenda
1. Linux Embarcado
2. Single Board Computers
3. Raspberry Pi 2
4. Programação Paralela
5. Sistema Linux
6. Bibliotecas
7. Demonstração
8. Resultados
9. Considerações Finais
Globalcode – Open4education
Slide 4 de 40
1 – Linux Embarcado
É o uso do Kernel Linux, juntamente com bibliotecas, drivers e demais arquivos, adaptados para dispositivos embarcados.
Com SoCs multicores Kernel para Linux Embarcado também passou por adaptações para suportar SMP – Multiprocessamento Simétrico.
O Kernel suportar é uma coisa. As aplicações usarem, é outra coisa...
Globalcode – Open4education
Slide 5 de 40
2 - Single Board Computers
Globalcode – Open4education
Slide 6 de 40
“Computadores de placa única”
Preço baixo – Normalmente a partir de $ 35
Baixo consumo – 5 a 20 W.
Crescente poder de processamento:Modelos recentes SoCs Multicore: 2 a 8 núcleos
Como usar esse poderio computacional?
2 - Single Board Computers
Globalcode – Open4education
Slide 7 de 40
3 - Raspberry Pi 2
Raspberry Pi 2 Modelo B900MHz quad-core ARM Cortex-A7 CPU
1GB RAM
4 Portas USB
40 pinos GPIO
Saída HDMI
Conexão com rede Ethernet
Entrada para cartão MicroSD
GPU VideoCore IV 3D
Preço: $ 35,00
Globalcode – Open4education
Slide 8 de 40
4 - Programação Paralela
Uso eficaz de recursos computacionais que permitem a execução paralela de comandos.
Task Based – Tratam de paralelizar sequências de ações – tarefas.
Data Based – Tratam de distribuir os dados para processamento.
Globalcode – Open4education
Slide 9 de 40
Uma ação sequencial Pode-se tornar uma ação paralela
Ganho de desempenho:•Faz a mesma coisa•Só que em menos tempo
4 - Programação Paralela
Dividir para conquistar!
Globalcode – Open4education
Slide 10 de 40
4 - Programação Paralela
AplicaçõesVisão Computacional
Inteligência Artificial
Robótica
Jogos
Computação de alto desempenho
Enfim: Tudo que tenha um processamento matemático pesado, executando em máquinas capazes de executar várias tarefas simultaneamente!
Globalcode – Open4education
Slide 11 de 40
4 - Programação Paralela
Uso de Threads.
Uso de MPI.
Uso de Bibliotecas (TBB e OpenMP).
Uso de coprocessadores para SIMD.
Gestão de tarefas e suas prioridades em nível de Sistema Operacional.
Vamos focar em Bibliotecas e gestão de tarefas...
Globalcode – Open4education
Slide 12 de 40
5 - Sistema Linux
Alocação de tarefa em núcleosO sistema pode, determinadamente, alocar tarefas em um ou mais núcleos.
É uma “mão na roda” para sistemas multicore.
Ex: Você pode ter 4 aplicações, cada qual rodando separadamente em 1 núcleo, num ambiente com 4 núcleos.
Globalcode – Open4education
Slide 13 de 40
5 - Sistema Linux
Alocação de tarefa em núcleosLinux taskset.
$ taskset –c <núcleo> aplicação
Para a Raspberry Pi 2, que possui 4 núcleos, os valores possíveis para <núcleo> são 0,1,2 e 3.
Vamos “forçar” a execução do programa minhaApp, no diretório corrente, nos núcleos 0 e 1:
$ taskset –c 0,1 ./minhaApp
Globalcode – Open4education
Slide 14 de 40
5 - Sistema Linux
O taskset é útil para gerenciar tarefas e sua execução em um ou mais núcleos.
Porém...O taskset é feito manualmente, e pode não ter a melhor abordagem para distribuir a tarefa entre os núcleos
É preciso algo mais...
Globalcode – Open4education
Slide 15 de 40
6 - Bibliotecas
Principais:OpenMP – Biblioteca para Fortran, C e C++.
Mantida pela OpenMP Architecture Review Board
Consórcio formado por empresas como IBM, AMD, Intel, dentre outras.
Globalcode – Open4education
Slide 16 de 40
6 - Bibliotecas
Principais:TBB – Biblioteca para código em C++
Desenvolvida pela Intel.
O desenvolvedor cria tasks – tarefas
São controladamente paralelizáveis.
Globalcode – Open4education
Slide 17 de 40
6 - Bibliotecas
Abstraem o “árduo” processo de paralelização de tarefas por meio de threads.
Possuem uma API que realiza o trabalho duro, bastando o desenvolvedor adaptar a aplicação.
Globalcode – Open4education
Slide 18 de 40
6 – Bibliotecas - Desafios
Evitar as seguintes condições:Race conditions
Deadlocks
Globalcode – Open4education
Slide 19 de 40
6 - Bibliotecas - OpenMP
API para coordenação de tarefas multi-threads em ambiente com memória compartilhada.
Composta de 3 elementos principais:Diretivas de compilação
Biblioteca com rotinas para código em execução
Variáveis de ambiente
Globalcode – Open4education
Slide 20 de 40
6 - Bibliotecas - OpenMP
Já vem instalado por padrão na distribuição Raspbian 2015-05-05
Por que será...?
Instalação em caso contrário:
Quase lá.
$ sudo apt-get install gcc g++ make libgomp1
Globalcode – Open4education
Slide 21 de 40
6 - Bibliotecas - OpenMP
Como disse anteriormente...
Multithread Beleza, vários núcleos em uso!
Memória compartilhadaCuidado!
Uma variável pode ser usada por várias threads...
Globalcode – Open4education
Slide 22 de 40
6 - Bibliotecas - OpenMP
É importante destacar que a biblioteca facilita o trabalho, e muito.
Adaptar o código para paralelização é uma tarefa do desenvolvedor.
Conhecer os recursos da API.
Saber tratar regiões de código paralelizáveis ou não
Tratar adequadamente variáveis compartilhadas, situações críticas, dentre outros.
Globalcode – Open4education
Slide 23 de 40
Problema Alvo
Multiplicação de matrizesVários laços de repetição aninhados
Vamos paralelizar?
Globalcode – Open4education
Slide 24 de 40
Problema alvo - Multiplicação de Matrizes:
Globalcode – Open4education
Slide 25 de 40
OpenMP - Multiplicação de Matrizes:
Globalcode – Open4education
Slide 26 de 40
OpenMP - Multiplicação de Matrizes:
Compilação do código para OpenMP:
$ g++ -O2 matrix-omp.cpp -fopenmp -o matrix-omp
Execução
$ ./matrix-omp
Globalcode – Open4education
Slide 27 de 40
6 - Biblioteca - TBB
Não está disponível nos repositórios oficiais do Raspbian.
Pode ser baixada/instalada pelo OpenCV durante processo de compilação da biblioteca (OpenCV).
Ou instalada manualmente...
Globalcode – Open4education
Slide 28 de 40
6 - Biblioteca - TBB
Instalação – download dos seguintes pacotes:libtbb2_4.2~20140122-5_armhf.deb
libtbb-dev_4.2~20140122-5_armhf.deb
Do repositório:
ftp://ftp.us.debian.org/debian/pool/main/t/tbb
Globalcode – Open4education
Slide 29 de 40
6 - Biblioteca - TBB
Instalação da forma:
Modificar arquivo:/usr/include/tbb/machine/gcc_armv7.h
Comentando as linhas:
E deixando a seguinte linha como:
$ sudo dpkg –i libtbb2_4.2~20140122-5_armhf.deb$ sudo dpkg –i libtbb-dev_4.2~20140122-5_armhf.deb
33. #if !(__ARM_ARCH_7A__) 34. #error compilation requires an ARMv7-a architecture. 35. #endif
56. #define __TBB_full_memory_fence() 0xffff0fa0
Globalcode – Open4education
Slide 30 de 40
6 - Biblioteca - TBB
Multiplicação de matrizes
Globalcode – Open4education
Slide 31 de 40
6 - Biblioteca - TBB
Multiplicação de matrizes
Globalcode – Open4education
Slide 32 de 40
OpenMP - Multiplicação de Matrizes:
Compilação do código para TBB:
$ g++ -O2 matrixtbb.cpp -ltbb -o matrix-tbb
Execução
$ ./matrix-tbb
Globalcode – Open4education
Slide 33 de 40
7 - Demonstração
Vejam o funcionamento com htop sem paralelização
Globalcode – Open4education
Slide 34 de 40
7 - Demonstração
Vejam o funcionamento com htop para OpenMP
Globalcode – Open4education
Slide 35 de 40
7 - Demonstração
Vejam o funcionamento com htop para TBB
Globalcode – Open4education
Slide 36 de 40
8 - Resultados
• Execução com OpenMProot@raspberrypi:/home/pi# time ./matrix-ompreal 0m10.640suser 0m42.330ssys 0m0.020s
• Execução com TBB:root@raspberrypi:/home/pi# time ./matrix-tbbreal 0m10.651suser 0m42.350ssys 0m0.020s
• Execução sem paralelismoroot@raspberrypi:/home/pi# time ./matrixreal 0m40.552suser 0m40.530ssys 0m0.010s
• Tempo entre OpenMP e TBBQuase idêntico!
• Fator de escala:Aproximadamente 4x!
Globalcode – Open4education
Slide 37 de 40
9 – Considerações Finais
Fonte: HPC Wire - http://www.hpcwire.com/2015/03/02/a-comparison-of-heterogeneous-and-manycore-programming-models/
Globalcode – Open4education
Slide 38 de 40
9 – Considerações Finais
Tabela 1 - Tabela com características de código para as implementações paralelas de Mandelbrot.
Fonte: TRISTAM, Waide; BRADSHAW, Karen. Investigating the Performance and Code Characteristics of Three Parallel Programming Models for C++
Globalcode – Open4education
Slide 39 de 40
9 – Considerações Finais
Na realização dos testes, foi medido o tempo total de execução.
Isso inclui o tempo gasto com inicialização das variáveis.
OpenMP é a API mais práticaProvoca menos alterações no código anteriormente sequencial.
Resultados obtidos com TBB e OpenMP são muito próximos.
Então... Uso fica a critério do desenvolvedor
Globalcode – Open4education
Slide 40 de 40
Dúvidas
?
Globalcode – Open4education
Slide 41 de 40
Contato
Site pessoal:http://andrecurvello.com.br
E-mail:[email protected]
Canal do YouTube:http://www.youtube.com/profandrecurvello