O advento dos processadores multi-core nos últimos anos é resultado da crescente demanda por poder de processamento pelos usuários. No segmento de placas gráficas, este fato tem resultado em GPUs com uma capacidade de processamento cada vez maior, proporcionada pela grande quantidade de unidades lógicas e aritméticas e de núcleos presentes dentro de cada processador, de modo que estes dispositivos tenham deixado de ser utilizados apenas para processamento gráfico e tenham se tornado ferramentas computacionais de propósito geral. Estes avanços na área de processamento paralelo têm viabilizado a resolução de diversos problemas no meio científico, entre eles a geração de fractais. No contexto dos sistemas dinâmicos, os algoritmos que descrevem a geração destes objetos são caracterizados pela aplicação, através de repetidas iterações, de uma determinada função complexa a um conjunto de dados de entrada, o qual, para os propósitos deste trabalho, consiste nos pixels de uma imagem. Dado que este processo pode ser feito de maneira independente para cada pixel, o mesmo apresenta um grande potencial de paralelização. Desta forma, o objetivo geral deste trabalho é prover uma análise de desempenho de algoritmos para geração de fractais baseados em uma arquitetura many-core com GPU e comparar os resultados obtidos com o desempenho dos mesmos algoritmos sendo executados de modo sequencial e paralelo com uma CPU multi-core tradicional. Para tanto, foram utilizados os modelos de programação OpenMP, para a implementação dos algoritmos paralelos baseados em CPU, e o modelo de programação e arquitetura CUDA, da NVIDIA, para as execuções com GPU. Os testes foram feitos utilizando seis diferentes funções para a geração dos fractais, e variando parâmetros como as dimensões da imagem e número máximo de iterações para cada uma delas. Os resultados comprovaram o ganho de desempenho esperado ao utilizar modelos baseados em GPU para a execução dos algoritmos, com alguns cenários apresentando speedups de quase duas ordens de magnitude em relação às execuções sequenciais. Entretanto, percebeu-se uma grande variação nos ganhos de desempenho obtidos para cada uma das funções, evidenciando uma forte dependência com as configurações dos parâmetros utilizados para os testes. As execuções com OpenMP apresentaram resultados bem mais modestos, em média aproximadamente três vezes mais rápidas que as execuções sequenciais, porém, com menor variação entre as diferentes funções. |