Resenha do Artigo Making a fast curry Push/enter vs eval/apply for higher- order languages Monique L. B. Monteiro (Simon Marlow, Simon.

Slides:



Advertisements
Apresentações semelhantes
Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.
Advertisements

ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
gerador de código intermediário
Sistemas operacionais
Arquitetura e organização de computadores
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 32 Departamento de Informática Centro.
Linguagem de Montagem Visão geral.
Seminários de Compiladores
Alocação Dinâmida de Memória
Algoritmos e Estrutura de Dados I
Estruturas de Dados e Algoritmos
PROGRAMAÇÃO MODULAR (com uso de subprogramas)
Linguagens de programação
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Construção de Compiladores
Linguagens de Programação
Prof. Msc. Raul Paradeda Aula 2 Introdução
Escola Secundária c/ 3º CEB da Batalha
Sistemas Operacionais I
Professor Fernando Luís
Sistemas Operacionais I
Alocação Dinâmica de Memória Professor Mário Dantas
História do Computador Desde os idos tempos da humanidade os seres humanos procuram relacionar quantidades. Supõe-se que as primeiras tentativas de contagens.
Linguagem de Programação C#
Aula prática - análise contextual
Adriano da Silva Castro
Linguagem de Montagem.
Linguagem de Programação II Parte IX
Estruturas de Dados com Jogos
Denise Guliato Faculdade de Computação – UFU
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Implementação de Linguagens Funcionais
Resenha do Artigo Implementing lazy functional languages on stock hardware: the Spineless Tagless G-Machine (Parte I) (Simon L. Peyton Jones} Monique L.
Organização do Ambiente de Execução (Runtime System)
Estudo dos Conceitos e Paradigmas de Programação
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Organização do Ambiente de Execução (Runtime system) Representação de dados Avaliação de expressões Alocação de memória Rotinas Objetos e métodos.
Paradigma Funcional Apresentação de LF1.
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
Compilação de Linguagens OO Marco Simões (macs3) André Santos (alms)
Ambiente de Execução - Rotinas
Algoritmos e Estruturas de Dados I – Ponteiros
Sistemas Operacionais
Paradigma funcional.
Software Básico Nível ISA Capítulo 5 Mitsuo Takaki
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Sistemas Operacionais
Capítulo VIII Ambientes de Execução
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Princípios da Programação em Prolog
Back-End Compilação aula-11-back-end.pdf.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
8088 Assembly Software Básico Mitsuo Takaki.
PCS - Departamento de Engenharia de Computação e Sistemas Digitais Projeto de Formatura – Turmas 2010 Integrantes: Professor Orientador: Co-orientador:
Procedimentos Registro de Ativação e Variáveis Locais 11 1.
Recursividade Profs. De Prog2 e Lab2.
Geração de Código Fase final do compilador
GARBAGE COLLECTOR 1 UNIVERSIDADE FEDERAL DO PARÁ - UFPA.
Programação Computacional Aula 9: Meu primeiro programa em C
Redes e Sistemas Distribuídos II – Cód Prof. MSc. Ronnison Reges Vidal.
Ponteiros em C Prof. Kariston Pereira
Estruturas de Dados Murilo Salgado Razoli.
Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco.
Análise Semântica e Representação Intermédia
Arquitetura de Sistemas Operacionais
COMPILADORES 07 Prof. Marcos.
Gerência de Memória. Memória Considerações: Recurso caro e escasso; Programas só executam se estiverem na memória principal; Quanto mais processos residentes.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Transcrição da apresentação:

Resenha do Artigo Making a fast curry Push/enter vs eval/apply for higher- order languages Monique L. B. Monteiro (Simon Marlow, Simon L. Peyton Jones}

Resenha de Artigo - Projeto CIn/UFPE – Essência do Artigo Fornecer uma base substancial para a escolha entre os modelos push-enter e eval-apply a partir de experiências qualitativas e quantitativas em um compilador para Haskell (GHC)Fornecer uma base substancial para a escolha entre os modelos push-enter e eval-apply a partir de experiências qualitativas e quantitativas em um compilador para Haskell (GHC)

Resenha de Artigo - Projeto CIn/UFPE – Relevância para o HS.NET Mostrar detalhes sobre os dois modelos de avaliação mais utilizadosMostrar detalhes sobre os dois modelos de avaliação mais utilizados Abrir discussão sobre o esquema de tradução a ser implementadoAbrir discussão sobre o esquema de tradução a ser implementado

Resenha de Artigo - Projeto CIn/UFPE – Push/enter vs eval/apply Diferem quanto à responsabilidade pela checagem de argumentosDiferem quanto à responsabilidade pela checagem de argumentos Push/enter:Push/enter: –Responsabilidade da função Conhece sua própria aridadeConhece sua própria aridade Examina a pilhaExamina a pilha Eval/apply:Eval/apply: –Responsabilidade do código invocador Conhece os argumentosConhece os argumentos Examina a closure para obter a aridade e gerar chamada exataExamina a closure para obter a aridade e gerar chamada exata

Resenha de Artigo - Projeto CIn/UFPE – Linguagem Possui:Possui: –Literais (inteiros, números de ponto flutuante) –Chamadas de função: f k a 1,...,a n f n : compilador conhece estaticamente a aridade n de ff n : compilador conhece estaticamente a aridade n de f f : compilador NÃO conhece estaticamente a aridade n de ff : compilador NÃO conhece estaticamente a aridade n de f –Expressões let –Expressões case Valores unboxed podem ser passados como argumentos, retornados como resultado, armazenados em estruturas de dados, etc.Valores unboxed podem ser passados como argumentos, retornados como resultado, armazenados em estruturas de dados, etc.

Resenha de Artigo - Projeto CIn/UFPE – Objetos da Heap FUN(x 1,...,x n  e)FUN(x 1,...,x n  e) –Closure de função de aridade n –Aplicável a qualquer número de argumentos PAP(f a 1,...,a n )PAP(f a 1,...,a n ) –Aplicação parcial de f a a 1,..., a n –f é do tipo FUN CON(C a 1,...,a n )CON(C a 1,...,a n ) –Aplicação saturada do construtor C a a 1,...,a n THUNK eTHUNK e – e é avaliado sob demanda –Closure é atualizada com indireção para o valor de e BLACKHOLEBLACKHOLE –Usado durante avaliação de um THUNK

Resenha de Artigo - Projeto CIn/UFPE – Semântica Operacional Componentes de cada estado:Componentes de cada estado: –Código e : expressão sob avaliação –Pilha s : pilha de continuações –Heap H Cada continuação pode ser:Cada continuação pode ser: –case of ( alt 1 ;...; alt n ) –Upd t –Upd t –( a 1,..., a n ) [eval/apply] –Arg a [p ush/enter] e1; s1; H1  e2; s2; H2e1; s1; H1  e2; s2; H2e1; s1; H1  e2; s2; H2e1; s1; H1  e2; s2; H2

Resenha de Artigo - Projeto CIn/UFPE – Regras comuns

Resenha de Artigo - Projeto CIn/UFPE – Regras comuns (cont.)

Resenha de Artigo - Projeto CIn/UFPE – Regras para push/enter

Resenha de Artigo - Projeto CIn/UFPE – Modelo push/enter Aplicação de funções (PUSH)Aplicação de funções (PUSH) –Empilha argumentos como argumentos pendentes –“Entra” na função: FENTER:FENTER:  Parâmetros formais são mapeados nos parâmetros reais  Os argumentos que sobram são deixados na pilha PAP1:PAP1:  Thunk empilhou frame de atualização  Expressão case avaliou uma função PAP1:PAP1:  Argumentos são copiados para a pilha

Resenha de Artigo - Projeto CIn/UFPE – Regras para eval/apply

Resenha de Artigo - Projeto CIn/UFPE – Modelo eval/apply Se o número de argumentos for exato, comporta-se como KNOWNCALL, mesmo que a função não seja estaticamente conhecidaSe o número de argumentos for exato, comporta-se como KNOWNCALL, mesmo que a função não seja estaticamente conhecida Se hover muitos argumentos, empilha uma continuação que contém os argumentos excedentes. Esta é a essência do eval/apply.Se hover muitos argumentos, empilha uma continuação que contém os argumentos excedentes. Esta é a essência do eval/apply. –“Dada uma aplicação f x y, se f recebe um argumento, então chame f x e aplique a função resultante a y”

Resenha de Artigo - Projeto CIn/UFPE – Pilha de atualização Continuações são representadas por stack framesContinuações são representadas por stack frames Stack frames comuns:Stack frames comuns: –Continuação de atualização - Upd t : Endereço de retorno: código genérico de atualizaçãoEndereço de retorno: código genérico de atualização Ponteiro para o thunk a ser atualizadoPonteiro para o thunk a ser atualizado –Continuação de expressão case - case of ( alt 1 ;...; alt n ): Endereço de retorno: código das alternativasEndereço de retorno: código das alternativas Variáveis livres das alternativasVariáveis livres das alternativas Um frame é uma closure alocada na pilhaUm frame é uma closure alocada na pilha Endereço de retorno possui uma info tableEndereço de retorno possui uma info table

Resenha de Artigo - Projeto CIn/UFPE – Push/enter: Implementação Pilha armazena argumentos pendentes, que não possuem endereço de retornoPilha armazena argumentos pendentes, que não possuem endereço de retorno –Torna a geração de código C-- mais difícil e ineficiente Como o GHC sabe quantos argumentos há na pilha?Como o GHC sabe quantos argumentos há na pilha? –Registrador Su, que aponta para o update frame ou case frame mais próximo ao topo da pilha Fast entry-point:Fast entry-point: –Funções conhecidas estaticamente –Argumentos em registradores e/ou na pilha Slow entry-point:Slow entry-point: –Todos os argumentos na pilha –Faz checagem de argumentos: Stack pointer - Su

Resenha de Artigo - Projeto CIn/UFPE – Percorrendo a pilha Argumentos pendentes permanecem na pilha até serem utilizadosArgumentos pendentes permanecem na pilha até serem utilizados –Isso pode durar muito tempo! O garbage collector deve ser capaz de identificar os ponteiros na pilhaO garbage collector deve ser capaz de identificar os ponteiros na pilha –Facilmente identificáveis para stack frames regulares (update e case) –Dificilmente identificáveis para frames do tipo Arg Não possuem descrição de número ou layoutNão possuem descrição de número ou layout –Implementações eficientes são propostas

Resenha de Artigo - Projeto CIn/UFPE – Eval/apply: Implementação O modelo eval/apply utiliza continuações de chamada da forma ( a 1,..., a n )O modelo eval/apply utiliza continuações de chamada da forma ( a 1,..., a n ) –Endereço de retorno: Seguido quando a função avalia para um valor (FUN ou PAP) e retornaSeguido quando a função avalia para um valor (FUN ou PAP) e retorna –Argumentos Códigos pré-gerados para 1,2,3,...,N argumentosCódigos pré-gerados para 1,2,3,...,N argumentos –Sucessão de continuações para mais de N argumentos

Resenha de Artigo - Projeto CIn/UFPE – Eval/apply: Implementação

Resenha de Artigo - Projeto CIn/UFPE – Argumentos excedentes Se f recebe 1 argumento, call f 3 x compila para:Se f recebe 1 argumento, call f 3 x compila para: f1 = stgApplyN(f, 3); jump stgApplyP(f1, x);

Resenha de Artigo - Projeto CIn/UFPE – Vantagens eval/apply Mais fácil de mapear em linguagens assembly portáveisMais fácil de mapear em linguagens assembly portáveis Não necessidade de:Não necessidade de: –distinguir entre ponteiros e não ponteiros –tags para não ponteiros –ponteiro Su Passagem de argumentos em registradores para funções desconhecidasPassagem de argumentos em registradores para funções desconhecidas –Push/enter requer argumentos sempre na pilha Funções de sistema invocáveis a partir de Haskell são mais convenientes de escreverFunções de sistema invocáveis a partir de Haskell são mais convenientes de escrever

Resenha de Artigo - Projeto CIn/UFPE – Vantagens push/enter Adequa-se naturalmente a currificaçãoAdequa-se naturalmente a currificação Elimina algumas alocações de PAPElimina algumas alocações de PAP O payload de um objeto PAP pode ser auto- descritoO payload de um objeto PAP pode ser auto- descrito –Argumentos possuem tags –No modelo eval/apply a descrição é delegada ao objeto FUN Complicações no garbage collectorComplicações no garbage collector Um objeto PAP pode conter apenas objetos FUN, nunca objetos PAPUm objeto PAP pode conter apenas objetos FUN, nunca objetos PAP

Resenha de Artigo - Projeto CIn/UFPE – Algumas diferenças Push/enter Requer slow entry-point para toda função Requer slow entry-point para toda função  Checagem de argumentos Presença do Su Presença do Su  Facilita caminhada pela cadeia de frames de atualização Eval/apply Requer slow entry-point em algumas situações Requer slow entry-point em algumas situações  Argumentos em um bloco contíguo de memória Ausência do Su Ausência do Su  Podem ser examinados outros frames além dos de atualização  Porém Su pode ser adicionado

Resenha de Artigo - Projeto CIn/UFPE – Números Anatomia das chamadasAnatomia das chamadas

Resenha de Artigo - Projeto CIn/UFPE – Números (cont.) Tempo de execuçãoTempo de execução –Pequena diferença entre os dois modelos –Eval/apply vence por 2-3% Escritas em memóriaEscritas em memória –Eval/apply realiza menos escritas Valor do Su não é salvo nos frames de atualizaçãoValor do Su não é salvo nos frames de atualização Alocação no heapAlocação no heap –Performance quase não é afetada Eval/apply aloca PAP para funções retornadasEval/apply aloca PAP para funções retornadas PAPs no eval/apply são menores (ausência de tags para não-ponteiros)PAPs no eval/apply são menores (ausência de tags para não-ponteiros)

Resenha de Artigo - Projeto CIn/UFPE – Conclusões Modelo eval/apply:Modelo eval/apply: –Facilita o gerenciamento da complexidade dos ambientes de compilação e execução –Permite uma implementação compilada de alta performance para linguagens estritas de alta ordem Modelo push/enter:Modelo push/enter: –Complexidade adicionada para resolver problemas de performance –Solução mais elegante para interpretadores

Resenha do Artigo Making a fast curry Push/enter vs eval/apply for higher- order languages Monique L. B. Monteiro (Simon Marlow, Simon L. Peyton Jones}