SlideShare uma empresa Scribd logo
1 de 41
Globalcode – Open4education
Aplicações multicore com Linux
Embarcado usando a Raspberry Pi 2
André Márcio de Lima Curvello
Trilha Embarcados
Globalcode – Open4education
Slide 2 de 40
Sobre o Palestrante
Qualificação
Engenheiro 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ção
Professor 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 B
900MHz 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ções
Visã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úcleos
O 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úcleos
Linux  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 compartilhada
Cuidado!
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 matrizes
Vá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 OpenMP
root@raspberrypi:/home/pi# time ./matrix-omp
real 0m10.640s
user 0m42.330s
sys 0m0.020s
• Execução com TBB:
root@raspberrypi:/home/pi# time ./matrix-tbb
real 0m10.651s
user 0m42.350s
sys 0m0.020s
• Execução sem paralelismo
root@raspberrypi:/home/pi# time ./matrix
real 0m40.552s
user 0m40.530s
sys 0m0.010s
• Tempo entre OpenMP e TBB
Quase 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ática
Provoca 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:
contato@andrecurvello.com.br
Canal do YouTube:
http://www.youtube.com/profandrecurvello

Mais conteúdo relacionado

Mais procurados

Educação Tecnológica com Raspberry Pi
Educação Tecnológica com Raspberry PiEducação Tecnológica com Raspberry Pi
Educação Tecnológica com Raspberry PiMario Sergio
 
Introdução a automação residencial com Raspberry PI
Introdução a automação residencial com Raspberry PIIntrodução a automação residencial com Raspberry PI
Introdução a automação residencial com Raspberry PIRogerio Alencar Filho
 
NãNãNã Nã - Python Refresca até Pensamento
NãNãNã Nã - Python Refresca até PensamentoNãNãNã Nã - Python Refresca até Pensamento
NãNãNã Nã - Python Refresca até PensamentoOsvaldo Santana Neto
 
Contribuindo para projetos de software livre
Contribuindo para projetos de software livreContribuindo para projetos de software livre
Contribuindo para projetos de software livreLucas Barros
 
Arduino, Robótica e Computação nas Nuvens
Arduino, Robótica e Computação nas NuvensArduino, Robótica e Computação nas Nuvens
Arduino, Robótica e Computação nas NuvensMarco Antonio Maciel
 
Plataformas atuais de sistemas embarcados para IoT
Plataformas atuais de sistemas embarcados para IoTPlataformas atuais de sistemas embarcados para IoT
Plataformas atuais de sistemas embarcados para IoTAndré Luiz Secco
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoÁlvaro Justen
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiMario Guedes
 
PHP e Robótica com Arduino - TDC 2012
PHP e Robótica com Arduino - TDC 2012PHP e Robótica com Arduino - TDC 2012
PHP e Robótica com Arduino - TDC 2012Marco Antonio Maciel
 
Multirão Python - introdução ao py serial com gtk3 e arduino
Multirão Python - introdução ao py serial com gtk3 e arduinoMultirão Python - introdução ao py serial com gtk3 e arduino
Multirão Python - introdução ao py serial com gtk3 e arduinoAntonio Thomacelli
 
Workshop - Cotrole sua casa remotamente através da Internet
Workshop - Cotrole sua casa remotamente através da InternetWorkshop - Cotrole sua casa remotamente através da Internet
Workshop - Cotrole sua casa remotamente através da InternetFabio Souza
 
Linguagem de Programação
Linguagem de ProgramaçãoLinguagem de Programação
Linguagem de Programaçãomoiplabs
 

Mais procurados (20)

Diversão e lucro com raspberry pi
Diversão e lucro com raspberry piDiversão e lucro com raspberry pi
Diversão e lucro com raspberry pi
 
Educação Tecnológica com Raspberry Pi
Educação Tecnológica com Raspberry PiEducação Tecnológica com Raspberry Pi
Educação Tecnológica com Raspberry Pi
 
Introdução a automação residencial com Raspberry PI
Introdução a automação residencial com Raspberry PIIntrodução a automação residencial com Raspberry PI
Introdução a automação residencial com Raspberry PI
 
Raspberry Pi + Python
Raspberry Pi + PythonRaspberry Pi + Python
Raspberry Pi + Python
 
Palestra semana pedagógica2
Palestra semana pedagógica2Palestra semana pedagógica2
Palestra semana pedagógica2
 
NãNãNã Nã - Python Refresca até Pensamento
NãNãNã Nã - Python Refresca até PensamentoNãNãNã Nã - Python Refresca até Pensamento
NãNãNã Nã - Python Refresca até Pensamento
 
Contribuindo para projetos de software livre
Contribuindo para projetos de software livreContribuindo para projetos de software livre
Contribuindo para projetos de software livre
 
Python for Maemo
Python for MaemoPython for Maemo
Python for Maemo
 
Arduino, Robótica e Computação nas Nuvens
Arduino, Robótica e Computação nas NuvensArduino, Robótica e Computação nas Nuvens
Arduino, Robótica e Computação nas Nuvens
 
Python b1tch
Python b1tchPython b1tch
Python b1tch
 
Plataformas atuais de sistemas embarcados para IoT
Plataformas atuais de sistemas embarcados para IoTPlataformas atuais de sistemas embarcados para IoT
Plataformas atuais de sistemas embarcados para IoT
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremo
 
Canivete python
Canivete pythonCanivete python
Canivete python
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe Delphi
 
Palestra BrOffice.org
Palestra BrOffice.orgPalestra BrOffice.org
Palestra BrOffice.org
 
PHP e Robótica com Arduino - TDC 2012
PHP e Robótica com Arduino - TDC 2012PHP e Robótica com Arduino - TDC 2012
PHP e Robótica com Arduino - TDC 2012
 
Multirão Python - introdução ao py serial com gtk3 e arduino
Multirão Python - introdução ao py serial com gtk3 e arduinoMultirão Python - introdução ao py serial com gtk3 e arduino
Multirão Python - introdução ao py serial com gtk3 e arduino
 
Py S60
Py S60Py S60
Py S60
 
Workshop - Cotrole sua casa remotamente através da Internet
Workshop - Cotrole sua casa remotamente através da InternetWorkshop - Cotrole sua casa remotamente através da Internet
Workshop - Cotrole sua casa remotamente através da Internet
 
Linguagem de Programação
Linguagem de ProgramaçãoLinguagem de Programação
Linguagem de Programação
 

Destaque

Aula 09 eletrônica - circuitos especiais
Aula 09   eletrônica - circuitos especiaisAula 09   eletrônica - circuitos especiais
Aula 09 eletrônica - circuitos especiaisRenaldo Adriano
 
Aula 1 Mini Curso de Linux
Aula 1 Mini Curso de LinuxAula 1 Mini Curso de Linux
Aula 1 Mini Curso de LinuxRogério Cardoso
 
Avaliação das distribuições Linux
Avaliação das distribuições LinuxAvaliação das distribuições Linux
Avaliação das distribuições LinuxMauro Tapajós
 
ESLPE 2008 - Desenvolvendo aplicações no Linux
ESLPE 2008 - Desenvolvendo aplicações no LinuxESLPE 2008 - Desenvolvendo aplicações no Linux
ESLPE 2008 - Desenvolvendo aplicações no LinuxJorge Pereira
 
TDC2016 - Rede CAN - Conceitos e Aplicações
TDC2016 - Rede CAN - Conceitos e AplicaçõesTDC2016 - Rede CAN - Conceitos e Aplicações
TDC2016 - Rede CAN - Conceitos e AplicaçõesAndré Curvello
 
Construindo protótipos IoT com sucata, Lego e Raspberry PI
Construindo protótipos IoT com sucata, Lego e Raspberry PIConstruindo protótipos IoT com sucata, Lego e Raspberry PI
Construindo protótipos IoT com sucata, Lego e Raspberry PIVinicius Ribeiro
 
Java fx para o mercado embedded com raspberry pi
Java fx para o mercado embedded com raspberry piJava fx para o mercado embedded com raspberry pi
Java fx para o mercado embedded com raspberry piClaudiney Marques
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaAdriano Teixeira de Souza
 
Aplicações de embarcados - IoT
Aplicações de embarcados - IoTAplicações de embarcados - IoT
Aplicações de embarcados - IoTAndré Curvello
 
Aula 1 sistema operacional linux
Aula 1 sistema operacional linuxAula 1 sistema operacional linux
Aula 1 sistema operacional linuxRogério Cardoso
 
Trabalho com NR10
Trabalho com NR10Trabalho com NR10
Trabalho com NR10Edgar Arana
 
Manual ábaco japonês (soroban) português
Manual ábaco japonês (soroban)   portuguêsManual ábaco japonês (soroban)   português
Manual ábaco japonês (soroban) portuguêsDouglas Longsystem
 

Destaque (16)

4. Circuitos e Dispositivos Eletrônicos de Potência
4. Circuitos e Dispositivos Eletrônicos de Potência4. Circuitos e Dispositivos Eletrônicos de Potência
4. Circuitos e Dispositivos Eletrônicos de Potência
 
Aula 09 eletrônica - circuitos especiais
Aula 09   eletrônica - circuitos especiaisAula 09   eletrônica - circuitos especiais
Aula 09 eletrônica - circuitos especiais
 
Aula 1 Mini Curso de Linux
Aula 1 Mini Curso de LinuxAula 1 Mini Curso de Linux
Aula 1 Mini Curso de Linux
 
Avaliação das distribuições Linux
Avaliação das distribuições LinuxAvaliação das distribuições Linux
Avaliação das distribuições Linux
 
Servidores linux
Servidores linuxServidores linux
Servidores linux
 
ESLPE 2008 - Desenvolvendo aplicações no Linux
ESLPE 2008 - Desenvolvendo aplicações no LinuxESLPE 2008 - Desenvolvendo aplicações no Linux
ESLPE 2008 - Desenvolvendo aplicações no Linux
 
TDC2016 - Rede CAN - Conceitos e Aplicações
TDC2016 - Rede CAN - Conceitos e AplicaçõesTDC2016 - Rede CAN - Conceitos e Aplicações
TDC2016 - Rede CAN - Conceitos e Aplicações
 
Construindo protótipos IoT com sucata, Lego e Raspberry PI
Construindo protótipos IoT com sucata, Lego e Raspberry PIConstruindo protótipos IoT com sucata, Lego e Raspberry PI
Construindo protótipos IoT com sucata, Lego e Raspberry PI
 
Java fx para o mercado embedded com raspberry pi
Java fx para o mercado embedded com raspberry piJava fx para o mercado embedded com raspberry pi
Java fx para o mercado embedded com raspberry pi
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
 
Aplicações de embarcados - IoT
Aplicações de embarcados - IoTAplicações de embarcados - IoT
Aplicações de embarcados - IoT
 
Comandos linux
Comandos linuxComandos linux
Comandos linux
 
Aula 1 sistema operacional linux
Aula 1 sistema operacional linuxAula 1 sistema operacional linux
Aula 1 sistema operacional linux
 
CPBR7 - Existe vida depois do Arduino?
CPBR7 - Existe vida depois do Arduino?CPBR7 - Existe vida depois do Arduino?
CPBR7 - Existe vida depois do Arduino?
 
Trabalho com NR10
Trabalho com NR10Trabalho com NR10
Trabalho com NR10
 
Manual ábaco japonês (soroban) português
Manual ábaco japonês (soroban)   portuguêsManual ábaco japonês (soroban)   português
Manual ábaco japonês (soroban) português
 

Semelhante a Raspberry Pi 2 Linux multicore aplicações

Micropython - Python para microcontroladores
Micropython - Python para microcontroladoresMicropython - Python para microcontroladores
Micropython - Python para microcontroladoresFabio Souza
 
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)Igor Abade
 
PLCduino - A PLC using Arduino platform
PLCduino - A PLC using Arduino platformPLCduino - A PLC using Arduino platform
PLCduino - A PLC using Arduino platformRenato Mintz
 
TDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps JavaTDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps Javatdc-globalcode
 
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho DuroTDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Durotdc-globalcode
 
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...tdc-globalcode
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcadotdc-globalcode
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Jonathan Prates
 
Como migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxComo migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxMarcelo Sabadini
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosRafael Chaves
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014Giovanni Bassi
 
TDC2016 - Explorando Qt5 e Python em Linux Embarcado
TDC2016 - Explorando Qt5 e Python em Linux EmbarcadoTDC2016 - Explorando Qt5 e Python em Linux Embarcado
TDC2016 - Explorando Qt5 e Python em Linux EmbarcadoCleiton Bueno
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java FundamentosWilson Lima
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...Bruno Tanoue
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsFernando Mercês
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Renato Groff
 
Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2Eric Lemes
 

Semelhante a Raspberry Pi 2 Linux multicore aplicações (20)

Micropython - Python para microcontroladores
Micropython - Python para microcontroladoresMicropython - Python para microcontroladores
Micropython - Python para microcontroladores
 
Apostila_IC.pdf
Apostila_IC.pdfApostila_IC.pdf
Apostila_IC.pdf
 
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
Gestão de ciclo de vida de Banco de Dados: Já passou da hora! (TDC POA 2016)
 
PLCduino - A PLC using Arduino platform
PLCduino - A PLC using Arduino platformPLCduino - A PLC using Arduino platform
PLCduino - A PLC using Arduino platform
 
TDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps JavaTDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps Java
 
Machine Learning Black Boxes
Machine Learning Black BoxesMachine Learning Black Boxes
Machine Learning Black Boxes
 
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho DuroTDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
 
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcado
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
 
Como migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxComo migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para Linux
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 
TDC2016 - Explorando Qt5 e Python em Linux Embarcado
TDC2016 - Explorando Qt5 e Python em Linux EmbarcadoTDC2016 - Explorando Qt5 e Python em Linux Embarcado
TDC2016 - Explorando Qt5 e Python em Linux Embarcado
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
 
Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2
 
Python para Desenvolvedores
Python para DesenvolvedoresPython para Desenvolvedores
Python para Desenvolvedores
 

Mais de André Curvello

Sistemas embarcados e a contribuição para o combate a COVID-19
Sistemas embarcados e a contribuição para o combate a COVID-19Sistemas embarcados e a contribuição para o combate a COVID-19
Sistemas embarcados e a contribuição para o combate a COVID-19André Curvello
 
Blockchain em IoT - Desafios e considerações numa abordagem prática
Blockchain em IoT - Desafios e considerações numa abordagem práticaBlockchain em IoT - Desafios e considerações numa abordagem prática
Blockchain em IoT - Desafios e considerações numa abordagem práticaAndré Curvello
 
Arquitetando seu sistema de IoT com Azure
Arquitetando seu sistema de IoT com AzureArquitetando seu sistema de IoT com Azure
Arquitetando seu sistema de IoT com AzureAndré Curvello
 
Drones - Programando sistemas embarcados voadores e... autônomos!
Drones - Programando sistemas embarcados voadores e... autônomos!Drones - Programando sistemas embarcados voadores e... autônomos!
Drones - Programando sistemas embarcados voadores e... autônomos!André Curvello
 
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...André Curvello
 
Internet das Coisas - Na nuvem além da telemetria
Internet das Coisas - Na nuvem além da telemetriaInternet das Coisas - Na nuvem além da telemetria
Internet das Coisas - Na nuvem além da telemetriaAndré Curvello
 
Pilares da Computação para Internet das Coisas
Pilares da Computação para Internet das CoisasPilares da Computação para Internet das Coisas
Pilares da Computação para Internet das CoisasAndré Curvello
 
IoT Aplicada à Engenharia de Computação
IoT Aplicada à Engenharia de ComputaçãoIoT Aplicada à Engenharia de Computação
IoT Aplicada à Engenharia de ComputaçãoAndré Curvello
 
IoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
IoE - Internet de Todas as Coisas - Quais os Riscos de SegurançaIoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
IoE - Internet de Todas as Coisas - Quais os Riscos de SegurançaAndré Curvello
 
Linux Embarcado - O Sistema Operacional da Internet das Coisas
Linux Embarcado - O Sistema Operacional da Internet das CoisasLinux Embarcado - O Sistema Operacional da Internet das Coisas
Linux Embarcado - O Sistema Operacional da Internet das CoisasAndré Curvello
 
Rede CAN em Linux Embarcado para Aplicações Conectadas
Rede CAN em Linux Embarcado para Aplicações ConectadasRede CAN em Linux Embarcado para Aplicações Conectadas
Rede CAN em Linux Embarcado para Aplicações ConectadasAndré Curvello
 
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...André Curvello
 
TDC2017 - Sistemas Assimétricos com ARM e FPGA
TDC2017 - Sistemas Assimétricos com ARM e FPGATDC2017 - Sistemas Assimétricos com ARM e FPGA
TDC2017 - Sistemas Assimétricos com ARM e FPGAAndré Curvello
 
TDC2017 - Desvendando a Linux Device Tree
TDC2017 - Desvendando a Linux Device TreeTDC2017 - Desvendando a Linux Device Tree
TDC2017 - Desvendando a Linux Device TreeAndré Curvello
 
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.André Curvello
 
Internet das Coisas - Do Sensor à Nuvem, e Você?
Internet das Coisas - Do Sensor à Nuvem, e Você?Internet das Coisas - Do Sensor à Nuvem, e Você?
Internet das Coisas - Do Sensor à Nuvem, e Você?André Curvello
 
Linux Embarcado na Construção de Sistemas Inteligentes e Conectados
Linux Embarcado na Construção de Sistemas Inteligentes e ConectadosLinux Embarcado na Construção de Sistemas Inteligentes e Conectados
Linux Embarcado na Construção de Sistemas Inteligentes e ConectadosAndré Curvello
 
Veja como hackear seu carro usando Rede CAN com Arduino Due
Veja como hackear seu carro usando Rede CAN com Arduino DueVeja como hackear seu carro usando Rede CAN com Arduino Due
Veja como hackear seu carro usando Rede CAN com Arduino DueAndré Curvello
 
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016André Curvello
 
Sistemas Embarcados Híbridos - Processamento Assimétrico
Sistemas Embarcados Híbridos - Processamento AssimétricoSistemas Embarcados Híbridos - Processamento Assimétrico
Sistemas Embarcados Híbridos - Processamento AssimétricoAndré Curvello
 

Mais de André Curvello (20)

Sistemas embarcados e a contribuição para o combate a COVID-19
Sistemas embarcados e a contribuição para o combate a COVID-19Sistemas embarcados e a contribuição para o combate a COVID-19
Sistemas embarcados e a contribuição para o combate a COVID-19
 
Blockchain em IoT - Desafios e considerações numa abordagem prática
Blockchain em IoT - Desafios e considerações numa abordagem práticaBlockchain em IoT - Desafios e considerações numa abordagem prática
Blockchain em IoT - Desafios e considerações numa abordagem prática
 
Arquitetando seu sistema de IoT com Azure
Arquitetando seu sistema de IoT com AzureArquitetando seu sistema de IoT com Azure
Arquitetando seu sistema de IoT com Azure
 
Drones - Programando sistemas embarcados voadores e... autônomos!
Drones - Programando sistemas embarcados voadores e... autônomos!Drones - Programando sistemas embarcados voadores e... autônomos!
Drones - Programando sistemas embarcados voadores e... autônomos!
 
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
Dispositivos IoT com FPGAs - Alto poder de processamento para crescentes dema...
 
Internet das Coisas - Na nuvem além da telemetria
Internet das Coisas - Na nuvem além da telemetriaInternet das Coisas - Na nuvem além da telemetria
Internet das Coisas - Na nuvem além da telemetria
 
Pilares da Computação para Internet das Coisas
Pilares da Computação para Internet das CoisasPilares da Computação para Internet das Coisas
Pilares da Computação para Internet das Coisas
 
IoT Aplicada à Engenharia de Computação
IoT Aplicada à Engenharia de ComputaçãoIoT Aplicada à Engenharia de Computação
IoT Aplicada à Engenharia de Computação
 
IoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
IoE - Internet de Todas as Coisas - Quais os Riscos de SegurançaIoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
IoE - Internet de Todas as Coisas - Quais os Riscos de Segurança
 
Linux Embarcado - O Sistema Operacional da Internet das Coisas
Linux Embarcado - O Sistema Operacional da Internet das CoisasLinux Embarcado - O Sistema Operacional da Internet das Coisas
Linux Embarcado - O Sistema Operacional da Internet das Coisas
 
Rede CAN em Linux Embarcado para Aplicações Conectadas
Rede CAN em Linux Embarcado para Aplicações ConectadasRede CAN em Linux Embarcado para Aplicações Conectadas
Rede CAN em Linux Embarcado para Aplicações Conectadas
 
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
Criando elementos conectados com visão computacional usando Raspberry Pi Zero...
 
TDC2017 - Sistemas Assimétricos com ARM e FPGA
TDC2017 - Sistemas Assimétricos com ARM e FPGATDC2017 - Sistemas Assimétricos com ARM e FPGA
TDC2017 - Sistemas Assimétricos com ARM e FPGA
 
TDC2017 - Desvendando a Linux Device Tree
TDC2017 - Desvendando a Linux Device TreeTDC2017 - Desvendando a Linux Device Tree
TDC2017 - Desvendando a Linux Device Tree
 
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
Indústria 4.0 - Do chão de fábrica à sua casa por um clique.
 
Internet das Coisas - Do Sensor à Nuvem, e Você?
Internet das Coisas - Do Sensor à Nuvem, e Você?Internet das Coisas - Do Sensor à Nuvem, e Você?
Internet das Coisas - Do Sensor à Nuvem, e Você?
 
Linux Embarcado na Construção de Sistemas Inteligentes e Conectados
Linux Embarcado na Construção de Sistemas Inteligentes e ConectadosLinux Embarcado na Construção de Sistemas Inteligentes e Conectados
Linux Embarcado na Construção de Sistemas Inteligentes e Conectados
 
Veja como hackear seu carro usando Rede CAN com Arduino Due
Veja como hackear seu carro usando Rede CAN com Arduino DueVeja como hackear seu carro usando Rede CAN com Arduino Due
Veja como hackear seu carro usando Rede CAN com Arduino Due
 
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
Laboratórios do HandsOn de mbedOS - FTF Connects SP 2016
 
Sistemas Embarcados Híbridos - Processamento Assimétrico
Sistemas Embarcados Híbridos - Processamento AssimétricoSistemas Embarcados Híbridos - Processamento Assimétrico
Sistemas Embarcados Híbridos - Processamento Assimétrico
 

Raspberry Pi 2 Linux multicore aplicações

  • 1. Globalcode – Open4education Aplicações multicore com Linux Embarcado usando a Raspberry Pi 2 André Márcio de Lima Curvello Trilha Embarcados
  • 2. Globalcode – Open4education Slide 2 de 40 Sobre o Palestrante Qualificação Engenheiro 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ção Professor Universitário – UNIFRAN Desenvolvedor e Consultor Articulista do Portal Embarcados
  • 3. 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
  • 4. 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...
  • 5. Globalcode – Open4education Slide 5 de 40 2 - Single Board Computers
  • 6. 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
  • 7. Globalcode – Open4education Slide 7 de 40 3 - Raspberry Pi 2 Raspberry Pi 2 Modelo B 900MHz 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
  • 8. 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.
  • 9. 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!
  • 10. Globalcode – Open4education Slide 10 de 40 4 - Programação Paralela Aplicações Visã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!
  • 11. 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...
  • 12. Globalcode – Open4education Slide 12 de 40 5 - Sistema Linux Alocação de tarefa em núcleos O 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.
  • 13. Globalcode – Open4education Slide 13 de 40 5 - Sistema Linux Alocação de tarefa em núcleos Linux  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
  • 14. 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...
  • 15. 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.
  • 16. 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.
  • 17. 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.
  • 18. Globalcode – Open4education Slide 18 de 40 6 – Bibliotecas - Desafios Evitar as seguintes condições: Race conditions Deadlocks
  • 19. 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
  • 20. 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
  • 21. Globalcode – Open4education Slide 21 de 40 6 - Bibliotecas - OpenMP Como disse anteriormente... Multithread Beleza, vários núcleos em uso! Memória compartilhada Cuidado! Uma variável pode ser usada por várias threads...
  • 22. 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.
  • 23. Globalcode – Open4education Slide 23 de 40 Problema Alvo Multiplicação de matrizes Vários laços de repetição aninhados Vamos paralelizar?
  • 24. Globalcode – Open4education Slide 24 de 40 Problema alvo - Multiplicação de Matrizes:
  • 25. Globalcode – Open4education Slide 25 de 40 OpenMP - Multiplicação de Matrizes:
  • 26. 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
  • 27. 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...
  • 28. 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
  • 29. 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
  • 30. Globalcode – Open4education Slide 30 de 40 6 - Biblioteca - TBB Multiplicação de matrizes
  • 31. Globalcode – Open4education Slide 31 de 40 6 - Biblioteca - TBB Multiplicação de matrizes
  • 32. 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
  • 33. Globalcode – Open4education Slide 33 de 40 7 - Demonstração Vejam o funcionamento com htop sem paralelização
  • 34. Globalcode – Open4education Slide 34 de 40 7 - Demonstração Vejam o funcionamento com htop para OpenMP
  • 35. Globalcode – Open4education Slide 35 de 40 7 - Demonstração Vejam o funcionamento com htop para TBB
  • 36. Globalcode – Open4education Slide 36 de 40 8 - Resultados • Execução com OpenMP root@raspberrypi:/home/pi# time ./matrix-omp real 0m10.640s user 0m42.330s sys 0m0.020s • Execução com TBB: root@raspberrypi:/home/pi# time ./matrix-tbb real 0m10.651s user 0m42.350s sys 0m0.020s • Execução sem paralelismo root@raspberrypi:/home/pi# time ./matrix real 0m40.552s user 0m40.530s sys 0m0.010s • Tempo entre OpenMP e TBB Quase idêntico! • Fator de escala: Aproximadamente 4x!
  • 37. 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/
  • 38. 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++
  • 39. 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ática Provoca 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 
  • 40. Globalcode – Open4education Slide 40 de 40 Dúvidas ?
  • 41. Globalcode – Open4education Slide 41 de 40 Contato Site pessoal: http://andrecurvello.com.br E-mail: contato@andrecurvello.com.br Canal do YouTube: http://www.youtube.com/profandrecurvello