aplicações multicore com linux embarcado usando raspberry pi 2 - tdc2015

41
Globalcode – Open4education Aplicações multicore com Linux Embarcado usando a Raspberry Pi 2 André Márcio de Lima Curvello Trilha Embarcados

Upload: andre-curvello

Post on 14-Aug-2015

732 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

Globalcode – Open4education

Aplicações multicore com Linux Embarcado usando a Raspberry Pi 2

André Márcio de Lima CurvelloTrilha Embarcados

Page 2: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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

Page 3: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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

Page 4: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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...

Page 5: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

Globalcode – Open4education

Slide 5 de 40

2 - Single Board Computers

Page 6: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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

Page 7: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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

Page 8: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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.

Page 9: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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!

Page 10: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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!

Page 11: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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...

Page 12: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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.

Page 13: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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

Page 14: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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...

Page 15: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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.

Page 16: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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.

Page 17: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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.

Page 18: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

Globalcode – Open4education

Slide 18 de 40

6 – Bibliotecas - Desafios

Evitar as seguintes condições:Race conditions

Deadlocks

Page 19: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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

Page 20: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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

Page 21: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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...

Page 22: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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.

Page 23: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

Globalcode – Open4education

Slide 23 de 40

Problema Alvo

Multiplicação de matrizesVários laços de repetição aninhados

Vamos paralelizar?

Page 24: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

Globalcode – Open4education

Slide 24 de 40

Problema alvo - Multiplicação de Matrizes:

Page 25: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

Globalcode – Open4education

Slide 25 de 40

OpenMP - Multiplicação de Matrizes:

Page 26: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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

Page 27: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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...

Page 28: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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

Page 29: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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

Page 30: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

Globalcode – Open4education

Slide 30 de 40

6 - Biblioteca - TBB

Multiplicação de matrizes

Page 31: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

Globalcode – Open4education

Slide 31 de 40

6 - Biblioteca - TBB

Multiplicação de matrizes

Page 32: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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

Page 33: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

Globalcode – Open4education

Slide 33 de 40

7 - Demonstração

Vejam o funcionamento com htop sem paralelização

Page 34: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

Globalcode – Open4education

Slide 34 de 40

7 - Demonstração

Vejam o funcionamento com htop para OpenMP

Page 35: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

Globalcode – Open4education

Slide 35 de 40

7 - Demonstração

Vejam o funcionamento com htop para TBB

Page 36: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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!

Page 37: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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/

Page 38: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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++

Page 39: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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

Page 40: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

Globalcode – Open4education

Slide 40 de 40

Dúvidas

?

Page 41: Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015

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