[Zhang pact07] resume

208 views

Published on

Language and VM Support for fine-grained futures in Java

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
208
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

[Zhang pact07] resume

  1. 1. aug-2011 1 Language and Virtual Machine Support for Efficient fine-Grained Futures in Java Lingli Zhang Chandra Krintz Priya Nagpurkar Computer Science Department University of California, snta Barbara {lingli_z, ckrintz, priya} @ cs.ucsb.edu Resumo realizado por Marcio Machado Pereira – RA 780681 afetam diretamente a semântica do programa. Em particular, os autores introduziram a anotação future (denotada @future I. INTRODUÇÃO no código fonte) para variáveis locais. Os usuários usam estaN o artigo [1], os autores investigaram a implementação de futures no Java J2SE v5.0. Future é uma construção delinguagem de programação paralela que permite aos diretiva para anotar variáveis locais que podem ser usadas como resultados (placeholders) de valores retornados por funções que potencialmente podem ser executadasprogramadores especificar computações potencialmente concorrentemente pelo sistema. Se a chamada de uma funçãoassíncronas. Neste modelo, denominado Executor-Callable- armazena seu valor de retorno em uma variável local anotada,Future, os usuários encapsulam uma computação que pode ela é identificada como uma future-function call.ser potencialmente avaliada em paralelo usando o objetoCallable e submete este ao objeto Executor. Apesar desta O modelo DBLFuture evita a criação (e portanto, ametodologia desacoplar a lógica da aplicação do escalonador especificação por parte do usuário) de objetos Callable,de tarefas (thread scheduling), o mesmo impõe uma Future, LazyFuture e outros objetos quando o mesmo ésobrecarga para os usuários médios além de introduzir um executado sequencialmente (inlined) pelo sistema. Emoverhead significativo no desempenho. consequencia, evita-se a alocação de memória, o gerenciamento de memória e a inserção de código fonte extraPara endereçar estes problemas, os autores propuseram então requerido pelas abordagens anteriores.Lazy Java Futures, uma implementação do Java Futurebaseada na técnica originalmente proposta por Mohr e outros II. O ALGORITMO DBLFUTUREdenominada Lazy Task Creation (LTC) [2]. Lazy Future Como primeiro passo do algoritmo, a diretiva future é salvaprimeiramente executa as computações potencialmente como um atributo do método na representação intermediáriaconcorrentes sequencialmente (inline) e então subdivide as (bytecode). O carregador das classes java (class loader) dacomputações através da divisão da pilha de execução (runtime JVM modificada (DBLFuture-aware JVM) reconhece ostack) durante o escalonamento e troca das linhas de atributo e constrói uma tabela de variáveis locais future paraexecução (threads) se a estimativa do sistema sobre o tempo cada método, contendo o nome, o índice e a faixa de índicesde execução restante da computação Future amortizar o custo do bytecode de cada variável local future. O compiladorda divisão. dinâmico Just-in-time consulta esta tabela durante a compilação.Lazy Future segue a abordagem baseada em interface, similar(embora mais eficiente) à Java Futures. Como resultado, esta Inicialmente, a JVM trata toda future-function call comoherda uma semelhante produtividade imposta ao programador chamada de função normal e executa o códigoe as mesmas limitações de desempenho. Para endereçar estas sequencialmente, na pilha de execução da thread corrente.limitações, os autores proposurem neste artigo uma nova Para cada chamada desta, o sistema mantém também umaimplementação do Java Futures que eles chamaram de pequena pilha (future stack) com referências para asDirective-based Lazy Futures (DBLFutures). potenciais chamadas future e um contador que estima a duração da chamada future. O sistema usa esta informaçãoDBLFutures extende Lazy Futures para melhorar a facilidade para tomar decisões de divisão e geração de novas linhas dede uso do paralelismo baseado em Java Futures assim como o execução (splitting and spawning decisions).desempenho e escalabilidade. DBLFutures explora aextensão da linguagem java criada para anotações [3]. As Na figura a seguir, a thread corrente tem 3 chamadas futureanotações são directivas de código fonte que transmitem na sua pilha. Em algum momento, o controller decide que vale a pena gerar a chamada future, com a contagem deinformações de metadados do programa para as ferramentas, amostra 10, para execução paralela. A linha cheia identifica obibliotecas e as máquinas virtuais Java (JVMs). Estas não ponto de divisão da pilha. O divisor (future splitter) então  O trabalho em referência foi apresentado na conferência PACT07 realizado cria uma nova thread para a continuação da future callentre os dias 15 e 19 de setembro de 2007 na cidade de Brasov, Romenia. O gerada, copia os frames da pilha abaixo do future frame, queresumo é parte do trabalho de pesquisa de doutorado do Instituto de Computaçãoda UNICAMP (IC-Unicamp) e foi elaborado por Pereira, M. M. (e-mail: corresponde à thread corrente (chamada de continuationmpereira@ic.unicamp.br ). thread), restaura o contexto de execução a partir dos frames
  2. 2. aug-2011 2da pilha corrente, e reinicia a thread corrente no endereço de está no modelo adotado. No modelo Lazy Future, a JVM temretorno da future call gerada. a flexibilidade para decidir se sequencializa (inline) ou gera a thread future (spawn), mas sempre cria os objetos Callable e Future devido ao modelo baseado em interface. DBLFuture, por sua vez, emprega um modelo baseado em chamada de função (function-call) no qual evita-se a criação de objetos Callable completamente e permite que a JVM crie objetos Future somente quando tomar a decisão de dividir a thread, decisão esta baseada na disponibilidade dos recursos e no comportamento dinâmico do sistema. IV. CONCLUSÃO Futures provê uma simples e elegante maneira para os programadores introduzirem concorrência nos seus programas. No modelo corrente de Java, os programadores adicionam futures nas suas aplicações usando o modelo Executor-Callable-Future. Este modelo de programação impõe uma sobrecarga para os usuários médios, além de introduzir um overhead significativo no desempenho. Para endereçar estas limitações, os autores introduziram umO local do valor de retorno após completar a future call modelo baseado em anotações (DBLFuture) e apresentaramrequer um tratamento especial. Se a future call não é as extensões necessárias ao compilador Java e à JVM.dividida, o valor de retorno deve ser armazenado na variávellocal especificada. Se a future call é dividida e deu origem a Com DBLFuture, os programadores facilmente introduzemuma nova thread, o retorno deve ser armazenado em um paralelismo nas suas aplicações anotando variaveis locais queespaço reservado (i.e., um objeto future) para o acesso pela recebem resultados de chamadas de funções que podem sercontinuation thread. executadas com segurança em paralelo. Veja o exemplo da função de Fibonacci abaixo:Para saber se a future foi paralelizada, adiciona-se umapalavra chamada split flag para cada frame da pilha de public class Fib {execução. Este flag é um bitmap das future calls geradas public int fib (int n) {(spawned), indexada pelo índice da variável local marcada if (n < 3) return n; @future int x = fib (n – 1);como future no vetor de variáveis locais do bytecode. A JVM int y = fib (n – 2);verifica este bit em dois pontos do código: no armazenamento return x + y;e no primeiro uso do valor de retorno. O modelo suporta até }32 anotações futures (64 em máquinas de 64 bits) por método, ... }podendo ser facilmente extendido.Similarmente, as instruções que usam o valor de retorno Note que na implementação proposta, a JVM toma decisõesprecisam ser expandidas. Se o split flag estiver setado, o eficientes e automáticas de paralelização de tarefas, nocódigo deverá usar o valor de retorno diretamente da pilha no entanto, os usuários ainda são os responsáveis por garantir aespaço (slot) da variável local. Do contrário, o código deverá segurança (safety) da execução concorrente.executar o método get() do objeto future extraído do mesmoslot, o qual irá bloquear a thread corrente se o valor de V. REFERENCIASretorno não estiver pronto. [1] L. Zhang, C. Krintz, and S. Soman. Efficient Support of Fine-grained Futures in Java. In International Conference on Parallel and Distributed ComputingPara estimar o tempo de execução de uma future usa-se o Systems (PDCS), 2006.serviço de monitoração de desempenho comum na maioriadas implementações JVM. Quando o sistema de amostragem [2] E. Mohr, D. A. Kranz, and J. R. H. Halstead. Lazy task creation: A technique(sampling) identifica uma future como de longa duração e há for increasing the granularity of parallel programs. IEEE Trans. Parallel Distrib.recursos suficientes no processador, o sistema divide a pilha Syst., 2(3):264-280, 1991.da thread em duas, cria o objeto future e executa a future- [3] JSR-175: A Metadata facility for the JavaTM Programming Language.function e a thread corrente em paralelo. http://jcp.org/en/jsr/detail?id=175. III. IMPEMENTAÇÃO E AVALIAÇÃOPara avaliar o DBLFuture, os autores implementaram oalgoritimo no Jikes Research Virtual Machine (JikesRVM).Na média das experimentações, DBLfuture mostrou-se de 2.4a 2.8 vezes mais eficiente do que o modelo baseado em LazyFutures. A razão principal para a melhora do desempenho

×