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

Slides:



Advertisements
Apresentações semelhantes
Especificação de Concorrência Professora: Lúcia Drummond.
Advertisements

Organização de Computadores I
Do DRIP ao DRIP RTR Ivan Saraiva Silva. DRIP - Dynamically Reconfigurable Image Processor Baseado no processador de vizinhança NP9 Processador matricial.
gerador de código intermediário
Construção de Aplicativos Computacionais METEOROLOGIA
Por Marcio Belo Mestrado em Computação PGCC/IC/UFF
Aula 10 Algoritmos de Busca
Projeto conceitual Mostra ao cliente exatamente o que o sistema fará
Engenharia de Computação.
Teste de Software Parte 3.
Interfaces Conversacionais
Compiladores Prof. Yandre Maldonado Compiladores - Prof. Yandre - 1.
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Algoritmos e Programação Estruturada Conceitos básicos
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Ricardo Jacobi Linguagem C Introdução Linguagens de Programação Fatores de Qualidade em Software Estilos de Programação Manutenção em Software Histórico.
Variáveis Dinâmicas Caixas de Nós
David Menotti Estruturas de Dados I DECOM – UFOP
Automato de Pilha.
Lógica de Programação Módulo II
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Análise Léxica Supondo o trecho de programa abaixo:
Laboratório de Programação de Computadores II 2S/2009.
Laboratório de Programação de Computadores II Aula 1 2S/2009.
Apresentação da linguagem Python
Escola Secundária c/ 3º CEB da Batalha
Algoritmos e Programação
GAUSS COM PIVOTEAMENTO
Construção de Compiladores para MSIL usando Microsoft Phoenix
Paradigmas de programação
PROGRAMAÇÃO I UNIDADE 1.
MÉTODO JACOBI.
Aluno: Lucas Bucci da Silveira Orientador: Carlos Roberto Lopes
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 05 Aquiles Burlamaqui UERN
Alocação Dinâmica de Memória
Introdução ao uso de vatores na linguagem PASCAL.
Paradigmas de Linguagens de Programação Linguagem Imperativa 1
Geração de Código Intermediário
Aula 3 Vetores e Listas. Arrays (vetores) Array – sequência de elementos do mesmo tipo. Tamanho do Array – seu número de elementos (número fixo) Consequência:
Ambiente de Execução - Rotinas
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Gerador de Código do Pro64 José Nelson Amaral University of Alberta Edmonton, AB,
Lógica Estruturada Aplicada
Workshop em Sistemas Computacionais de Alto Desempenho, Setembro José Nelson Amaral Compiler Design and Optimization Laboratory Department of Computing.
Geração de Código aula-12-geração-de-código.pdf.
ARQUIVOS.
Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.
Sistemas Operacionais: Sistema de Arquivos
Back-End Compilação aula-11-back-end.pdf.
A Linguagem de Máquina – Desvios e Laços
Blocos básicos e Traces Departamento de Estatística e Informática Universidade Federal de Sergipe Compiladores Giovanny Lucero
PCS - Departamento de Engenharia de Computação e Sistemas Digitais Projeto de Formatura – Turmas 2010 Integrantes: Professor Orientador: Co-orientador:
DCC 001 Programação de Computadores 2º Semestre de 2011
Recursividade Profs. De Prog2 e Lab2.
Geração de Código Fase final do compilador
Arquivos. Motivação Imagine dar entrada (digitar), a cada execução do programa, em todos os dados de um sistema. por exemplo, todos os registro de livros.
TRACE CACHE Mário Luiz Rodrigues Oliveira IC/UNICAMP JUNHO/2006.
Algoritmos e Programação MC102
Engenharia de Sistemas Embarcados Aula 5: Um Conjunto Básico de Ferramentas.
Linguagem de Programação II Parte VI Professora: Flávia Balbino da Costa.
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
Construção de Algoritmos AULA 05
O que devem fazer os Microprocessadores ?
INE5408 Estruturas de Dados
Sistemas de Arquivos Sistemas Operacionais Profa. Priscila Facciolli
Geração de Código Difícil de generalizar, devido à variedade de características das máquinas-destino: –Conjunto de registradores (se houver) –Pilha –Instruções.
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
Linguagem de Programação
ProgramaçãoConcorrente Glêdson Elias
SUB-ROTINAS EM PASCAL PROGRAMAÇÃO MODULARIZADA 252.
Transcrição da apresentação:

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Usando o Pro64 para Pesquisa e Desenvolvimento em Compiladores Estudos de Caso José Nelson Amaral University of Alberta Edmonton, AB, Canada Parte III

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Conteúdo zComentários Gerais zEstudo de Caso I: Integração de um novo algoritmo de reordenamento de instruções para minimizar uso de registradores [Govind,Yang,Amaral,Gao2000] zEstudo 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 Adaptação do Pro64 para um Novo Processador zCrie uma nova targ_info zAjuste o arquivo de configuração para a Application Binary Interface (ABI) zCrie um novo WHIRL-to-CG-lower para seleção de instruções zAjuste funções de utilidade do CG (p.e., predicação, padrões EBO, custos de SWP, etc.) Advançado Para -O0

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Caso I zIntrodução do problema MRIS problem e solução proposta yFormulação do problem yO algoritm proposto zExperiência com o Pro64 yOnde começar? yComo começar? yResultados zResumo

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Pesquisadores zR. Govindarajan (Indian Inst. Of Science) zHongbo Yang (Univ. of Delaware) zChihong Zhang (Conexant) zJose Nelson Amaral (Univ. of Alberta) zGuang R. Gao (Univ. of Delaware)

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Motivação zProcessadores com o estilo da IA-64 yRedução de spills na fase de alocação local de registradores yRedução de pedidos do Alocador Local de Registradores (LRA) yRedução da pressão por registradores em cada função zProcessadores com Execução fora de ordem yBuffer reordenador de instruções yRenaming de registradores

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 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 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 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 <= 20 end … Código Fonte

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 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 … (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 B2 B3 B4 B5 Grafo de Fluxo de Controle

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 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 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); B3 a

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 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); B3 a bcde

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Grafo de Dependência de Dados B3 a bcde 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);

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Grafo de Dependência de Dados B3 a bcdefg (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);

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Grafo de Dependência de Dados B3 a bcdefg 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);

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Grafo de Dependência de Dados B3 a bcdefg 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);

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 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 Seqüência de Instruções a bcdefg 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

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 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 (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 t2 t3 t4 t5 t6 t7 t8 t1 t4 t5 t7 t3 t2 t6 t8 Uso de Registradores = 4Uso de Registradores = 3

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro 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 Intuição para Nossa Solução a bcdefg h i Quais instruções podem/não podem compartilhar registradores neste grafo? Podemos usar o mesmo registrador para 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

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Intuição para Nossa Solução a bcdefg 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 em que f e g possam compartilhar o mesmo registrador porque h usa os valores de f e g ao mesmo tempo. Grafo de Dependência de Dados

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Intuição para Nossa Solução a bcdefg h i E as instruções c e d podem compartilhar 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

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Intuição para Nossa Solução a bcdefg 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 Intuição para Nossa Solução a bc de fg h i 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). Como podemos assegurar que as instruções a, b, f, e h poderão compartilhar o mesmo registrador? L1 = [a, b, f, h, i) a b f h Grafo de Dependência de Dados

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Arcos de Seqüenciamento a bcde fg h i 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. Grafo de Dependência de Dados Aumentado

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Altura de uma Instrução a bcde fg h i L1 = [a, b, f, h, i) 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. Grafo de Dependência de Dados Aumentado

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Formação de Lineagens a bcde fg h i 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) c L3 = [e, g, h) e g L4 = [d, g) d Grafo de Dependência de Dados Aumentado

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Interferência Entre Lineagens L1 = [a, b, f, h, i) L2 = [c, f) L3 = [e, g, h) L4 = [d, g) Duas lineagens Lu = [u 1, u 2, …, u m ) e Lv = [v 1, v 2, …, v m ) definitivamente interferem se: (i) u 1 alcança v n, e (ii) v 1 alcança u m. a bcde fg h i Grafo de Dependência de Dados Aumentado

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Grafo de Interferência de Lineagens L1 = [a, b, f, h, i) L2 = [c, f) L3 = [e, g, h) L4 = [d, g) a bcde fg h i L1 L3L2 L4 Quais lineagens definitivamente interferem entre si? Grafo de Dependência de Dados Aumentado

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Grafo de Interferência de Lineagens L1 = [a, b, f, h, i) L2 = [c, f) L3 = [e, g, h) L4 = [d, g) a bcde fg h i L1 L3L2 L4 Grafo de Interferência de Lineagens Quais lineagens definitivamente interferem entre si? Grafo de Dependência de Dados Aumentado

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro L1 = [a, b, f, h, i) L2 = [c, f) L3 = [e, g, h) L4 = [d, g) a bcde fg h i L1 L3L2 L4 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. Seria possível que múltiplas lineagens compartilhassem of mesmo registrador? Como podemos encontrar o número mínimo de registradores se nós considerarmos todas as 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

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro L1 = [a, b, f, h, i) L2 = [c, f) L3 = [e, g, h) L4 = [d, g) a bcde fg h i L1 L3L2 L4 Lineagens Nós podemos colorir of grafo de interferência de lineagens para encontrar um Limite Heurístico de Registradores (HRB) para o DDG. Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Grafo de Interferência de Lineagens

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro a bcde fg h i L1 L3L2 L4 Lineagens Nós conseguimos colorir o grafo com três cores, portanto devemos encontrar uma seqüência de instruçõ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 de lineagens para encontrar um Limite Heurístico de Registradores (HRB) para o DDG.

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Condição para Fusão de Lineagens a bcde fg h i Grafo de Interferência de Lineagens L1 L3L2 L4 Duas lineagens Lu = [u 1, u 2, …, u m ) e Lv = [v 1, v 2, …, v n ) podem ser fundidas em uma única lineagem se: (i) u 1 alcança v n, e (ii) v 1 não alcança u m. L1 = [a, b, f, h, i) L2 = [c, f) L3 = [e, g, h) L4 = [d, g) Lineagens Grafo de Dependência de Dados Aumentado

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro L1 = [a, b, f, h, I) L2 = [c, f) L3 = [e, g, h) L4 = [d, g) a bcde fg 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 formar L5 = [d, g)  [c, f) Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Condição para Fusão de Lineagens

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Fusão de Lineagens L1 = {a, b, f, h, i} L2 = {c, f} L3 = {e, g, h} L4 = {d, g} a bcde fg h i L1 L3L2 L4 Lineagens Quando Lu = [u 1, u 2, …, u m ) e Lv = [v 1, v 2, …, v n ) são fundidas: (1) um arco de seqüenciamento de u m a v 1 é 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

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro L1 = [a, b, f, h, I) L3 = [e, g, h) L5 = [d, g)  [c, f) a bcde fg h i L1 L3L5 Lineagens Quantas cores nós precisamos para colorir o LIG? Portanto a fusão de L4 com L2 resulta em L5 = [d, g)  [c, f) Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Fusão de Lineagens

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro L1 = [a, b, f, h, I) L3 = [e, g, h) L5 = [d, g)  [c, f) a bcde fg h i L1 L3L5 Lineagens 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

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Sequenciamento Usando Escalonamento de Lista RA RB RC L1 L3L5 L1 = [a, b, f, h, I) L3 = [e, g, h) L5 = [d, g)  [c, f) Lineagens a bcde fg h i Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Registradores Seqüência

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro RA RB RC L1 L3L5 L1 = [a, b, f, h, I) L3 = [e, g, h) L5 = [d, g)  [c, f) Lineagens a bcde fg h i a Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Registradores Seqüência Sequenciamento Usando Escalonamento de Lista

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro RA RB RC L1 L3L5 L1 = [a, b, f, h, I) L3 = [e, g, h) L5 = [d, g)  [c, f) Lineagens a bcde fg h i ad Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Registradores Seqüência Sequenciamento Usando Escalonamento de Lista

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro RA RB RC L1 L3L5 L1 = [a, b, f, h, I) L3 = [e, g, h) L5 = [d, g)  [c, f) Lineagens a bcde fg h i ade Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Registradores Seqüência Sequenciamento Usando Escalonamento de Lista

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro RA RB RC L1 L3L5 L1 = [a, b, f, h, I) L3 = [e, g, h) L5 = [d, g)  [c, f) Lineagens a bcde fg h i adeg Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Registradores Seqüência Sequenciamento Usando Escalonamento de Lista

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro RA RB RC L1 L3L5 L1 = [a, b, f, h, I) L3 = [e, g, h) L5 = [d, g)  [c, f) Lineagens a bcde fg h i adegc Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Registradores Seqüência Sequenciamento Usando Escalonamento de Lista

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro RA RB RC L1 L3L5 L1 = [a, b, f, h, I) L3 = [e, g, h) L5 = [d, g)  [c, f) Lineagens a bcde fg h i adegcb Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Registradores Seqüência Sequenciamento Usando Escalonamento de Lista

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro RA RB RC L1 L3L5 L1 = [a, b, f, h, I) L3 = [e, g, h) L5 = [d, g)  [c, f) Lineagens a bcde fg h i adegcbf Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Registradores Seqüência Sequenciamento Usando Escalonamento de Lista

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro RA RB RC L1 L3L5 L1 = [a, b, f, h, I) L3 = [e, g, h) L5 = [d, g)  [c, f) Lineagens a bcde fg h i adegcbfh Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Registradores Seqüência Sequenciamento Usando Escalonamento de Lista

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro RA RB RC L1 L3L5 L1 = [a, b, f, h, I) L3 = [e, g, h) L5 = [d, g)  [c, f) Lineagens a bcde fg h i adegcbfhi Grafo de Dependência de Dados Aumentado Grafo de Interferência de Lineagens Registradores Seqüência Sequenciamento Usando Escalonamento de Lista

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Sumário do Método de Lineagens zUm “bom” algoritmo para construir o LIG zUm método heurístico efetivo para calcular o HRB zUm 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

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Experiência Implementando no Pro64 zProjeto e Plano de Execução zImplementação zDepuração e validação zAvaliação

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Implementation zConstrução do Grafo de Dependências zFormação de Lineagens zConstrução e coloração do LIG zImplementando o algoritmo de reordenação

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Porting Plan and Design zEntendendo a infra-estrutura do compilador zEntendendo o modelo de registradores (descrito nos arquivos targ_info) p.e.: yclasses de registradores: (int, float, predicate, app, control) yconvenções para salvar/restaurar registradores: caller/callee save, valor de retorno, passagem de argumentos, ponteiro de pilha, etc. yetc.

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Register Allocation GRA Assign_Registers Fix_LRA_Blues Falha? Re-escalona movimento local de código spill registradores globais spill registradores locais Sucesso? LRA: Nível de bloco

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Implementação yConstrução do DDG: usa rotinas de serviço nativas: e.g. CG_DEP_Compute_Graph yColorindo o LIG: usa um pacote nativo para manipulação de conjuntos (e.g. bitset.c) yImplementação de Escalonamento: usa suporte nativo para manipulação de vetores (e.g. cg_vector.cxx) yAcesso aod grafo de dependências usa funções nativas: ARC_succs, ARC_preds, ARC_kind

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Depuração e Validação zTrace file ytt54:0x1. General trace of LRA ytt45: 0x4. Dependence graph building ytr53. TOP before LRA ytr54. TOP after LRA

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Avaliação zMedidas Estáticas: yFat point -tt54: 0x40 zMedidas Dinâmicas yHardware counter in R10k perfex

Performance: Static Measurements 14 integer registers and 8 FP registers

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Performance: Static Measurements 14 integer registers and 8 FP registers

Workshop em Sistemas Computacionais de Alto Desempenho, Setembro Performance: Dynamic Measurements 14 integer registers and 8 FP registers