Programação paralela baseada em skeletons para processamento de imagens 3D - Lourenço, Pedro Miguel Galvão Farelo (2016)
A melhoria de desempenho obtida através da computação paralela permitiu o aumento da sua utilização na resolução de problemas computacionalmente exigentes em muitas áreas em ciência e engenharia.No entanto, devido à complexidade da criação de programas paralelos são necessárias ferramentas que simplifiquem o seu desenvolvimento. Um tipo de problemas que é resolvido com programação paralela é o processamento de imagem em áreas como a Ciência dos Materiais e a Medicina. À semelhança de outras áreas, também nestas e para este tipo de problemas, é possível encontrar soluções e estratégias de paralelização comuns, e que capturam o conhecimento acumulado ao longo do tempo. O conhecimento sobre estes padrões e a sua disponibilização permitem assim simplificar o desenvolvimento desses programas paralelos mas é necessário existirem ferramentas que os implementem com um desempenho adequado. Os padrões devem também ser de fácil adaptação e reutilização em problemas similares, melhorando a produtividade no desenvolvimento de programas em diversas áreas que necessitem de processamento de imagem. No contexto da computação paralela, em geral, existem já ferramentas que disponibilizam padrões de paralelização permitindo que não peritos na área possam desenvolver os seus programas de um modo mais simples. Os algorithmic skeletons são uma das soluções existentes para capturar esses padrões, existindo frameworks que os implementam libertando os programadores da necessidade do conhecerem os detalhes da arquitetura alvo. Os algorithmic skeletons podem também ser aplicados aos problemas de processamento de imagem, capturando diretamente ou por composição padrões nesses domínio. No entanto, as ferramentas de algorithmic skeletons existentes não disponibilizam padrões otimizados com propriedades adaptativas que possam ter em conta, quer as características do sistema em execução (e.g. carga do sistema versus consumo de energia, etc.), quer da imagem em processamento (e.g. imagens com mais ou menos objetos). Neste contexto, este trabalho começou por estudar e comparar as implementações de um algoritmo de processamento de imagem usando dois framework de algorithmic skeletons que permitem gerar código para GPGPUs, de modo a identificar os padrões subjacentes e o framework mais adequado. Seguiu-se como contribuição a extensão do framework FastFlow com uma arquitetura de medição do estado de execução do skeleton farm, e a extensão deste com propriedades adaptativas. É possível alterar o número de workers de uma farm, controlar a distribuição de tarefas pelos vários workers, e escolher se a a execução do skeleton é feita em CPU ou GPU.