workshop em sistemas computacionais de alto desempenho, setembro 20011 gerador de código do pro64...

28
Workshop em Sistemas Com putacionais de Alto Dese mpenho, Setembro 2001 1 Gerador de Código do Pro64 José Nelson Amaral University of Alberta Edmonton, AB, Canada http://www.cs.ualberta.ca/~amaral Parte III

Upload: internet

Post on 21-Apr-2015

108 views

Category:

Documents


2 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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.

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

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.

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

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.

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

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.

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

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

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

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

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

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

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

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.

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

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

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

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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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

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