workshop em sistemas computacionais de alto desempenho, setembro 20011 usando o pro64 para pesquisa...

62
Workshop em Sistemas Com putacionais de Alto Dese mpenho, Setembro 2001 1 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 Parte III

Upload: yago-cal

Post on 07-Apr-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

1

Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores

Estudos de CasoJosé 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 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

2

ConteúdoComentários GeraisEstudo 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]

Page 3: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

3

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, custos de SWP, etc.)

Adv

ança

doPa

ra -O

0

Page 4: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

4

Caso IIntroduçã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

Page 5: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

5

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)

Page 6: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

6

MotivaçãoProcessadores 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çãoProcessadores com Execução fora de ordem

Buffer reordenador de instruções Renaming de registradores

Page 7: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

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 queo uso de registradores seja mínimo.

Page 8: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

8

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 queo uso de registradores seja mínimo.

Page 9: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

9

Bloco Básico: Exemplo

(1) k := 10(2) i := 1;(3) if i k goto (13)(4) t1 := ld(x);(5) t2 := t1 + 4;(6) t3 := t1 * 8;(7) t4 := t1 - 4;(8) t5 := t1 / 2;(9) t6 := t2 * t3;(10) t7 := t4 - t5;(11) t8 := t6 * t7;(12) st(y,t8);(13) i := i + 1; (12) if i 20 goto (3)

Código de Tres Endereços

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 <= 20end…

Código Fonte

Page 10: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

10

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 <= 20end…

(4) t1 := ld(x);(5) t2 := t1 + 4;(6) t3 := t1 * 8;(7) t4 := t1 - 4;(8) t5 := t1 / 2;(9) t6 := t2 * t3;(10) t7 := t4 - t5;(11) t8 := t6 * t7;(12) st(y,t8);

Código Fonte

(1) k := 10(2) i := 1;

(3) if i k goto (13)

(13) i := i + 1; (14) if i 20 goto (3)

(15) ...

B1

B2B3

B4

B5 Grafo de Fluxo de Controle

Page 11: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

11

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 queo uso de registradores seja mínimo.

Page 12: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

12

Grafo de Dependência de Dados

(a) t1 := ld(x);(b) t2 := t1 + 4;(c) t3 := t1 * 8;(d) t4 := t1 - 4;(e) t5 := t1 / 2;(f) t6 := t2 * t3;(g) t7 := t4 - t5;(h) t8 := t6 * t7;(i) st(y,t8);

B3a

Page 13: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

13

Grafo de Dependência de Dados

(a) t1 := ld(x);(b) t2 := t1 + 4;(c) t3 := t1 * 8;(d) t4 := t1 - 4;(e) t5 := t1 / 2;(f) t6 := t2 * t3;(g) t7 := t4 - t5;(h) t8 := t6 * t7;(i) st(y,t8);

B3a

b c d e

Page 14: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

14

Grafo de Dependência de Dados

B3a

b c d e

f

(a) t1 := ld(x);(b) t2 := t1 + 4;(c) t3 := t1 * 8;(d) t4 := t1 - 4;(e) t5 := t1 / 2;(f) t6 := t2 * t3;(g) t7 := t4 - t5;(h) t8 := t6 * t7;(i) st(y,t8);

Page 15: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

15

Grafo de Dependência de Dados

B3a

b c d e

f g

(a) t1 := ld(x);(b) t2 := t1 + 4;(c) t3 := t1 * 8;(d) t4 := t1 - 4;(e) t5 := t1 / 2;(f) t6 := t2 * t3;(g) t7 := t4 - t5;(h) t8 := t6 * t7;(i) st(y,t8);

Page 16: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

16

Grafo de Dependência de Dados

B3a

b c d e

f g

h

(a) t1 := ld(x);(b) t2 := t1 + 4;(c) t3 := t1 * 8;(d) t4 := t1 - 4;(e) t5 := t1 / 2;(f) t6 := t2 * t3;(g) t7 := t4 - t5;(h) t8 := t6 * t7;(i) st(y,t8);

Page 17: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

17

Grafo de Dependência de Dados

B3a

b c d e

f g

h

i

(a) t1 := ld(x);(b) t2 := t1 + 4;(c) t3 := t1 * 8;(d) t4 := t1 - 4;(e) t5 := t1 / 2;(f) t6 := t2 * t3;(g) t7 := t4 - t5;(h) t8 := t6 * t7;(i) st(y,t8);

Page 18: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

18

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 queo uso de registradores seja mínimo.

Page 19: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

19

Seqüência de Instruções

a

b c d e

f g

h

i

(a) t1 := ld(x);(b) t2 := t1 + 4;(c) t3 := t1 * 8;(d) t4 := t1 - 4;(e) t5 := t1 / 2;(f) t6 := t2 * t3;(g) t7 := t4 - t5;(h) t8 := t6 * t7;(i) st(y,t8);

B3

(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);

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

B3’’

Seqüência 1

Seqüência 2

Seqüência 3

Page 20: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

20

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 queo uso de registradores seja mínimo.

Page 21: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

21

(a) t1 := ld(x);(d) t4 := t1 - 4;(e) t5 := t1 / 2;(g) t7 := t4 - t5;(c) t3 := t1 * 8;(b) t2 := t1 + 4;(f) t6 := t2 * t3;(h) t8 := t6 * t7;(i) st(y,t8);

Seqüência 2

Uso de Registradores(a) t1 := ld(x);(b) t2 := t1 + 4;(c) t3 := t1 * 8;(d) t4 := t1 - 4;(e) t5 := t1 / 2;(f) t6 := t2 * t3;(g) t7 := t4 - t5;(h) t8 := t6 * t7;(i) st(y,t8);

t1

Seqüência 1

t2t3

t4t5

t6t7

t8

t1t4

t5t7

t3t2

t6t8

Uso de Registradores = 4 Uso de Registradores = 3

Page 22: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

22

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 queo uso de registradores seja mínimo.

Page 23: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

23

Intuição para Nossa Solução

a

b c d e

f g

h

i

Quais instruções podem/não podem compartilhar registradores neste grafo?

Podemos usar o mesmo registradorpara os valores produzidos por b e f?

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?Grafo de Dependência

de Dados

Page 24: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

24

Intuição para Nossa Solução

a

b c d e

f g

h

i

E as instruções f e g? f e g podem compartilhar

o mesmo registrador?

Não, não existe seqüência legal emque f e g possam compartilhar

o mesmo registrador porqueh usa os valores de f e g

ao mesmo tempo.Grafo de Dependência de Dados

Page 25: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

25

Intuição para Nossa Solução

a

b c d e

f g

h

i

E as instruções c e d podemcompartilhar o mesmo registrador?

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.Grafo de Dependência

de Dados

Page 26: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

26

Intuição para Nossa Solução

a

b c d e

f g

h

i

Nossa intuição é encontrar subconjuntos de instruções que

podem definitivamente compartilharum registrador. Esta informação é

então usada para guiar oalgoritmo de geração de seqüências.

Grafo de Dependência de Dados

Page 27: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

27

Intuição para Nossa Solução

a

b c d e

f g

h

i

Uma lineagem de instruções é umaseqüência de instruções em que umúnico registrador é passado de umainstrução a outra (exceto a últimainstrução da lineage).

Como podemos assegurar queas instruções a, b, f, e h poderãocompartilhar o mesmo registrador?

L1 = [a, b, f, h, i)

a

b

f

h

Grafo de Dependência de Dados

Page 28: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

28

Arcos de Seqüenciamento

a

b c d e

f g

h

i

A formação de lineagens impõe umarestrição no escalonamento do DDG:o herdeiro escolhido de uma instruçãotem 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.Grafo de Dependência

de Dados Aumentado

Page 29: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

29

Altura de uma Instrução

a

b c d e

f g

h

i

L1 = [a, b, f, h, i)

Se um arco de seqüenciamentoproduzisse um ciclo no DDG,seria impossível encontrar umaseqüê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.Grafo de Dependência

de Dados Aumentado

Page 30: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

30

Formação de Lineagens

a

b c d e

f g

h

i

L1 = [a, b, f, h, i)Para a próxima lineagem, asinstruções mais altas que ainda nãoestão em lineagem são: c, d, e,todas com uma altura de 5.L2 = [c, f)

c

L3 = [e, g, h)

e

g

L4 = [d, g)

d

Grafo de Dependência de Dados Aumentado

Page 31: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

31

Interferência Entre LineagensL1 = [a, b, f, h, i)L2 = [c, f)L3 = [e, g, h)L4 = [d, g)

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.

a

b c d e

f g

h

iGrafo de Dependência de Dados Aumentado

Page 32: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

32

Grafo de Interferência de Lineagens

L1 = [a, b, f, h, i)L2 = [c, f)L3 = [e, g, h)L4 = [d, g)

a

b c d e

f g

h

i

L1

L3L2

L4

Quais lineagens definitivamenteinterferem entre si?

Grafo de Dependência de Dados Aumentado

Page 33: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

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 c d e

f g

h

i

L1

L3L2

L4

Grafo de Interferência de Lineagens

Quais lineagens definitivamenteinterferem entre si?

Grafo de Dependência de Dados Aumentado

Page 34: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

34

L1 = [a, b, f, h, i)L2 = [c, f)L3 = [e, g, h)L4 = [d, g)a

b c d e

f g

h

i

L1

L3L2

L4

Lineagens

Com as restrições de escalonamento impostaspela formação de lineagens, todas as instruçõesde uma linagem podem compartilhar o mesmoregistrador.

Seria possível que múltiplas lineagens compartilhassem of mesmo registrador?

Como podemos encontrar o número mínimode registradores se nós considerarmos todasas seqüências legais para o DDG aumentado?

Grafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Grafo de Interferência de Lineagens

Page 35: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

35

L1 = [a, b, f, h, i)L2 = [c, f)L3 = [e, g, h)L4 = [d, g)a

b c d e

f g

h

i

L1

L3L2

L4

Lineagens

Nós podemos colorir of grafo de interferência delineagens para encontrar um Limite Heurísticode Registradores (HRB) para o DDG.

Grafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Grafo de Interferência de Lineagens

Page 36: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

36

a

b c d e

f g

h

i

L1

L3L2

L4

Lineagens

Nós conseguimos colorir o grafo com três cores,portanto devemos encontrar uma seqüência deinstruções que usa três registradores.

L1 = [a, b, f, h, i)L2 = [c, f)L3 = [e, g, h)L4 = [d, g)

Grafo de Dependência de Dados Aumentado

Colorindo o Grafo de Interferência de Lineagens

Grafo de Interferência de Lineagens

Nós podemos colorir of grafo de interferência delineagens para encontrar um Limite Heurísticode Registradores (HRB) para o DDG.

Page 37: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

37

Condição para Fusão de Lineagens

a

b c d e

f g

h

i

Grafo de Interferência de Lineagens

L1

L3L2

L4

Duas lineagensLu = [u1, u2, …, um) e Lv = [v1, v2, …, vn) podem ser fundidasem uma única lineagem se:

(i) u1 alcança vn, e (ii) v1 não alcança um.

L1 = [a, b, f, h, i)L2 = [c, f)L3 = [e, g, h)L4 = [d, g)

Lineagens

Grafo de Dependência de Dados Aumentado

Page 38: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

38

L1 = [a, b, f, h, I)L2 = [c, f)L3 = [e, g, h)L4 = [d, g)a

b c d e

f g

h

i

L1

L3L2

L4

Lineagens

No exemplo, quais lineagens podem ser fundidas?

d alcança f, e c não alcança g

Portanto L4 pode ser fundida com L2 para formarL5 = [d, g) [c, f)

Grafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Condição para Fusão de Lineagens

Page 39: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

39

Fusão de LineagensL1 = {a, b, f, h, i}L2 = {c, f}L3 = {e, g, h}L4 = {d, g}a

b c d e

f g

h

i

L1

L3L2

L4

Lineagens

Quando Lu = [u1, u2, …, um) e Lv = [v1, v2, …, vn) são fundidas:

(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 é inserida no LIG

Grafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Page 40: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

40

L1 = [a, b, f, h, I)L3 = [e, g, h)L5 = [d, g) [c, f)

a

b c d e

f g

h

i

L1

L3L5Lineagens

Quantas cores nós precisamos paracolorir o LIG?

Portanto a fusão de L4 com L2 resulta emL5 = [d, g) [c, f)

Grafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Fusão de Lineagens

Page 41: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

41

L1 = [a, b, f, h, I)L3 = [e, g, h)L5 = [d, g) [c, f)

a

b c d e

f g

h

i

L1

L3L5Lineagens

Nós ainda precisamos de três cores.

Grafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Fusão de Lineagens

Page 42: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

42

Sequenciamento Usando Escalonamento de Lista

RARBRC

L1

L3L5

L1 = [a, b, f, h, I)L3 = [e, g, h)L5 = [d, g) [c, f) Lineagens

a

b c d e

f g

h

i

Grafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Registradores

Seqüência

Page 43: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

43

RARBRC

L1

L3L5

L1 = [a, b, f, h, I)L3 = [e, g, h)L5 = [d, g) [c, f) Lineagens

a

b c d e

f g

h

i

aGrafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Registradores

Seqüência

Sequenciamento Usando Escalonamento de Lista

Page 44: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

44

RARBRC

L1

L3L5

L1 = [a, b, f, h, I)L3 = [e, g, h)L5 = [d, g) [c, f) Lineagens

a

b c d e

f g

h

i

a dGrafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Registradores

Seqüência

Sequenciamento Usando Escalonamento de Lista

Page 45: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

45

RARBRC

L1

L3L5

L1 = [a, b, f, h, I)L3 = [e, g, h)L5 = [d, g) [c, f) Lineagens

a

b c d e

f g

h

i

a d eGrafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Registradores

Seqüência

Sequenciamento Usando Escalonamento de Lista

Page 46: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

46

RARBRC

L1

L3L5

L1 = [a, b, f, h, I)L3 = [e, g, h)L5 = [d, g) [c, f) Lineagens

a

b c d e

f g

h

i

a d e gGrafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Registradores

Seqüência

Sequenciamento Usando Escalonamento de Lista

Page 47: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

47

RARBRC

L1

L3L5

L1 = [a, b, f, h, I)L3 = [e, g, h)L5 = [d, g) [c, f) Lineagens

a

b c d e

f g

h

i

a d e g cGrafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Registradores

Seqüência

Sequenciamento Usando Escalonamento de Lista

Page 48: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

48

RARBRC

L1

L3L5

L1 = [a, b, f, h, I)L3 = [e, g, h)L5 = [d, g) [c, f) Lineagens

a

b c d e

f g

h

i

a d e g c bGrafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Registradores

Seqüência

Sequenciamento Usando Escalonamento de Lista

Page 49: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

49

RARBRC

L1

L3L5

L1 = [a, b, f, h, I)L3 = [e, g, h)L5 = [d, g) [c, f) Lineagens

a

b c d e

f g

h

i

a d e g c b fGrafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Registradores

Seqüência

Sequenciamento Usando Escalonamento de Lista

Page 50: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

50

RARBRC

L1

L3L5

L1 = [a, b, f, h, I)L3 = [e, g, h)L5 = [d, g) [c, f) Lineagens

a

b c d e

f g

h

i

a d e g c b f hGrafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Registradores

Seqüência

Sequenciamento Usando Escalonamento de Lista

Page 51: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

51

RARBRC

L1

L3L5

L1 = [a, b, f, h, I)L3 = [e, g, h)L5 = [d, g) [c, f) Lineagens

a

b c d e

f g

h

i

a d e g c b f h iGrafo de Dependência de Dados Aumentado

Grafo de Interferência de Lineagens

Registradores

Seqüência

Sequenciamento Usando Escalonamento de Lista

Page 52: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

52

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)

Grafo de Interfer. de Lineagens (LIG)

Derive HRB

Escalonamento por lista estendido guiado por HRB

DDG

Uma boa seqüência de instruções

Page 53: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

53

Experiência Implementando no Pro64

Projeto e Plano de ExecuçãoImplementaçãoDepuração e validaçãoAvaliação

Page 54: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

54

Implementation

Construção do Grafo de DependênciasFormação de LineagensConstrução e coloração do LIGImplementando o algoritmo de

reordenação

Page 55: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

55

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.

Page 56: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

56

Register AllocationGRA

Assign_Registers

Fix_LRA_Blues

Falha?

Re-escalona movimento local de códigospill registradores globaisspill registradores locais

Sucesso?

LRA:Nível de bloco

Page 57: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

57

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

Page 58: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

58

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

Page 59: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

59

Avaliação

Medidas Estáticas: Fat point -tt54: 0x40

Medidas Dinâmicas Hardware counter in R10k

perfex

Page 60: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Performance: Static Measurements

Compiler Version

Baseline MIPSPro HRB(no fusion) HRB

Benchmark Blocks W/ spill

Average Spills

Blocks W/ spill

Average Spills

Blocks W/ spill

Average Spills

Blocks W/ spill

Average Spills

Benchmarks with Low Register Pressure tomcatv 2 49.5 2 32.5 2 27 2 24

swim 9 3.7 7 4.7 6 7 1 6 su2cor 42 11.2 31 9.2 29 10.2 28 9.1

hydro2d 20 3.1 13 2.3 5 3.8 3 4.7 mgrid 5 7.2 3 8.3 4 6.8 3 2.7

Average 15.6 8.95 11.2 7.8 9.2 9.5 7.4 8.95 Benchmarks with High Register Pressure

applu 73 23.5 68 16.9 64 18.9 61 17.1 turb3d 39 13.8 34 10.4 24 11.8 23 11.3 apsi 118 10.6 87 8.1 68 8.4 54 9.4

fpppp 59 62.9 50 59.6 43 67.5 39 73.2 wave5 146 9.3 111 11.7 79 8.5 62 9.3

Average 87.0 8.95 70.0 18.5 55.6 20.3 47.8 21.9

14 integer registers and 8 FP registers

Page 61: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

61

Performance: Static Measurements

Compiler Version MIPSPro HRB(no fusion) HRB

Benchmarks Baseline

Spills Spills % reduc. Spills % reduc. Spills % reduc. Benchmarks with Low Register Pressure

tomcatv 99 65 34.3 54 45.5 48 51.5 swim 33 33 0.18 42 -27.2 6 81.8

su2cor 469 286 39 295 37.1 255 45.6 hydro2d 61 30 50.8 19 68.9 14 77 mgrid 36 25 30.6 27 25 8 77.8

Average 140 87.8 37.1 87.4 37.4 66.2 52.6 Benchmarks with High Register Pressure

applu 1717 1148 33.2 1214 29.3 1044 39.2 turb3d 534 355 34.1 284 47.3 260 51.8 apsi 1256 706 43.8 572 54.5 508 59.5

fpppp 3711 2980 19.7 2902 21.8 2853 23.1 wave5 1352 1301 3.78 669 50.5 575 57.5

Average 1715 1298 24.3 1128 34.2 1048 38.9

14 integer registers and 8 FP registers

Page 62: Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 20011 Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 2001

62

Performance: Dynamic Measurements

Compiler Version MIPSPro HRB(no fusion) HRB

Benchmarks Baseline

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 integer registers and 8 FP registers