Workshop em Sistemas Computacionais de Alto Desempenho, Setembro José Nelson Amaral Compiler Design and Optimization Laboratory Department of Computing Science University of Alberta Edmonton, AB, Canada Software Livre Pro64: Uma Infra-estrutura para Compiladores Mini-Curso
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Colaboradores O Grupo de Desenvolvimento dos Compiladores MIPSpro/Pro64 da SGI Universidade de Delaware yTime de Compiladores do CAPSL
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Colaboradores (cont.) Estes indivíduos contribuíram diretamente para este mini-curso: A. Douillet (Udel) F. Chow (Equator) S. Chan (Intel) J. Dehnert (Trasmeta) G. R. Gao (U. Delaware) W. Ho (Routefree) Z. Hu (Udel) K. Lesniak (SGI) S. Liu (HP) R. Lo (Routefree) S. Mantripragada (SGI) C. Murthy (SGI) M. Murphy (SGI) G. Pirocanac (SGI) D. Stephenson (SGI) R. Towle (SGI) D. Whitney (SGI) H. Yang (Udel)
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Organização do Mini-Curso zMotivação e Origens do Pro64 zParte I: Discussão da infra-estrutura do compilador SGI Pro64 zParte II: Gerador de código do Pro64 zParte III: Usando o Pro64 para pesquisa e desenvolvimento de compiladores zSuporte para o SGI Pro64 zSumário
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Motivação e Origens zO que é o SGI Pro64? zQuem poderá se beneficiar do uso do Pro64? zOnde posso obter o Pro64? zDesenvolvimento futuro para o Pro64
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro O que é o Pro64? zUm conjunto de compiladores otimizadores para sistems Linux/ Intel IA64 zCompiladores para C, C++ e Fortran90/95 zProduzido em conformidade com os padrões ABI e API do IA-64 Linux zAberto para todos os pesquisadores e projetistas da comunidade zCompatível com o ambiente NUE (Native User Environment) da HP
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Quem Poderá se Beneficiar do Uso do Pro64? zPesquisadores : Teste de novas análises para compiladores e novos algorítimos de otimização. zProjetistas: Geração de código para outras arquiteturas ou outros sistemas. zEducadores/Estudantes : Uma plataforma para ensinar compiladores.
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Onde Posso Obter os Compiladores Pro64 zCódigo Fonte e Documentação zGrupo de Suporte do Pro64 na Universidade de Delaware
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Tópicos para Pesquisa Futura no Pro64 zFormação de Hyperblock zSistema de Pesquisa de Predicados zMelhoria do Suporte para Especulação
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro PARTE I: Infra-estrutura do Compilador Pro64
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Organização zModelo Lógico de Compilação e Diagrama de Fluxo zRepresentações Intermediárias WHIRL/CGIR zAnálise Inter-Procedural (IPA) zOtimizador de Loops Aninhados (LNO) e Paralelização zOtimizador Global (WOPT) zRealimentação zProjeto para debugabilidade e testabilidade
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Modelo Lógico de Compilação back end (be) linker (ld) WHIRL (.B/.I) obj (.o) a.out/.so Data Path Fork and Exec driver (sgicc/sgif90/sgiCC) front end + IPA (gfec/gfecc/mfef90) Src (.c/.C/.f)
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Componentes do Pro64 Parte Frontal Análise Interprocedural e Otimização Otimização de Loops Aninhados e Paralelização Otimização Global Geração de Código
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Fluxo de Dados e Relação Entre Módulos Lower to High W. gfec gfecc f90 Local IPA Main IPA LNO Inliner WHIRL C WHIRL fortran Main opt Lower all lower I/O Lower Mid W CG.B.I -O 3.w2c.c -IPA.w2c.h.w2f.f -O 0 -O 2 /O 3 -phase: w=off Very high WHIRL High WHIRL Mid WHIRL Low WHIRL Siga Qualquer Direção (only for f90)
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Parte Frontal zParte frontal para C é baseada em gcc zParte frontal para C++ é baseada em g++ zParte frontal para Fortran90/95 do MIPSpro
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Representação Intermediária (IR) IR é chamada WHIRL zInterface comum entre componentes zMúltiplas linguages e múltiplos processadores zMesma IR, 5 níveis de representação zContinuamente reduz o nível a medida que a compilação progride zEstratégia de otimização de acordo com o nível de representação
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Fase Principal da Análise Inter-Procedural (IPA) Análise yanálise de alias yanálise vetorial ylayout de código Otimização (completamente integrada) yinlining yclonagem yeliminação de código morto e eliminação de variáveis ypropagação de constantes
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Propriedades do Projeto da Análise Inter-Procedural zTransparente ao Usuário zFornece info (p.e. análise de alias, propriedades de procedures) para: yotimizador de ninhos de loops yotimizador principal ygerador de código
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Otimizador de Loops Aninhados/ Paralelizador zTodas as linguagens (incluindo OpenMP) zAnálise do nível de dependência de Loops zTransformações do nível de loop em Uniprocessadores zParalelização Automática
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Transformações ao Nível de Loop zBaseado num modelo unificado de custo zHeurísticas integradas com software pipelining yFissão de Loops (Loop Fission) yFusão de Loops (Loop Fusion) yExpansão e Recombinação de Loops (Loop Unroll and jam) yReversão de ordem de loops (Loop interchange) yRemoção de Iterações (Loop Peeling) yRe-organização de Loops (Loop Tiling) yPré-Busca de Vetores (Vector data prefetching)
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Paralelização zAutomática Privatização de Vetores Paralelização Doacross Análise de seções de vetores zBaseada em Diretivas OpenMP Integrada com métodos automáticos
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Fase de Otimização Global zA única representação utilizada é Static Single Assignment (SSA) zSSA é a tecnologia unificadora zImplementa todas as optimizações globais tradicionais zTodas as otimizações preservam o formato SSA zPode re-aplicar cada otimização sempre que for necessário
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Extensões do Pro64 para SSA zRepresentação de aliases e operações indiretas à memória zIntegração de eliminação parcial de redundância (SSA PRE) zSuporte a movimento especulativo de código zPromoção de registradores através da inserção de loads e stores
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Realimentação Usada em todo o compilador zInstrumentação pode ser inserida em cada estágio zDados explícitos para instrumentação são incorporados onde inseridos zDados de instrumentação são mantidos e a sua consistência é verificada em todas as transformações realizadas no programa.
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Projeto para Depuração (DFD) e and Testabilidade (DFT) zDFD e DFT integrados desde o início zÉ possível incluir verificações adicionais de validade. zSeleção de Opções simplificada permite: yInserir components que são reconhecidamente bons yHabilitar/desabilitar componentes inteiros ou otimizações específicas yInvocar heurísticas alternativas yAtivar traces the uma única fase