Na quarta-feira, dia 25 de setembro de 2020, Ricardo Luis Pieper (mestrando do GMAP), foi aprovado com louvor na defesa da sua dissertação de mestrado, na Escola Politécnica da Pontifícia Universidade Católica do Rio Grande do Sul (PUCRS). A dissertação de mestrado foi orientada pelo Dr. Luiz Gustavo Fernandes e coorientado pelo Dr. Dalvan Griebler (PNPD/PUCRS). Os membros da banca examinadora foram o Dr. Fernando Luís Dotti (PPGCC/PUCRS) e o Dr. Marco Danelutto (Univ. of Pisa). A defesa da dissertação foi realizada através de videoconferência devido aos acontecimentos do COVID-19.
Pieper conta como foi a experiência do curso de mestrado:
“A dissertação foi difícil, como o esperado, particularmente os testes, benchmarks, e escrever a dissertação. Eu tenho sorte de ter o Luiz Gustavo e o Dalvan como orientadores. Também estou convencido que o Dalvan é o cara mais paciente do planeta, já que ele teve que lidar com meus erros e me motivar a concluir o mestrado, isso tudo enquanto fazia o mesmo com muitos outros alunos. Ter o Dalvan dando apoio moral foi crucial para conseguir terminar. Apresentar a dissertação em Inglês foi interessante, e não foi tão difícil quanto eu imaginava. Durante o mestrado eu aprendi coisas que eu nunca teria oportunidade de explorar no meu trabalho, como por exemplo: visualização de dados, computação gráfica, processamento de imagens, e é claro, processamento de stream. Agora que terminei o mestrado eu consigo olhar pra trás, ver o tamanho do trabalho que fiz, e no final valeu a pena.”
Ricardo Luis Pieper
A seguir, o título e resumo da dissertação:
Título: Abstrações de Programação de Alto Nível para Processamento de Fluxo Contínuo de Dados Distribuídos
Resumo:
Aplicações de processamento de fluxo contínuo de dados (stream processing) representam uma parte significativa dos softwares atuais. Uma quantidade maior de dados é gerada todos os dias e de fontes variadas (através de dispositivos computacionais e aplicações), que requerem processamento em tempo hábil. Arquiteturas de memória compartilhada não conseguem atender demandas de processamento em larga escala. No contexto de computação de alta performance, a interface de programação MPI (Message Passing Interface) é considerada o estado da arte para implementar programas paralelos em C/C++. No entanto, a exploração de paralelismo de fluxo contínuo de dados usando MPI é difícil e sujeita a erros aos desenvolvedores de aplicação, pois ele expõe os detalhes de baixo nível das arquiteturas de computadores e sistemas operacionais. Os programadores precisam lidar com mecanismos de serialização de dados, comunicação entre processos,sincronização, tolerância a falhas, balanceamento de carga, escalonamento de trabalhos e estratégias de paralelismo. Este trabalho aborda um subconjunto desses problemas e desafios, oferecendo duas abstrações de alto-nível para processamento de fluxo contínuo de dados em arquiteturas de memória distribuída. Primeiramente, foi criada uma biblioteca de paralelismo de fluxo contínuo de dados nomeada de DSPARLIB. A biblioteca foi construída como uma biblioteca de esqueletos equipada com os padrões paralelos Farm e Pipeline, provendo abstrações acima do MPI. Depois, a linguagem SPAR foi estendida para suportar arquiteturas de memória distribuída, uma vez que ela é uma linguagem de domínio específico para expressar paralelismo de fluxo contínuo de dados usando anotações do C++11,que se mostram produtivas em arquiteturas de memória compartilhada. Este trabalho conseguiu estender o compilador e a linguagem SPAR sem alterar significativamente a sintaxe e a semântica, gerando código que usa DSPARLIB como ambiente de execução paralelo. Os experimentos foram conduzidos usando aplicações reais de processamento de fluxo contínuo de dados em diferentes configurações de cluster. Este trabalho demonstra que a DSPARLIB provê uma interface mais simples que o MPI e apresenta um desempenho competitivo. O compilador da linguagem SPAR foi capaz de gerar código paralelo automaticamente, sem perdas de desempenho em comparação com código escrito à mão com a DSPARLIB. Por último, com todas essas abstrações de alto nível, a SPARse torna a primeira linguagem baseada em anotações para expressar paralelismo de fluxo contínuo de dados em C++ a suportar arquiteturas de memória distribuída, evitando refatorações de código significativas para permitir a execução paralela em clusters.