2 Comentários

Aplicações Multicore com Raspberry Pi 2, palestra do TDC2015

Aplicações Multicore com Raspberry

No período dos dias 21 a 25 de Julho de 2015, aconteceu na Universidade Anhembi Morumbi o evento The Developers Conference 2015, em que cada dia é marcado por uma série de trilhas que tratam de assuntos tais como Web, aplicações móveis, Internet das Coisas, dentre outras. E uma destas trilhas foi sobre o tema de Embarcados, que aconteceu no dia 23, tendo como coordenador o mestre Alessandro Cunha.

Dentre as propostas que enviei durante o Call for Papers do evento, aquela com o tema de "Aplicações Multicore com Linux Embarcado usando Raspberry Pi 2" foi aprovada e selecionada.

Como professor acadêmico, vejo que é de fundamental importância destacar a necessidade atual de saber programar aplicações que usem sistemas multicores, ainda mais em um cenário onde até mesmo o seu smartphone pode ser dotado de um processador multicore. Se há algum tempo atrás a programação multicore era algo visto somente na academia, longe do chamado "uso civil", hoje... É praticamente mandatório. Está em seus computadores, televisores, videogames, tablets, smartphones, e até mesmo relógios.

Aplicações Multicore satira
Figura 1 - Sátira com "Game of Thrones". Tradução: Multicore está vindo. Fonte: es.memegenerator.net

O que acontece é que muitos programadores infelizmente não prestam a devida atenção a esse aspecto, e suas aplicações falham em utilizar de modo eficiente os recursos presentes na máquina em execução, correndo o risco de levar potenciais usuários a descreditar a aplicação usada.

Lembro-me muito bem de um treinamento que fiz com as equipes da Intel e da Microsoft em São Paulo-SP, a respeito de demonstrar as novas arquiteturas de Ultrabooks com processadores Intel e Windows 8. Os professores destacaram que de nada adianta desenvolverem uma baita arquitetura, fazer toda uma propaganda de baixo consumo e potência, se as aplicações que forem executadas não fizerem uso eficiente dos recursos, e assim, usarem demasiadamente do processador, levando a um maior consumo de bateria e lentidão do sistema, por exemplo.

Aplicacoes Multicore: satira 2
Figura 2 - Meme satirizando o multicore onde só um núcleo trabalha. Fonte: www.reddit.com

Tomando o embalo dos ânimos embarcados, aproveitei para usar a Raspberry Pi 2 como alvo da minha palestra, pelo simples fato de ser uma placa barata, amplamente divulgada pela mídia digital (coff, coff, Facebook), e... ser multicore. 4 núcleos ARM Cortex A7 rodando a 900 MHz de pura emoção.

Aplicacoes-Multicore-Raspberry-Pi-2
Figura 3 - Raspberry Pi 2. Fonte: www.raspberrypi.org

Beleza, o usuário comprou a placa, instalou Linux, começa a rodar uns programas, fica se sentindo o máximo por estar com um equipamento "top". Mas estarão seus programas usando esses núcleos...? É só escrever um programa, compilar e usar...? Não.

É preciso que o seu programa use de maneira eficiente os recursos disponíveis na máquina em questão, tais como a presença de mais de um núcleo de processamento, grande ponto do meu argumento, que vai de encontro ao que chamamos de programação paralela. Nisso, há também mais uma série de desafios tais como lidar com conflitos ao acesso de memória, deadlocks, dentre outros, que podem vir a se tornar um pesadelo, caso uma aplicação anteriormente sequencial não seja devidamente adaptada para o seu equivalente paralelo.

Destacando este ponto, trabalhei na palestra que apresentei os seguintes aspectos:

  • Gestor de atribuições de tarefas a núcleos do sistema - taskset. Basicamente, o taskset é aquele gerente que aloca aonde cada trabalhador irá fazer o seu trabalho. Ou seja, o tasket permite que você coloque uma aplicação para rodar exclusivamente no núcleo 1, outra aplicação no núcleo 2, e assim em diante. Mas como essas aplicações irão rodar, aí é outro problema...
  • Bibliotecas para programação paralela - Fornecem toda uma API para a criação de aplicações paralelas, resolvendo problemas complexos e atribuições de baixo nível para o programador.
    • TBB - Threading Building Blocks: Biblioteca da Intel, para aplicações em C++. Você literalmente trabalha em uma abordagem aonde escreve classes de "tasks" que representam a sua tarefa, por assim dizer, que será realizada paralelamente entre vários núcleos, e assim coordena essas classes por meio de métodos fornecidos pela API.
    • OpenMP: Biblioteca bem versátil, compatível com aplicações em C, C++ e Fortran. O desenvolvedor usa de variáveis de ambiente, diretivas de compilação e funções da API para coordenar a realização paralela de rotinas do código de programa. Em suma, é a abordagem mais direta, em que você literalmente adapta um código sequencial para um equivalente paralelo, com poucas linhas de código.

Para ver como eu trabalhei estes assuntos, veja adiante os slides que usei no evento TDC 2015.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Eventos » Aplicações Multicore com Raspberry Pi 2, palestra do TDC2015
Talvez você goste:
Comentários:

2
Deixe um comentário

avatar
2 Comentários
0 Respostas
0 Seguidores
 
Discussão de maior alcance
Discussão mais quente
2 Autores de comentários
Thiago LimaWendell Silva Comentários recentes
  Notificações  
recentes antigos mais votados
Notificar
Thiago Lima
Visitante

Eu perdi sua palestra. Na verdade perdi no mesmo dia sua palestra, a de Alessandro e Wellington... No proximo TDC quero participar.

Wendell Silva
Visitante
Wendell Silva

Palestra interessante.
Só em um errinho no texto: tasket em vez de taskset.
🙂

Séries

Menu