A runtime for code offloading on modern heterogeneous platforms

Detalhes bibliográficos
Ano de defesa: 2016
Autor(a) principal: Gonçalves, Rogerio Aparecido
Orientador(a): Não Informado pela instituição
Banca de defesa: Não Informado pela instituição
Tipo de documento: Tese
Tipo de acesso: Acesso aberto
Idioma: por
Instituição de defesa: Biblioteca Digitais de Teses e Dissertações da USP
Programa de Pós-Graduação: Não Informado pela instituição
Departamento: Não Informado pela instituição
País: Não Informado pela instituição
Palavras-chave em Português:
Link de acesso: https://teses.usp.br/teses/disponiveis/45/45134/tde-20230727-113552/
Resumo: As plataformas modernas de processamento paralelo cada vez trazem aos usuarios sistemas multi-core com organizacoes de hierarquia de memória complexas e novas recursos como o suporte a vetorizacao. Alem disso, essas plataformas reúmem elementos heterogeneos, que vao de CPUs multi-core a CPUs manycores. Quando esses elementos sao integrados, o poder de processamento dessas plataformas pode ser potencializado. Entretando, do lado do software ha a necessidade de modernizacao de aplicacoes de código legado para que usem esses novos recursos. Mesmo quando isso e feito, pode acontecer que a carga de trabalho ultrapasse a capacidade de sistemas multi-core, usualmente ha a necessidade de paralelizar o c6digo dessas aplicacoes para usarem o poder de processamento de coprocessadores e dispositivos aceleradores. Programar para estas novas plataformas nao e uma tarefa trivial, quer seja escrever um novo código ou a traducao de código legado de maneira transparente sao tarefas muito complexas. Estas plataformas com dispositivos aceleradores e processadores multi-core, mesmo fornecendo kits de desenvolvimento, requerem que o programador declare explicitamente todas as transferencias de dados entre as memórias dos dispositivos. 0 programador deve especificar a estrutura completa de grids e blocos de threads para lancar a execucao de kernels em cada dispositivo. Para amemizar essa condicao, ferramentas e abordagens tem sido propostas para gerar código para essas plataformas. Entre as abordagens que tern se destacado, uma usa diretivas de compilacao e a outra tenta detectar automaticamente regiões de código paralelizaveis. Na primeira abordagem, diretivas de compilacao sao usadas para guiar o processo de compilacao, no qual transformacoes e modificacoes de código sao aplicadas as regiões anotadas para obtencao da versao paralela de código. Na segunda abordagem a traducao de código deveria ocorrer sem modificacoes no código original e sem a intervencao do programador. Para se alcancar esses resultados, trabalhos nessa categoria aplicam modelos e tecnicas para detectar automaticamente quais regiões de código sao paralelizaveis. Neste trabalho, apresentamos um runtime relacionado com paralelizacao automatica e offloading de código baseado em versoes de código para lacos paralelos. A ideia e que o código de entrada OpenMP seja gerado por uma ferramenta de compilacao ou escrito manualmente. As bibliotecas do runtime sao capazes de interceptar, usando uma tecnica de hooking, algumas chamadas que as aplicacoes fazem ao runtime do OpenMP. A decisao de offloading tem sido tomada automaticamente em tempo de execucao usando a intensidade operacional que e obtida aplicando-se conceitos do Modelo Roofline. Estamos considerando medidas em todos os níveis da hierarquia de memória e das transferencias de dados entre o host e os dipositivos aceleradores.