Parte III
Usando o Pro64 para Pesquisa e
Desenvolvimento em Compiladores
Estudos de Caso
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
Comentários Gerais
 Estudo de Caso I: Integração de um novo
algoritmo de reordenamento de instruções
para minimizar uso de registradores
[Govind,Yang,Amaral,Gao2000]
 Estudo de Caso II: Projeto e avaliação de
um algoritmo para prefetching de ponteiros
indutivos [Stouchinin,Douillet,Amaral,Gao2000]
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
2
Advançado
Para -O0
Adaptação do Pro64 para
um Novo Processador
Crie uma nova targ_info
Ajuste o arquivo de configuração
para a Application Binary Interface
(ABI)
Crie um novo WHIRL-to-CG-lower
para seleção de instruções
Ajuste funções de utilidade do CG
(p.e., predicação, padrões EBO,
Workshop em Sistemas
custos de
SWP,de etc.)
Computacionais
Alto
Desempenho, Setembro 2001
3
Caso I
Introdução do problema MRIS
problem e solução proposta
Formulação do problem
O algoritm proposto
Experiência com o Pro64
Onde começar?
Como começar?
Resultados
Resumo
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
4
Pesquisadores
R. Govindarajan (Indian Inst. Of Science)
Hongbo Yang (Univ. of Delaware)
Chihong Zhang (Conexant)
Jose Nelson Amaral (Univ. of Alberta)
Guang R. Gao (Univ. of Delaware)
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
5
Motivação
Processadores com o estilo da IA-64
Redução de spills na fase de alocação local de
registradores
Redução de pedidos do Alocador Local de
Registradores (LRA)
Redução da pressão por registradores em cada função
Processadores com Execução fora de ordem
Buffer reordenador de instruções
Renaming de registradores
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
6
Problema de Sequenciamento de
Instruções para Minimizar Uso de
Registradores (MRIS)
Dado um Grafo de Dependência de Dados G para
um bloco básico, encontre uma seqüência de
instruções S para G que é ótima no sentido de que
o uso de registradores seja mínimo.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
7
Problema de Sequenciamento de
Instruções para Minimizar Uso de
Registradores (MRIS)
Dado um Grafo de Dependência de Dados G para
um bloco básico, encontre uma seqüência de
instruções S para G que é ótima no sentido de que
o uso de registradores seja mínimo.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
8
Bloco Básico: Exemplo
begin
k := 10;
i := 1;
do begin
if(i=k)
y = (x+4)*(x*8)*((x-4)-x/2)
i = i +1
end
while i <= 20
end
…
Código Fonte
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(12)
k := 10
i := 1;
if i  k goto (13)
t1 := ld(x);
t2 := t1 + 4;
t3 := t1 * 8;
t4 := t1 - 4;
t5 := t1 / 2;
t6 := t2 * t3;
t7 := t4 - t5;
t8 := t6 * t7;
st(y,t8);
i := i + 1;
if i  20 goto (3)
Código de Tres Endereços
9
Bloco Básico: Exemplo
B1
begin
k := 10;
i := 1;
do begin
if(i=k)
B2
(1) k := 10
(2) i := 1;
(3) if i  k goto (13)
B3
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
y = (x+4)*(x*8)*((x-4)-x/2)
i = i +1
end
while i <= 20
end
…
B4
Código Fonte
t1 := ld(x);
t2 := t1 + 4;
t3 := t1 * 8;
t4 := t1 - 4;
t5 := t1 / 2;
t6 := t2 * t3;
t7 := t4 - t5;
t8 := t6 * t7;
st(y,t8);
(13) i := i + 1;
(14) if i  20 goto (3)
Workshop em Sistemas
Computacionais de Alto B5
Desempenho, Setembro 2001 (15) ...
Grafo de 10
Fluxo
de Controle
Problema de Sequenciamento de
Instruções para Minimizar Uso de
Registradores (MRIS)
Dado um Grafo de Dependência de Dados G para
um bloco básico, encontre uma seqüência de
instruções S para G que é ótima no sentido de que
o uso de registradores seja mínimo.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
11
Grafo de Dependência de
Dados
B3
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
(i)
t1 := ld(x);
t2 := t1 + 4;
t3 := t1 * 8;
t4 := t1 - 4;
t5 := t1 / 2;
t6 := t2 * t3;
t7 := t4 - t5;
t8 := t6 * t7;
st(y,t8);
a
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
12
Grafo de Dependência de
Dados
B3
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
(i)
t1 := ld(x);
t2 := t1 + 4;
t3 := t1 * 8;
t4 := t1 - 4;
t5 := t1 / 2;
t6 := t2 * t3;
t7 := t4 - t5;
t8 := t6 * t7;
st(y,t8);
a
b
c
d
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
e
13
Grafo de Dependência de
Dados
B3
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
(i)
t1 := ld(x);
t2 := t1 + 4;
t3 := t1 * 8;
t4 := t1 - 4;
t5 := t1 / 2;
t6 := t2 * t3;
t7 := t4 - t5;
t8 := t6 * t7;
st(y,t8);
a
b
c
d
e
f
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
14
Grafo de Dependência de
Dados
B3
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
(i)
t1 := ld(x);
t2 := t1 + 4;
t3 := t1 * 8;
t4 := t1 - 4;
t5 := t1 / 2;
t6 := t2 * t3;
t7 := t4 - t5;
t8 := t6 * t7;
st(y,t8);
a
b
c
d
f
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
e
g
15
Grafo de Dependência de
Dados
B3
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
(i)
t1 := ld(x);
t2 := t1 + 4;
t3 := t1 * 8;
t4 := t1 - 4;
t5 := t1 / 2;
t6 := t2 * t3;
t7 := t4 - t5;
t8 := t6 * t7;
st(y,t8);
a
b
c
d
f
e
g
h
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
16
Grafo de Dependência de
Dados
B3
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
(i)
t1 := ld(x);
t2 := t1 + 4;
t3 := t1 * 8;
t4 := t1 - 4;
t5 := t1 / 2;
t6 := t2 * t3;
t7 := t4 - t5;
t8 := t6 * t7;
st(y,t8);
a
b
c
d
f
e
g
h
i
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
17
Problema de Sequenciamento de
Instruções para Minimizar Uso de
Registradores (MRIS)
Dado um Grafo de Dependência de Dados G para
um bloco básico, encontre uma seqüência de
instruções S para G que é ótima no sentido de que
o uso de registradores seja mínimo.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
18
Seqüência de Instruções
B3’
B3
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
(i)
t1 := ld(x);
t2 := t1 + 4;
t3 := t1 * 8;
t4 := t1 - 4;
t5 := t1 / 2;
t6 := t2 * t3;
t7 := t4 - t5;
t8 := t6 * t7;
st(y,t8);
Seqüência 1
a
b
c
d
f
e
g
h
i
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
(a) t1 := ld(x);
(d) t4 := t1 - 4;
(e) t5 := t1 / 2;
(g) t7 := t4 - t5;
(b) t2 := t1 + 4;
(c) t3 := t1 * 8;
(f) t6 := t2 * t3;
(h) t8 := t6 * t7;
(i) st(y,t8);
Seqüência 2
B3’’
(a) t1 := ld(x);
(b) t2 := t1 + 4;
(c) t3 := t1 * 8;
(f) t6 := t2 * t3;
(d) t4 := t1 - 4;
(e) t5 := t1 / 2;
(g) t7 := t4 - t5;
(h) t8 := t6 * t7;
(i) st(y,t8);
19
Seqüência 3
Problema de Sequenciamento de
Instruções para Minimizar Uso de
Registradores (MRIS)
Dado um Grafo de Dependência de Dados G para
um bloco básico, encontre uma seqüência de
instruções S para G que é ótima no sentido de que
o uso de registradores seja mínimo.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
20
Uso de Registradores
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
(i)
t1 := ld(x); t1
t2 := t1 + 4;
t2
t3 := t1 * 8;
t3
t4 := t1 - 4;
t4
t5 := t1 / 2;
t5
t6 := t2 * t3;
t6
t7 := t4 - t5;
t7
t8 := t6 * t7;
t8
st(y,t8);
(a)
(d)
(e)
(g)
(c)
(b)
(f)
(h)
(i)
t1 := ld(x); t1
t4 := t1 - 4;
t4
t5 := t1 / 2;
t5
t7 := t4 - t5;
t7
t3 := t1 * 8;
t3
t2 := t1 + 4;
t2
t6 := t2 * t3;
t6
t8 := t6 * t7;
t8
st(y,t8);
Seqüência 1
Seqüência 2
Uso de Registradores = 4
Uso de Registradores = 3
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
21
Problema de Sequenciamento de
Instruções para Minimizar Uso de
Registradores (MRIS)
Dado um Grafo de Dependência de Dados G para
um bloco básico, encontre uma seqüência de
instruções S para G que é ótima no sentido de que
o uso de registradores seja mínimo.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
22
Intuição para Nossa
Solução
Quais instruções podem/não podem
compartilhar registradores neste grafo?
a
b
c
d
f
e
Podemos usar o mesmo registrador
para os valores produzidos por b e f?
g
h
i
Grafo de Dependência
de Dados
Sim, em qualquer seqüência, b e f podem
compartilhar o mesmo registrador porque
f é o único uso do valor produzido por b.
e e g podem compartilhar registradores?
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
23
Intuição para Nossa
Solução
a
b
c
d
f
e
g
h
i
Grafo de Dependência
de Dados
E as instruções f e g?
f e g podem compartilhar
o mesmo registrador?
Não, não existe seqüência legal em
que f e g possam compartilhar
o mesmo registrador porque
h usa os valores de f e g
ao mesmo tempo.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
24
Intuição para Nossa
Solução
a
b
c
d
f
e
E as instruções c e d podem
compartilhar o mesmo registrador?
g
h
i
Grafo de Dependência
de Dados
Depende da seqüência, para que c e d
possam compatilhar o mesmo registrador,
nós temos que ou escalar
f antes de d, ou g antes de c.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
25
Intuição para Nossa
Solução
a
b
c
d
f
e
g
h
i
Nossa intuição é encontrar
subconjuntos de instruções que
podem definitivamente compartilhar
um registrador. Esta informação é
então usada para guiar o
algoritmo de geração de seqüências.
Grafo de Dependência
de Dados
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
26
Intuição para Nossa
Solução
a
b
c
d
f
e
g
h
i
Grafo de Dependência
de Dados
Uma lineagem de instruções é uma
seqüência de instruções em que um
único registrador é passado de uma
instrução a outra (exceto a última
instrução da lineage).
L1 = [a, b, f, h, i)
Como podemos assegurar que
as instruções a, b, f, e h poderão
compartilhar o mesmo registrador?
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
27
Arcos de Seqüenciamento
a
b
c
d
f
e
g
h
i
Grafo de Dependência
de Dados Aumentado
A formação de lineagens impõe uma
restrição no escalonamento do DDG:
o herdeiro escolhido de uma instrução
tem que ser a última instrução listada
entre sues irmãos.
L1 = [a, b, f, h, i)
Portanto, a formação de lineagens
insere arcos de seqüenciamento
no DDG.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
28
Altura de uma Instrução
L1 = [a, b, f, h, i)
a
b
c
d
f
e
g
h
i
Grafo de Dependência
de Dados Aumentado
Se um arco de seqüenciamento
produzisse um ciclo no DDG,
seria impossível encontrar uma
seqüência legal de instruções.
Portanto nós usamos a altura da
instrução, recomputada após cada
formação de lineagem, para selecionar
o herdeiro. Desempates são arbitrários.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
29
Formação de Lineagens
a
b
c
d
f
e
g
h
i
Grafo de Dependência
de Dados Aumentado
L1 = [a, b, f, h, i)
Para a próxima lineagem, as
instruções mais altas que ainda não
estão em lineagem são: c, d, e,
todas com uma altura de 5.
L2 = [c, f)
L3 = [e, g, h)
L4 = [d, g)
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
30
Interferência Entre
Lineagens
a
b
c
d
f
e
L1 = [a, b, f, h, i)
L2 = [c, f)
L3 = [e, g, h)
L4 = [d, g)
g
h
i
Grafo de Dependência
de Dados Aumentado
Duas lineagens Lu = [u1, u2, …, um) e
Lv = [v1, v2, …, vm) definitivamente interferem se:
(i) u1 alcança vn, e
(ii) v1 alcança um.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
31
Grafo de Interferência de
Lineagens
a
b
c
d
f
e
g
h
L1 = [a, b, f, h, i)
L2 = [c, f)
L3 = [e, g, h)
L4 = [d, g)
Quais lineagens definitivamente
interferem entre si?
L1
L4
L2
L3
i
Grafo de Dependência
de Dados Aumentado
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
32
Grafo de Interferência de
Lineagens
a
b
c
d
f
e
g
h
L1 = [a, b, f, h, i)
L2 = [c, f)
L3 = [e, g, h)
L4 = [d, g)
Quais lineagens definitivamente
interferem entre si?
L1
L4
L2
L3
i
Grafo de Dependência
de Dados Aumentado
Workshop em Sistemas
Grafo de Interferência
Computacionais de Alto
Desempenho, Setembro 2001
de Lineagens
33
Grafo de Interferência de
Lineagens
L1 = [a, b, f, h, i)
L2 = [c, f)
L3 = [e, g, h)
L4 = [d, g)
a
b
L1
L4
h
L2
L3
Lineagens
Grafo de Interferência
de Lineagens
Com as restrições de escalonamento impostas
pela formação de lineagens, todas as instruções
de uma linagem podem compartilhar o mesmo
registrador.
i
Seria possível que múltiplas lineagens
compartilhassem of mesmo registrador?
c
d
f
e
g
Grafo de Dependência
de Dados Aumentado
Como podemos encontrar o número mínimo
de registradores
Workshop
em Sistemas se nós considerarmos todas
as seqüências
legais para o DDG aumentado?
Computacionais
de Alto
Desempenho, Setembro 2001
34
Grafo de Interferência de
Lineagens
L1 = [a, b, f, h, i)
L2 = [c, f)
L3 = [e, g, h)
L4 = [d, g)
a
Lineagens
b
c
d
f
e
g
h
L1
L4
L2
L3
Grafo de Interferência
de Lineagens
Nós podemos colorir of grafo de interferência de
lineagens para encontrar um Limite Heurístico
de Registradores (HRB) para o DDG.
i
Grafo de Dependência
de Dados Aumentado
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
35
Colorindo o Grafo de
Interferência de Lineagens
L1 = [a, b, f, h, i)
L2 = [c, f)
L3 = [e, g, h)
L4 = [d, g)
a
Lineagens
b
c
d
f
e
g
h
i
Grafo de Dependência
de Dados Aumentado
L1
L4
L2
L3
Grafo de Interferência
de Lineagens
Nós podemos colorir of grafo de interferência de
lineagens para encontrar um Limite Heurístico
de Registradores (HRB) para o DDG.
Nós conseguimos colorir o grafo com três cores,
portanto devemos encontrar uma seqüência de
instruções que usa três registradores.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
36
Condição para Fusão de
Lineagens
L1 = [a, b, f, h, i)
L2 = [c, f)
L3 = [e, g, h)
L4 = [d, g)
a
Lineagens
b
c
d
f
e
g
h
L1
L4
L2
L3
Grafo de Interferência
de Lineagens
Duas lineagens
Lu = [u1, u2, …, um) e
Lv = [v1, v2, …, vn) podem ser fundidas
em uma única lineagem se:
i
Grafo de Dependência
de Dados Aumentado
(i) u1 alcança vn, e
(ii) v1 não alcança um.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
37
Condição para Fusão de
Lineagens
L1 = [a, b, f, h, I)
L2 = [c, f)
L3 = [e, g, h)
L4 = [d, g)
a
Lineagens
b
c
d
f
e
g
h
L1
L4
L2
L3
Grafo de Interferência
de Lineagens
No exemplo, quais lineagens
podem ser fundidas?
d alcança f, e c não alcança g
i
Grafo de Dependência
de Dados Aumentado
Portanto L4 pode ser fundida com L2 para formar
L5 = [d, g)  [c, f)
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
38
Fusão de Lineagens
L1 = {a, b, f, h, i}
L2 = {c, f}
L3 = {e, g, h}
L4 = {d, g}
a
Lineagens
b
c
d
f
e
g
L1
L4
L2
L3
Grafo de Interferência
de Lineagens
Quando Lu = [u1, u2, …, um) e
Lv = [v1, v2, …, vn) são fundidas:
h
i
Grafo de Dependência
de Dados Aumentado
(1) um arco de seqüenciamento de um a v1
é introduzido no DDG aumentado
(2) Lu e Lv são removidos do LIG
(3) uma nova lineagem Lw = Lu  Lv
Workshop
em Sistemas
é inserida
no LIG
Computacionais de Alto
Desempenho, Setembro 2001
39
Fusão de Lineagens
L1 = [a, b, f, h, I)
L3 = [e, g, h)
L5 = [d, g)  [c, f)
a
Lineagens
b
c
d
f
e
g
h
i
Grafo de Dependência
de Dados Aumentado
L1
L5
L3
Grafo de Interferência
de Lineagens
Portanto a fusão de L4 com L2 resulta em
L5 = [d, g)  [c, f)
Quantas cores nós precisamos para
colorir o LIG?
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
40
Fusão de Lineagens
L1 = [a, b, f, h, I)
L3 = [e, g, h)
L5 = [d, g)  [c, f)
a
Lineagens
b
c
d
f
e
L1
L5
L3
Grafo de Interferência
de Lineagens
g
Nós ainda precisamos de três cores.
h
i
Grafo de Dependência
de Dados Aumentado
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
41
Sequenciamento Usando
Escalonamento de Lista
a
b
c
L1
d
f
e
g
L1 = [a, b, f, h, I)
L3 = [e, g, h)
L5 = [d, g)  [c, f) L5
Lineagens
L3
Grafo de Interferência
de Lineagens
RA
RB
RC
Registradores
h
i
Grafo de Dependência
de Dados Aumentado
Seqüência
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
42
Sequenciamento Usando
Escalonamento de Lista
a
b
c
L1
d
f
e
g
L1 = [a, b, f, h, I)
L3 = [e, g, h)
L5 = [d, g)  [c, f) L5
Lineagens
L3
Grafo de Interferência
de Lineagens
RA
RB
RC
Registradores
h
i
Grafo de Dependência
de Dados Aumentado
a
Seqüência
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
43
Sequenciamento Usando
Escalonamento de Lista
a
b
c
L1
d
f
e
g
L1 = [a, b, f, h, I)
L3 = [e, g, h)
L5 = [d, g)  [c, f) L5
L3
Grafo de Interferência
de Lineagens
Lineagens
RA
RB
RC
Registradores
h
i
Grafo de Dependência
de Dados Aumentado
a
d
Seqüência
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
44
Sequenciamento Usando
Escalonamento de Lista
a
b
c
L1
d
f
e
g
L1 = [a, b, f, h, I)
L3 = [e, g, h)
L5 = [d, g)  [c, f) L5
L3
Grafo de Interferência
de Lineagens
Lineagens
RA
RB
RC
Registradores
h
i
Grafo de Dependência
de Dados Aumentado
a
d
e
Seqüência
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
45
Sequenciamento Usando
Escalonamento de Lista
a
b
c
L1
d
f
e
g
L1 = [a, b, f, h, I)
L3 = [e, g, h)
L5 = [d, g)  [c, f) L5
L3
Grafo de Interferência
de Lineagens
Lineagens
RA
RB
RC
Registradores
h
i
Grafo de Dependência
de Dados Aumentado
a
d
e
g
Seqüência
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
46
Sequenciamento Usando
Escalonamento de Lista
a
b
c
L1
d
f
e
g
L1 = [a, b, f, h, I)
L3 = [e, g, h)
L5 = [d, g)  [c, f) L5
L3
Grafo de Interferência
de Lineagens
Lineagens
RA
RB
RC
Registradores
h
i
Grafo de Dependência
de Dados Aumentado
a
d
e
g
c
Seqüência
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
47
Sequenciamento Usando
Escalonamento de Lista
a
b
c
L1
d
f
e
g
L1 = [a, b, f, h, I)
L3 = [e, g, h)
L5 = [d, g)  [c, f) L5
L3
Grafo de Interferência
de Lineagens
Lineagens
RA
RB
RC
Registradores
h
i
Grafo de Dependência
de Dados Aumentado
a
d
e
g
c
b
Seqüência
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
48
Sequenciamento Usando
Escalonamento de Lista
a
b
c
L1
d
f
e
g
RA
RB
RC
L1 = [a, b, f, h, I)
L3 = [e, g, h)
L5 = [d, g)  [c, f) L5
Lineagens
L3
Grafo de Interferência
de Lineagens
Registradores
e
f
h
i
Grafo de Dependência
de Dados Aumentado
a
d
g
c
b
Seqüência
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
49
Sequenciamento Usando
Escalonamento de Lista
a
b
c
L1
d
f
e
g
RA
RB
RC
L1 = [a, b, f, h, I)
L3 = [e, g, h)
L5 = [d, g)  [c, f) L5
Lineagens
L3
Grafo de Interferência
de Lineagens
Registradores
e
f
h
i
Grafo de Dependência
de Dados Aumentado
a
d
g
c
b
h
Seqüência
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
50
Sequenciamento Usando
Escalonamento de Lista
a
b
c
L1
d
f
e
g
RA
RB
RC
L1 = [a, b, f, h, I)
L3 = [e, g, h)
L5 = [d, g)  [c, f) L5
Lineagens
L3
Grafo de Interferência
de Lineagens
Registradores
e
f
h
i
Grafo de Dependência
de Dados Aumentado
a
d
g
c
b
h
i
Seqüência
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
51
Sumário do Método de
Lineagens
 Um “bom” algoritmo
para construir o LIG
 Um método heurístico
efetivo para calcular
o HRB
 Um método efetivo
para escalonamento
(sem retentativas)
DDG
Grafo de Interfer. de Lineagens (LIG)
Derive HRB
Escalonamento por lista estendido
guiado por HRB
Uma boa seqüência
de instruções
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
52
Experiência
Implementando no Pro64
Projeto e Plano de Execução
Implementação
Depuração e validação
Avaliação
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
53
Implementation
Construção do Grafo de Dependências
Formação de Lineagens
Construção e coloração do LIG
Implementando o algoritmo de
reordenação
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
54
Porting Plan and Design
Entendendo a infra-estrutura do
compilador
Entendendo o modelo de registradores
(descrito nos arquivos targ_info)
p.e.:
classes de registradores: (int, float, predicate, app, control)
convenções para salvar/restaurar registradores: caller/callee
save, valor de retorno, passagem de argumentos, ponteiro
de pilha, etc.
etc.
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
55
Register Allocation
GRA
LRA:
Nível de bloco
Assign_Registers
Sucesso?
Falha?
Re-escalona
movimento local de código
spill registradores globais
spill registradores locais
Fix_LRA_Blues
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
56
Implementação
Construção do DDG: usa rotinas de
serviço nativas: e.g. CG_DEP_Compute_Graph
Colorindo o LIG: usa um pacote
nativo para manipulação de conjuntos
(e.g. bitset.c)
Implementação de Escalonamento:
usa suporte nativo para manipulação
de vetores (e.g. cg_vector.cxx)
Acesso aod grafo de dependências
usa funções nativas: ARC_succs, ARC_preds,
ARC_kind
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
57
Depuração e Validação
Trace file
tt54:0x1. General trace of LRA
tt45: 0x4. Dependence graph
building
tr53. TOP before LRA
tr54. TOP after LRA
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
58
Avaliação
Medidas Estáticas:
Fat point -tt54: 0x40
Medidas Dinâmicas
Hardware counter in R10k perfex
Workshop em Sistemas
Computacionais de Alto
Desempenho, Setembro 2001
59
Performance:
Static Measurements
Compiler Version
HRB
HRB(no fusion)
MIPSPro
Baseline
Benchmark Blocks Average Blocks Average Blocks Average Blocks Average
W/spill Spills W/spill Spills W/spill Spills W/spill Spills
Benchmarks with Low Register Pressure
24
2
27
2
32.5
2
49.5
2
tomcatv
6
1
7
6
4.7
7
3.7
9
swim
9.1
28
10.2
29
9.2
31
11.2
42
su2cor
4.7
3
3.8
5
2.3
13
3.1
20
hydro2d
2.7
3
6.8
4
8.3
3
7.2
5
mgrid
8.95
7.4
9.5
9.2
7.8
11.2
8.95
15.6
Average
Benchmarks with High Register Pressure
17.1
61
18.9
64
16.9
68
23.5
73
applu
11.3
23
11.8
24
10.4
34
13.8
39
turb3d
9.4
54
8.4
68
8.1
87
10.6
118
apsi
73.2
39
67.5
43
59.6
50
62.9
59
fpppp
9.3
62
8.5
79
11.7
111
9.3
146
wave5
21.9
47.8
20.3
55.6
18.5
70.0
8.95
87.0
Average
14 integer registers and 8 FP registers
Performance:
Static Measurements
Compiler Version
Benchmarks Baseline
MIPSPro
HRB(no fusion)
Spills Spills % reduc. Spills % reduc.
Benchmarks with Low Register Pressure
tomcatv
99
65
34.3
54
45.5
swim
33
33
0.18
42
-27.2
su2cor
469
286
39
295
37.1
hydro2d
61
30
50.8
19
68.9
mgrid
36
25
30.6
27
25
Average
140
87.8
37.1
87.4
37.4
Benchmarks with High Register Pressure
applu
1717
1148
33.2
1214
29.3
turb3d
534
355
34.1
284
47.3
apsi
1256
706
43.8
572
54.5
fpppp
3711
2980
19.7
2902
21.8
wave5
1352
1301
3.78
669
50.5
Average
1715
1298
24.3
1128
34.2
14
Workshop em Sistemas
integer
registersde
and
Computacionais
Alto8 FP
Desempenho, Setembro 2001
HRB
Spills % reduc.
48
6
255
14
8
66.2
51.5
81.8
45.6
77
77.8
52.6
1044
260
508
2853
575
1048
39.2
51.8
59.5
23.1
57.5
38.9
registers
61
Performance:
Dynamic Measurements
Compiler Version
Benchmarks Baseline
MIPSPro
HRB(no fusion)
HRB
Time
Time % reduc. Time % reduc. Time % reduc.
Benchmarks with Low Register Pressure
tomcatv
384
380
1.04
377
1.71
371
3.28
swim
319
316
0.78
312
2.21
308
3.52
su2cor
258
248
3.74
258
0.04
252
2.4
hydro2d
615
618
-0.54
620
-0.77
616
-0.11
mgrid
387
395
-2.26
391
-1.25
391
-1.23
Average
392.6 391.6
0.21
391.6
0.21
387.5
1.25
Benchmarks with High Register Pressure
applu
446
441
1.11
446
0.05
442
0.91
turb3d
508
496
2.32
461
9.12
453
10.8
apsi
276
278
-0.52
264
4.47
263
4.78
fpppp
505
471
6.63
463
8.2
465
7.87
wave5
224
220
1.42
216
3.32
218
2.64
Average
391.6 381.3
2.65
370.1
5.5
368.1
6.0
14
Workshop em Sistemas
integer
registersde
and
Computacionais
Alto8 FP
Desempenho, Setembro 2001
registers
62
Download

G - University of Alberta