No dia 02 de dezembro de 2020, às 14:00, Renato B. Hoffmann (membro do GMAP) foi aprovado na defesa de seu Trabalho de Conclusão de Curso de Engenharia de Computação, na Escola Politécnica da Pontifícia Universidade Católica do Rio Grande do Sul. O trabalho foi orientado pelo Dr. Luiz Gustavo Fernandes e co-orientado pelo Dr. Dalvan Griebler (PNPD/PUCRS). Os membros da banca foram o Dr. Tiago Coelho Ferreto e Dr. Sergio Johann Filho, ambos da PUCRS. A defesa do TCC foi realizada através de videoconferência devido aos acontecimentos do Covid-19.
Renato conta como foi a experiência do curso de graduação:
“Durante 10 semestres do curso de graduação, passei 9 como membro do grupo GMAP. Neste período todo, aprendi muita coisa importante para o curso de graduação como questões de programação e escrita ou apresentação técnica. Acima de tudo, a coisa mais importante foi a experiência de pesquisa e pensamento científico que o grupo proporcionou e também a amizade entre os demais membros e orientadores. Assim como houveram momentos de desafio e dificuldade, houveram momentos excelentes e eu sou muito grato pela experiência e amizade com o grupo de pesquisa.”
Renato Barreto Hoffmann
A seguir, o título e resumo do TCC:
Título: STREAM PARALLELISM ANNOTATIONS FOR AUTOMATIC OPENMP CODE GENERATION
Resumo: As arquiteturas de computadores recentes são paralelas por natureza e, portanto, necessitam da programação paralela para explorar o máximo da capacidade da máquina.Entretanto, essa é uma tarefa complexa e suscetível a erros. Oferecendo abstrações paralelas, pode-se mitigar esse problema. Alguns exemplos disso são OpenMP, Intel TBB(Threading Building Blocks) e FastFlow. Contudo, cada interface foi desenvolvida usando técnicas de implementação e objetivos diferentes. Mais especificamente, OpenMP é uma interface para a programação paralela padrão na indústria e academia que é complexa quando usada para desenvolver aplicações de fluxo de dados. Ela não dispõe de ferramentas de programação e abstrações chave que devem ser desenvolvidas ou obtidas através de interfaces de programação externas. Por outro lado, a importância das aplicações de fluxo de dados não pode ser ignorada. Elas estão presentes na criptografia e compressão de dados, monitoramento de sensores, análise estatística, filtragem de áudio ou vídeo, etc.Para resolver esse problema, foi proposto usar uma interface de programação paralela alto-nível (chamada SPar) para geração de código mais baixo-nível OpenMP em aplicações de fluxo de dados. Isso foi realizado através da implementação de um modelo para aplicações de fluxo de dados com OpenMP, usando suas diretivas e também mecanismos padrões do C++. Depois disso, com o intuito de aumentar o nível de abstração, foi gerado código automaticamente utilizando o modelo OpenMP previamente proposto e o conjunto de anotações da SPar. Além do mais, esse processo utilizou um novo conjunto de regras de transformação para o modelo de processamento de fluxo de dados com OpenMP. Essas regras foram usadas para realizar transformações fonte-a-fonte diretamente na árvore abstrata de sintaxe. Os experimentos demonstraram que em 4 diferentes aplicações de processamento de fluxo de dados, comparando com implementações do estado-da-arte, a maior diferença de desempenho observada foi: 1,72% no caso da implementação manual OpenMP; 2,49%no caso do código gerado pela SPar.