A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Gerador de Código do Pro64 José Nelson Amaral University of Alberta Edmonton, AB,"— Transcrição da apresentação:

1 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

2 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

3 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

4 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).

5 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.

6 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.

7 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.

8 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.

9 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

10 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

11 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

12 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.

13 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

14 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.

15 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

16 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

17 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

18 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

19 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

20 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

21 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

22 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

23 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

24 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

25 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

26 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

27 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.

28 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.)


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

Apresentações semelhantes


Anúncios Google