Parte III
Gerador de Código do Pro64
José Nelson Amaral
University of Alberta
Edmonton, AB, Canada
http://www.cs.ualberta.ca/~amaral
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
1
Conteúdo
Diagrama de blocos do gerador de código
Formaçã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)
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
 WHIRL/CGIR e TARG-INFO
2
Diagrama de Blocos do
Gerador de Código
WHIRL
Rebaixamento WHIRL-to-TOP
EBO:
Otimização
Estendida de
blocos básicos,
peephole,
etc.
PQS:
Sistema de
Consulta de
Predicados
Opt Fluxo Controle II
EBO
CGIR: Quad Op List
Opt Fluxo Controle I
EBO
IGLS: pre-pass
GRA, LRA, EBO
IGLS: post-pass
Opt Fluxo Controle
Formação de Hiperbloco
Redução Caminho Crítico
Processamento de Loops Internos:
expansão, EBO
Prep. Loops,
software
pipelining
Workshop
em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
Emissão de Código
3
Formação de Hiperblocos e
Execução Predicada
Hiperbloco: região de fluxo com únicaentrada 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
Workshop em Sistemas
(p.e. duplicação
dedecódigo).
Computacionais
Alto
Desempenho, Setembro 2001
4
Algoritmo de Formação de
Hiperbloco
Identificação
de Região
Seleção
de Blocos
Duplicação
de Rabo
Conversão
de Ifs





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
Objetivo: Manter duração do escalonamento próxima à
duração do caminho com máxima prioridade.
 Desvios internos são substituídos por
predicados
 Reuso de predicados
Workshop em Sistemas

Saídas laterais
Computacionais de Alto
Desempenho, Setembro 2001
5
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
6
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
Workshopna
em Sistemas
e armazenamentos
memória não resolvidos.
Computacionais de Alto
Desempenho, Setembro 2001
7
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
Workshop em Sistemas
devem ser duplicados.
Computacionais de Alto
Desempenho, Setembro 2001
8
Propriedades do Algoritmo de
Formação de Hiperbloco no
Pro64
Formar “bons” vs. “ótimos” hiperblocos
Duplicação condicional de código
Reduzir duplicação desnecessária
Integraçã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
9
Formação de Hiperbloco - Um
Exemplo
1
1
1
4,5
2
6,7
8
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;
4
4
2
2
5
5
7’
7
7
8
8
H1
(a) Fonte
(b) CFG
6’
6
6
8’
H2
(c) Formação de Hiperblocos
com duplicação agressiva
de rabo
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
10
Formação de Hiperbloco - Um
Exemplo
Cont.
1
1
1
4
4
2
2
4
2
H1
5
5
6’
6
5
6
6
7’
7
7
8’
8
8
(a) CFG
H1
H2
(b) Formação de Hiperblocos
em Sistemas
com Workshop
duplicação
agressiva
Computacionais de Alto
de rabo
Desempenho, Setembro 2001
7
H2
8
(c) Formação de hiperblocos
no Pro64
11
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
12
Preparação de Loops e
Optimização para Software
Pipelining
Canonização de Loops para SWP
Remoção de Leitura/Escrita (register
aware)
Expansão de Loops (resource aware)
Remoção de recorrências
Pré-busca (vários tipos)
Conversão de Ifs forçada
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
13
Revisão do Método de
Software Pipelining do Pro64
Aplicado somente a loops adequados a SWP
Extensiva 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 escalonamento baseada em Cydra 5 [RLTS92, DeTo93]
Otimiza while e do loops
Simples conversão para escalonamento sem
em Sistemas
SWP quando Workshop
SWP
falha.
Computacionais
de Alto
Desempenho, Setembro 2001
14
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
Compute Estart/Lstart para
todas ops não inseridas
Escolha uma “boa” operação
para inserir no escalonamento
parcial no períodoEstart/Lstart
sim
Sucesso
não
Aloca
Regist.
fim
Remove Ops c/conflito
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
15
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
16
Diagrama de Blocos
da Fase IGLS
Escalonamento de
Hiperblocos (HBS)
Seleção Prioritária de Blocos
Movimento Global de
Código (GCM)
Seleção de Movimento
Seleção de Alvo
Escalonamento Local
de Código (LCS)
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
17
Vantagens da Extensão do
IGLS
Um Re-exame do Exemplo
1
 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
4
4
2
2
H1
5
5
6
6
7
7
H2
H1
8
(a) Hiperbloco no Pro64
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
8
8’
H2
(b) Extensão
do Hiperbloco
18
Software Pipelining
vs
Escalonamento Normal
Sim
loop candidato
a SWP ?
IGLS
Processam. de Loop
Interior (SWP)
GRA/LRA
Falha/sem lucro
Sucesso
Não
IGLS
Emissão de Código
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
19
WHIRL
Baseado em Árvores Abstratas de
Sintaxe
Representação é simples e eficiente
Usada em várias fases através de
rebaixamento
Projetada para múltiplas arquiteturas
Usa mapas e tabelas de símbolos
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
20
Representação Intermediária
para Geração de Código
(CGIR)
Simples e convencional
Arquitetura Load/store
Predicação
Flags 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
21
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]
Do prepass IGLS
GRA
LRA Pedido de Registr.
LRA-RQ
Alocação de Registr.
Baseada na Prioridade
de Registradores
comExtensões p/IA-64
 Incorpora extensões
específicas a IA-64, e.g.
uso da pilha de Workshop em Sistemas
Computacionais de Alto
registradores
Desempenho, Setembro 2001
LRA
Para postpass IGLS
22
Alocador de
Registradores do Pro64
Baseado em Prioridades
Create_LRANGE
GRA-Create
(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
GRA-Color
GRA-Spill
(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)
Workshop
em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
23
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
falha
sucesso
Fix_LRA
primeira
vez
Reordenamento
de Instruções
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
Spill global
spill local
24
Do WHIRL ao CGIR:
Um Exemplo
i
T1 = sp + &a;
T2 = ld
T1
T3 = sp + &i;
T4 = ld
T3
T5 = sxt T4
T6 = T5 << 2
T 7 = T6
T 8 = T2 + T7
T9 = ld T8
T10 = sp + &aa
:= st T10 T9
(b) WHIRL
(c) CGIR
ST aa
int *a;
int
i;
int
aa;
aa = a[i];
LD
+
a
*
CVTL32
(a) Fonte
4
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
25
Do WHIRL ao CGIR
Cont’d
Informação passada:
informação de alias
informação de loop
tabela de símbolos e
mapeamentos
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
26
A Tabela com Informação
Sobre a Arquitetura Alvo
(TARG_INFO)
Objetivo:
Descrição parametrizada da máquina alvo
e da arquitetura do sistema
Separa detalhes da arquitetura dos
algoritmos do compilador
Minimiza mudanças no compilador
quando o compilador é adaptado para
uma nova arquitetura.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
27
A Tabela com Informação
Sobre a Arquitetura Alvo
(TARG_INFO) (Cont.)
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)
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
28
Download

Formação de Hiperbloco - University of Alberta