Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Gerador de Código do Pro64 José Nelson Amaral University of Alberta Edmonton, AB,

Slides:



Advertisements
Apresentações semelhantes
Construção de listas de decisão Os tópicos anteriores tratam de indução de conceitos que podem ser descritos usando uma única região de decisão Neste tópico.
Advertisements

gerador de código intermediário
Sistemas distribuídos Metas de Projeto Prof. Diovani Milhorim
Engenharia de Software
Unidades de Execução e de Controle Sistemas Digitais.
Gerenciamento de memória
Processos no Unix e Linux
OCL Object Constraint Language
Mutação de Interface Interface Mutation: An Approach for Integration Testing Marcio E. Delamaro José C. Maldonado Aditya P. Mathur.
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Prof. Heloise Manica Paris Teixeira
Busca informada (heurística) Parte 2
Arquiteturas Superescalares
Sistemas Operacionais
CISC e RISC.
Introdução Redes LAN - abrangência: edifícios e campos.
HeapSort Filas de Prioridade – Heap
Banco de Dados Oracle AESO.
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Introdução à Informática
Análise Léxica Supondo o trecho de programa abaixo:
Estruturas de Controle
Construção de Compiladores
Inteligência Artificial
Optimização do Desempenho: Técnicas Independentes da Máquina Arquitectura de Computadores Lic. em Engenharia Informática Luís Paulo Santos.
Revisão da Linguagem C.
INF 1771 – Inteligência Artificial
Paradigmas de programação
T ÓPICOS DE I.A. Métodos de Busca Busca em Espaços de Estado Prof. Mário Dantas.
Camada de Rede ROTEAMENTO Rede Local (LAN) Rede Metropolitana (MAN)
Prof. Felipe Ferreira de Oliveira
Programação Avançada Prof. Natalia Castro Fernandes
Sistemas Distribuídos
Arquitetura de computadores
Desenvolvimento de Jogos e Entretenimento Digital
Sistemas Operacionais
COMITÊ BRASILEIRO DE CERTIFICAÇÃO EM ENGENHARIA CLÍNICA
Introdução e Busca Cega
Geração de Código Intermediário
How to Break Software Capítulo 3 Taíse Dias Testing from the user Interface.
Organização e Arquitetura de Computadores
Algoritmos de Processamento e Otimização de Consultas
Estruturas de Dados e Ordenação
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro José Nelson Amaral Compiler Design and Optimization Laboratory Department of Computing.
SISTEMAS OPERACIONAIS I Memória Virtual e Paginação
Geração de Código aula-12-geração-de-código.pdf.
Capítulo VIII Ambientes de Execução
CRSC Segurança em Redes Política de Segurança Eng.º Miguel Frade ESTG - Leiria.
PIC Peripheral Interface Controller
Busca Combinatorial e Métodos de Heurística
Programação e Aplicações Gráficas
Back-End Compilação aula-11-back-end.pdf.
Blocos básicos e Traces Departamento de Estatística e Informática Universidade Federal de Sergipe Compiladores Giovanny Lucero
Microprocesadores x Microcontroladores
8088 Assembly Software Básico Mitsuo Takaki.
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José.
Resolução de Problemas de Busca
1 Introdução aos Agentes Inteligentes Resolução de Problemas de Busca Flávia Barros.
Parte 3 Seção de Dados e Unidade de Controle
Geração de Código Fase final do compilador
Sumário 1 SQL Embutida 2 Processamento de Consultas
Banco de Dados I Unidade 6 Processamento de Consultas Otimização Lógica.
Gerenciamento de Memória - Capítulo 7 - Sistemas Operacionais Prof. Dr. José Carlos Becceneri Luciana Sêda Cardoso.
Sistemas de Arquivos Sistemas Operacionais Profa. Priscila Facciolli
Estruturas de Dados Murilo Salgado Razoli.
ARQUITETURA DE COMPUTADORES Nível do Conjunto de Instruções
Métodos de Ordenação Externa
 Evolução constante das linguagens de programação de alto nível (LAN) desde o Fortran (primeira LAN)  Surgimento de novos paradigmas como a OO, Orientação.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Transcrição da apresentação:

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Gerador de Código do Pro64 José Nelson Amaral University of Alberta Edmonton, AB, Canada Parte III

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Conteúdo zDiagrama de blocos do gerador de código zFormação de Hyperblock e inserção de predicados ( HBF ) zSistema de Consulta de Predicados (PQS) zPreparação de Loops (CGPREP) e software pipelining zEscalonamento global and local (IGLS) zAlocação de registradores global (GRA) e local (LRA) zWHIRL/CGIR e TARG-INFO

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Diagrama de Blocos do Gerador de Código WHIRL Processamento de Loops Internos: expansão, EBO Prep. Loops, software pipelining IGLS: pre-pass GRA, LRA, EBO IGLS: post-pass Opt Fluxo Controle Emissão de Código Rebaixamento WHIRL-to-TOP CGIR: Quad Op List Opt Fluxo Controle I EBO Formação de Hiperbloco Redução Caminho Crítico Opt Fluxo Controle II EBO EBO: Otimização Estendida de blocos básicos, peephole, etc. PQS: Sistema de Consulta de Predicados

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Formação de Hiperblocos e Execução Predicada zHiperbloco: região de fluxo com única- entrada e múltiplas-saídas: ycorpo de loops, região de ifs, etc. zAlgoritmo de formação de Hiperbloco yBaseado no método desenvolvido por Scott Mahlke [Mahlke96] yExtensão da SGI habilita a “duplicação condicional do rabo” baseada em heurísticas para eliminar efeitos colaterais (p.e. duplicação de código).

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Algoritmo de Formação de Hiperbloco zRegiões “redes” (ifs) zLoops internos zRegiões Gerais (baseadas em sequência) zCaminhos ordenados por prioridades zInclusão de um caminho é guiada por seu impacto em recursos, duração do schedule, e nível de prioridade zDesvios internos são substituídos por predicados zReuso de predicados zSaídas laterais Identificação de Região Seleção de Blocos Duplicação de Rabo Conversão de Ifs Objetivo: Manter duração do escalonamento próxima à duração do caminho com máxima prioridade.

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Seleção de Blocos para Formação de Hiperblocos Dois objetivos conflitantes: (1) Mais blocos podem potencialmente melhorar o desempenho através da eliminação de desvios entre os blocos incluídos. (2) Muitos blocos podem resultar em perda de desempenho por causa da saturação dos recursos do processador ou pelo aumento da altura de dependências.

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Função de Priorização de Caminhos A função de priorização de caminhos combina quatro elementos: (1) a freqüência de execução dos caminhos; (2) o número de instruções no caminho; (3) altura da dependência do caminho; (4) condições de perigo no caminho; Intuição: inclui caminhos com menos instruções, com altura de dependência mais baixa, que possuem menos condições de perigo, e que são executados com maior freqüência. Condições de perigo incluem chamadas de funções e armazenamentos na memória não resolvidos.

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Algoritmo de Duplicação do Rabo Para converter o conjunto de blocos selecionados em um hiperbloco (com um único bloco de entrada), fluxo de controle dos blocos não-selecionados (pontos de entrada laterais) tem que ser eliminados. O algoritmo de duplicação do rabo primeiro marca todos os blocos que possuem pontos de entrada lateral. Depois o algoritmo marca todos os blocos que podem ser alcançados a partir dos blocos marcados. Todos os blocos marcados formam os rabos que devem ser duplicados.

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Propriedades do Algoritmo de Formação de Hiperbloco no Pro64 zFormar “bons” vs. “ótimos” hiperblocos zDuplicação condicional de código zReduzir duplicação desnecessária zIntegração de HPF com escalonamento global - uma parte integrada do IGLS zEvitar reversão desnecessária de conversão de ifs

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Formação de Hiperbloco - Um Exemplo aa = a[i]; bb = b[i]; switch (aa) { case 1: if (aa < tabsiz) aa = tab[aa]; case 2: if (bb < tabsiz) bb = tab[bb]; default: ans = aa + bb; 1 4,5 2 6,7 8 (a) Fonte ’ 8’ 7’ (b) CFG (c) Formação de Hiperblocos com duplicação agressiva de rabo H1H2

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Formação de Hiperbloco - Um Exemplo Cont (a) CFG ’ 8’ 7’ H1H H1 H2 (c) Formação de hiperblocos no Pro64 (b) Formação de Hiperblocos com duplicação agressiva de rabo

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Sistema de Consulta de Predicados (PQS) zObjetivo: coletar informação e oferecer interfaces que permitem que outras fases do compilador consultem relações entre os valores dos predicados. zFunções do PQS functions (exemplos) BOOL PQSCG_is_disjoint (PQS_TN tn 1, PQS_TN tn 2 ) BOOL PQSCG_is_subset (PQS_TN_SET& tns 1, PQS_TN_SET& tns 2 ) zEficiência: O(log n), onde n é o número de temporários (TNs) ancestrais.

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Preparação de Loops e Optimização para Software Pipelining zCanonização de Loops para SWP zRemoção de Leitura/Escrita (register aware) zExpansão de Loops (resource aware) zRemoção de recorrências zPré-busca (vários tipos) zConversão de Ifs forçada

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Revisão do Método de Software Pipelining do Pro64 zAplicado somente a loops adequados a SWP zExtensiva preparação e otimização de loops antes da aplicação de SWP [DehnertTowle93] zAlgoritmo de SWP sensível a longevidade dos valores produzidos [Huff93] zAlocação de Registradores depois de escalo- namento baseada em Cydra 5 [RLTS92, DeTo93] zOtimiza while e do loops zSimples conversão para escalonamento sem SWP quando SWP falha.

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Aloca Regist. Escalonamento em Módulo Sensível a Longevidade para SWP no Pro64 Propriedades zTenta inserir cada operação ASAP ou ALAP para minimizar pressão em registradores zEscalonamento com Folgas zRetentativas limitadas zEscalonamento baseado em operações Escolha uma “boa” operação para inserir no escalonamento parcial no períodoEstart/Lstart Compute Estart/Lstart para todas ops não inseridas Sucesso não sim Remove Ops c/conflito fim

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Método Integrado de Escalonamento Global e Local (IGLS) zO IGLS integra movimento global de código (GCM) com escalonamento local [MantripragadaJainDehnert98] zIGLS estendido a escalonamento de hiperbloco zExecuta movimento lucrativo de código entre hiperblocos e regiões normais

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Diagrama de Blocos da Fase IGLS Escalonamento de Hiperblocos (HBS) Movimento Global de Código (GCM) Escalonamento Local de Código (LCS) Seleção Prioritária de Blocos Seleção de Movimento Seleção de Alvo

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Vantagens da Extensão do IGLS Um Re-exame do Exemplo H1 H2 (a) Hiperbloco no Pro64 zVantagens: yNão existem fronteiras fixas entre hiperblocos e não-hiperblocos yGCM move código para dentro ou para fora de um hiperbloco de acordo com o custo ’ (b) Extensão do Hiperbloco H1 H2

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Software Pipelining vs Escalonamento Normal loop candidato a SWP ? Processam. de Loop Interior (SWP) Emissão de Código IGLS GRA/LRA IGLS Não Sim Falha/sem lucro Sucesso

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro WHIRL zBaseado em Árvores Abstratas de Sintaxe zRepresentação é simples e eficiente zUsada em várias fases através de rebaixamento zProjetada para múltiplas arquiteturas zUsa mapas e tabelas de símbolos

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Representação Intermediária para Geração de Código (CGIR) zSimples e convencional zArquitetura Load/store zPredicação zFlags em operações (cópia, adição inteira, load, etc.) zFlags em operandos (TNs) zEstruturada como blocos básicos

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Alocação de Registradores Global e Local (GRA/LRA) zLRA-RQ gera uma estimativa para o número de registradores requeridos zAloca variáveis globais usando um alocador baseado na prioridade de registradores [ChowHennessy90,Chow83, Briggs92] zIncorpora extensões específicas a IA-64, e.g. uso da pilha de registradores LRA Pedido de Registr. LRA-RQ Alocação de Registr. Baseada na Prioridade de Registradores comExtensões p/IA-64 LRA Para postpass IGLS Do prepass IGLS GRA

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Alocador de Registradores do Pro64 Baseado em Prioridades Create_LRANGE (live range set) Create_Live_BB_Sets (para cada live range, descubra blocos onde a variável está viva) Create_Interference_Graph (percorre o grafo em ordem topológica reversa para encontrar intervalos de vida que são simultaneamente vivos) Simplify (forma uma pilha de LRs para ser colorida de cima para baixo) Choose_Register or GRA_Note_Spill Spill (Spill e otimiza a localização de spill-code) GRA-Create GRA-Color GRA-Spill

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Alocação Local de Registradores (LRA) zAssign_registers usa uma varredura linear reversa com prioridade zReordenamento: Ordenação em “depth-first” no DDG Assign_Registers sucesso Fix_LRA Reordenamento de Instruções Spill global spill local falha primeira vez

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Do WHIRL ao CGIR: Um Exemplo T 1 = sp + &a; T 2 = ld T 1 T 3 = sp + &i; T 4 = ld T 3 T 5 = sxt T 4 T 6 = T 5 << 2 T 7 = T 6 T 8 = T 2 + T 7 T 9 = ld T 8 T 10 = sp + &aa := st T 10 T 9 int *a; int i; int aa; aa = a[i]; (a) Fonte STaa LD + a CVTL324 * i (b) WHIRL (c) CGIR

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro zInformação passada: yinformação de alias yinformação de loop ytabela de símbolos e mapeamentos Do WHIRL ao CGIR Cont’d

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro A Tabela com Informação Sobre a Arquitetura Alvo (TARG_INFO) Objetivo: zDescrição parametrizada da máquina alvo e da arquitetura do sistema zSepara detalhes da arquitetura dos algoritmos do compilador zMinimiza mudanças no compilador quando o compilador é adaptado para uma nova arquitetura.

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro zBaseada em uma extensão das tabelas da Cydra, com grandes melhoramentos zModelos de architetura que já foram implementados com a TARG_INFO: yToda a família MIPS yIA-64 yIA-32 yProcessadores gráficos da SGI (versão anterior) A Tabela com Informação Sobre a Arquitetura Alvo (TARG_INFO) (Cont.)