
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.