Análise de Divergências em GPUs

Fernando Magno Quintão Pereira
GPUs têm se tornado cada vez populares, tanto na academia, quanto na indústria da informática. Muito dessa popularidade advém do grande poder computacional, a baixo custo, que esse hardware provê para os programadores. Entretanto, a utilização plena desse poder de processamento não é uma tarefa fácil, pois a programação de aplicações em GPUs é ainda difícil. Parte dessa dificuldade deve-se a um fenômeno chamado "Divergências de Execução", que caracteriza arquiteturas SIMD. Nesta palestra descreveremos análises estáticas, implementadas a nível do compilador, que detectam divergências, ou provam que elas não existem. A partir dessas análises, mostraremos diferentes otimizações de código que compiladores usam para mitigar os efeitos das divergências. Em particular, descreveremos um alocador de registradores criado exclusivamente para GPUs. O resultado concreto desse trabalho encontra-se hoje disponível em Ocelot, um compilador de uso industrial. Testemunho de seu sucesso é o alto ganho de desempenho que as otimizações propostas produzem. Nosso alocador de registradores, por exemplo, melhorou em mais de 25% a qualidade do código originalmente produzido por Ocelot.