Na sexta-feira, dia 27 de novembro de 2020, Dinei A. Rockenbach (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 co-orientada pelo Dr. Dalvan Griebler (PNPD/PUCRS). Os membros da banca examinadora foram o Dr. Avelino Zorzo (PPGCC/PUCRS) e o Dr. Marco Aldinucci (University of Turin). A defesa da dissertação foi realizada através de videoconferência devido aos acontecimentos da Covid-19.
Rockenbach conta como foi a experiência do curso de mestrado:
O mestrado em Ciência da Computação foi um desafio enorme na minha carreira. Como eu sou bacharel em Sistemas de Informação, que é um curso com um foco mais empresarial, tive que aprender muitas coisas novas para poder acompanhar as matérias. E ainda tive que conciliar tudo isso com o meu trabalho em tempo integral, portanto foi um longo período de muita dedicação. Por fim, cumpridos os créditos das disciplinas surgiu o último (e maior) desafio: a dissertação. Graças a todo o preparo e dedicação, pude comemorar uma aprovação com louvor, e a base construída durante esse período ainda promete gerar muitos frutos. Com certeza não me arrependo de ter escolhido fazer o mestrado, pois olhando para trás hoje vejo o quanto aprendi.
Dinei Rockenbach
A seguir, o título e resumo da dissertação:
Título: ABSTRAÇÕES DE PROGRAMAÇÃO DE ALTO NÍVEL PARA PARALELISMO DE FLUXO CONTÍNUO DE DADOS EM GPUS
Resumo: O crescimento e disseminação das arquiteturas paralelas têm conduzido a busca de maior poder computacional com hardware massivamente paralelo tais como as unidades de processamento gráfico (GPUs). Essa nova arquitetura de computador heterogênea composta de unidade de processamento central (CPUs) com múltiplos núcleos e GPUs com muitos núcleos se tornou comum, possibilitando novas aplicações de software tais como carros com direção autônoma, ray tracing em tempo real, aprendizado profundo, e realidade virtual (RV), que são caracterizadas como aplicações de processamento de fluxo contínuo de dados. Porém, esse ambiente heterogêneo apresenta um desafio adicional para o desenvolvimento de software, que ainda está no processo de adaptação para o paradigma de processamento paralelo em sistemas com múltiplos núcleos, onde programadores têm a disposição várias APIs (interfaces de programação de aplicações) que oferecem diferentes níveis de abstração. A exploração de paralelismo em GPU é feito usando ambos CUDA e OpenCL pela academia e pela indústria, cujos desenvolvedores precisam lidar com conceitos de arquitetura de baixo nível para explorar o paralelismo de GPU eficientemente em suas aplicações. Existe uma carência de abstrações de programação paralela ao: 1) paralelizar código para GPUs, e 2) necessitar abstrações de programação de alto nível que lidam com o paralelismo de ambos CPU e GPU. Infelizmente, os desenvolvedores precisam ser programadores especialistas em sistemas operacionais e conhecer a arquitetura do hardware para permitir a exploração eficiente de paralelismo. Como contribuição à primeira carência, criou-se a GSParLib, uma nova biblioteca de programação paralela estruturada para explorar paralelismo de GPU que provê uma API de programação unificada e um ambiente de execução agnóstico ao driver da plataforma de hardware. Ela oferece os padrões paralelos Map e Reduce sobre os drivers CUDA e OpenCL. O seu desempenho foi avaliado comparando com APIs do estado da arte, onde experimentos revelaram um desempenho comparável a eficiente. Como contribuição à segunda carência, estendeu-se a linguagem específica de domínio (DSL) SPar, que já foi testada e provada como sendo de alto nível e produtiva para expressar paralelismo de fluxo contínuo de dados com anotações C++ em CPUs de múltiplos núcleos. Neste trabalho, foram propostas e implementadas novas anotações que aumentam a expressividade para combinar o paralelismo de fluxo contínuo de dados em CPUs existente com o paralelismo de dados em GPUs. Também foram providenciadas novas regras de transformação baseadas em padrões, que foram implementadas no compilador almejando transformações automáticas de código de fonte para fonte usando a GSParLib para exploração de paralelismo de GPU. Os experimentos demonstram que o compilador da SPar é capaz de gerar padrões paralelos de paralelismo de fluxo contínuo de dados e de dados sem nenhuma redução de desempenho significativa quando comparada com código escrito pelo programador. Graças a esses avanços na SPar, este trabalho é o primeiro a prover anotações C++11 de alto nível como uma API que não requer refatoração significativa de código em programas sequenciais, para permitir a exploração de paralelismo em CPU de múltiplos núcleos e GPU de muitos núcleos em aplicações de processamento de fluxo contínuo de dados.