Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
1
Gerador de Código do Pro64 José Nelson Amaral
University of AlbertaEdmonton, AB, Canada
http://www.cs.ualberta.ca/~amaral
Parte III
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
2
Conteúdo
Diagrama de blocos do gerador de códigoFormação de Hyperblock e inserção de
predicados (HBF)Sistema de Consulta de Predicados (PQS)
Preparação de Loops (CGPREP) e software pipelining
Escalonamento global and local (IGLS)
Alocação de registradores global (GRA) e local (LRA)
WHIRL/CGIR e TARG-INFO
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
3
Diagrama de Blocos do Gerador de Código
WHIRL
Processamento de Loops Internos: expansão, EBO
Prep. Loops, software pipelining
IGLS: pre-passGRA, LRA, EBOIGLS: post-passOpt Fluxo Controle
Emissão de Código
Rebaixamento WHIRL-to-TOP
CGIR: Quad Op List
Opt Fluxo Controle IEBO
Formação de Hiperbloco Redução Caminho Crítico
Opt Fluxo Controle IIEBO
EBO:OtimizaçãoEstendida deblocos básicos,peephole,etc.
PQS:Sistema deConsulta dePredicados
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
4
Formação de Hiperblocos eExecução Predicada
Hiperbloco: região de fluxo com única-entrada e múltiplas-saídas: corpo de loops, região de ifs, etc.
Algoritmo de formação de Hiperbloco Baseado no método desenvolvido por Scott
Mahlke [Mahlke96]
Extensã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 2001
5
Algoritmo de Formação de Hiperbloco
Regiões “redes” (ifs) Loops internos Regiões Gerais (baseadas em sequência) Caminhos ordenados por prioridades Inclusão de um caminho é guiada por seu
impacto em recursos, duração do schedule, e nível de prioridade
Desvios internos são substituídos por predicados
Reuso de predicados Saídas laterais
Identificaçãode Região
Seleçãode Blocos
Duplicaçãode Rabo
Conversãode 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 2001
6
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 2001
7
Função de Priorização de Caminhos
A função de priorização de caminhos combinaquatro 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çõese armazenamentos na memória não resolvidos.
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
8
Algoritmo de Duplicação do Rabo
Para converter o conjunto de blocos selecionados emum 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 marcatodos 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 quedevem ser duplicados.
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
9
Propriedades do Algoritmo de Formação de Hiperbloco
no Pro64
Formar “bons” vs. “ótimos” hiperblocos
Duplicação condicional de códigoReduzir duplicação desnecessáriaIntegração de HPF com escalonamento
global - uma parte integrada do IGLS Evitar reversão desnecessária de
conversão de ifs
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
10
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
26,7
8
(a) Fonte
1
4 2
5
6
7
8
1
24
5
6
7
8
6’
8’
7’
(b) CFG (c) Formação de Hiperblocos com duplicação agressiva de rabo
H1 H2
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
11
Formação de Hiperbloco - Um Exemplo Cont.
1
4 2
5
6
7
8
(a) CFG
1
24
5
6
7
8
6’
8’
7’
H1 H2
1
4 2
5
6
7
8
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 2001
12
Sistema de Consulta de Predicados (PQS)
Objetivo: coletar informação e oferecer interfaces que permitem que outras fases do compilador consultem relações entre os valores dos predicados.
Funções do PQS functions (exemplos) BOOL PQSCG_is_disjoint (PQS_TN tn1, PQS_TN tn2)
BOOL PQSCG_is_subset (PQS_TN_SET& tns1, PQS_TN_SET& tns2)
Eficiência: O(log n), onde n é o número de temporários (TNs) ancestrais.
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
13
Preparação de Loops e Optimização para Software
Pipelining
Canonização de Loops para SWPRemoção de Leitura/Escrita
(register aware)Expansão de Loops (resource aware)
Remoção de recorrênciasPré-busca (vários tipos)
Conversão de Ifs forçada
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
14
Revisão do Método de Software Pipelining do Pro64
Aplicado somente a loops adequados a SWPExtensiva preparação e otimização de loops
antes da aplicação de SWP [DehnertTowle93]
Algoritmo de SWP sensível a longevidade dos valores produzidos [Huff93]
Alocação de Registradores depois de escalo-namento baseada em Cydra 5 [RLTS92, DeTo93]
Otimiza while e do loopsSimples conversão para escalonamento sem
SWP quando SWP falha.
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
15
AlocaRegist.
Escalonamento em Módulo Sensível a Longevidade para
SWP no Pro64
Propriedades Tenta inserir cada
operação ASAP ou ALAP para minimizar pressão em registradores
Escalonamento com Folgas
Retentativas limitadas Escalonamento baseado
em operações
Escolha uma “boa” operação para inserir no escalonamento parcial no períodoEstart/Lstart
Compute Estart/Lstart paratodas ops não inseridas
Sucessonão
sim
Remove Ops c/conflitofim
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
16
Método Integrado de Escalonamento Global e
Local (IGLS)
O IGLS integra movimento global de código (GCM) com escalonamento local [MantripragadaJainDehnert98]
IGLS estendido a escalonamento de hiperbloco
Executa movimento lucrativo de código entre hiperblocos e regiões normais
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
17
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 2001
18
Vantagens da Extensão do IGLS
Um Re-exame do Exemplo
1
4 2
5
6
7
8
H1
H2
(a) Hiperbloco no Pro64
Vantagens: Não existem
fronteiras fixas entre hiperblocos e não-hiperblocos
GCM move código para dentro ou para fora de um hiperbloco de acordo com o custo
1
24
5
6
7
8 8’
(b) Extensão do Hiperbloco
H1
H2
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
19
Software Pipelining vs
Escalonamento Normal
loop candidatoa SWP ?
Processam. de Loop Interior (SWP)
Emissão de Código
IGLS
GRA/LRA
IGLS
NãoSim
Falha/sem lucro
Sucesso
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
20
WHIRL
Baseado em Árvores Abstratas de Sintaxe
Representação é simples e eficienteUsada em várias fases através de
rebaixamentoProjetada para múltiplas arquiteturas
Usa mapas e tabelas de símbolos
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
21
Representação Intermediária para Geração de Código
(CGIR)
Simples e convencionalArquitetura Load/storePredicaçãoFlags em operações (cópia, adição
inteira, load, etc.)Flags em operandos (TNs)Estruturada como blocos básicos
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
22
Alocação de Registradores Global e Local
(GRA/LRA)
LRA-RQ gera uma estimativa para o número de registradores requeridos
Aloca variáveis globais usando um alocador baseado na prioridade de registradores [ChowHennessy90,Chow83, Briggs92]
Incorpora 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 2001
23
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 2001
24
Alocação Local de Registradores (LRA)
Assign_registers usa uma varredura linear reversa com prioridade
Reordenamento: Ordenação em “depth-first” no DDG
Assign_Registers
sucesso
Fix_LRA
Reordenamento de Instruções
Spill globalspill local
falha
primeiravez
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
25
Do WHIRL ao CGIR: Um Exemplo
T1 = sp + &a;
T2 = ld T1
T3 = sp + &i;
T4 = ld T3
T5 = sxt T4
T6 = T5 << 2
T7 = T6
T8 = T2 + T7
T9 = ld T8
T10 = sp + &aa
:= st T10 T9
int *a;int i;int aa;aa = a[i];
(a) Fonte
ST aa
LD
+
a
CVTL32 4
*
i
(b) WHIRL (c) CGIR
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
26
Informação passada: informação de alias informação de loop tabela de símbolos e
mapeamentos
Do WHIRL ao CGIR Cont’d
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
27
A Tabela com Informação Sobre a Arquitetura Alvo
(TARG_INFO)
Objetivo:Descrição parametrizada da máquina
alvo e da arquitetura do sistemaSepara detalhes da arquitetura dos
algoritmos do compiladorMinimiza mudanças no compilador
quando o compilador é adaptado para uma nova arquitetura.
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001
28
Baseada em uma extensão das tabelas da Cydra, com grandes melhoramentos
Modelos de architetura que já foram implementados com a TARG_INFO: Toda a família MIPS IA-64 IA-32 Processadores gráficos da SGI (versão
anterior)
A Tabela com Informação Sobre a Arquitetura Alvo
(TARG_INFO) (Cont.)