Um estudo da extensão de paralelismo dinâmico fornecido por CUDA em aplicações recursivas - Nogueira, Angelo Gaspar Diniz (2023)
A demanda por desempenho de aplicações nos domínios de computação gráfica, aprendizado de máquina, computação de alto desempenho, etc. vêm crescendo ao longo dos anos. Para atender à esta demanda, empresas destes domínios frequentemente tendem a atualizar seus recursos computacionais, como por exemplo, processadores, quantidade de clusters, memória, etc. No entanto, esta atualização incremental pode ter um impacto negativo nos custos relacionados a energia. Portanto, uma das alternativas para a melhoria do desempenho de aplicações sem um impacto negativo no consumo de energia de sistemas de alto desempenho é a exploração do paralelismo no nível de threads. O paralelismo neste nível pode ser explorado em arquiteturas homogêneas e heterogêneas, através do uso de modelos de programação que tendem a tornar a tarefa do programador mais simples. Um exemplo de tais modelos é o CUDA (Compute Unified Device Architecture), um modelo de programação paralela para ambientes heterogêneos compostos de CPUs (Central Processing Units) e GPUs -(Graphics Processing Units). Nesse sentido, CUDA permite a execução de trechos ou segmentos de uma aplicação na GPU, através de funções chamadas de kernels. Por padrão, as chamadas de kernel são realizadas na CPU, e como tal, existe um custo associado à comunicação entre CPU e GPU. Dessa forma, os possíveis ganhos de desempenho em algoritmos recursivos são limitadas, já que estes requerem diversas chamadas de kernel durante sua execução, devido a recursão. Para resolver esta limitação CUDA fornece ao programador a extensão paralelismo dinâmico, que permite que chamadas de kernels sejam realizadas diretamente na GPU. Dessa forma, evitando ou minimizando o custo mencionado. Nesse sentido, este trabalho de conclusão de curso tem como objetivo avaliar o desempenho e consumo de energia da extensão de paralelismo dinâmico do CUDA em algoritmos recursivos.