Dynamic dispatch of context-sensitive optimizations
Autor(a) principal: | |
---|---|
Data de Publicação: | 2017 |
Tipo de documento: | Dissertação |
Idioma: | por |
Título da fonte: | Repositório Institucional da UFMG |
Texto Completo: | http://hdl.handle.net/1843/JCES-AVKLSP |
Resumo: | The compilers community has dedicated much time and effort in making context-sensitive analyses scalable, with great profit. However, the implementation of context-sensitive optimizations remains a challenge. The main problem is code size growth. Both function cloning and inlining are based on creating copies of all functions in the call path that leads to each optimization, even when that involves copying functions that are not optimized. We propose a solution for that problem. Using a combination of dynamic dispatch and a state machine to dynamically control the transitions between calling contexts, our method implements fully context-sensitive optimizations only needing to copy optimized functions. Experiments in the LLVM Test Suite and SPEC CPU2006 show our method scales better than cloning, using 8.5x less bytes to implement the same optimizations. We have also observed speed-ups of up to 20% on top of LLVM -O3 using fully context-sensitive constant propagation. |
id |
UFMG_c83010840ec96adac248cb6c8453217a |
---|---|
oai_identifier_str |
oai:repositorio.ufmg.br:1843/JCES-AVKLSP |
network_acronym_str |
UFMG |
network_name_str |
Repositório Institucional da UFMG |
repository_id_str |
|
spelling |
Dynamic dispatch of context-sensitive optimizationsCompiladores OtimizantesLinguagens de ProgramaçãoPropagação de ConstantesOtimizações Sensíveis ao ContextoLinguagem de programação (Computadores)Otimização combinatóriaCompiladores (Computadores)ComputaçãoThe compilers community has dedicated much time and effort in making context-sensitive analyses scalable, with great profit. However, the implementation of context-sensitive optimizations remains a challenge. The main problem is code size growth. Both function cloning and inlining are based on creating copies of all functions in the call path that leads to each optimization, even when that involves copying functions that are not optimized. We propose a solution for that problem. Using a combination of dynamic dispatch and a state machine to dynamically control the transitions between calling contexts, our method implements fully context-sensitive optimizations only needing to copy optimized functions. Experiments in the LLVM Test Suite and SPEC CPU2006 show our method scales better than cloning, using 8.5x less bytes to implement the same optimizations. We have also observed speed-ups of up to 20% on top of LLVM -O3 using fully context-sensitive constant propagation.Construir análises sensíveis ao contexto escaláveis é um problema que vem sendo frequentemente trabalhadopela comunidade de compiladores, com sucesso. Porém, a implementação de otimizações sensíveis ao contextocontinua sendo desafiadora. O principal problema que desencoraja os compiladores de implementarem taisotimizações é o crescimento no tamanho do código. Com clonagem de funções ou inlining, duas técnicas conhecidaspara a implementação de especializações sensíveis ao contexto, o tamanho do código pode crescer exponencialmenteno pior caso. Ambas as técnicas são baseadas em criar cópias especializadas do código para cada contexto.Contudo, as duas técnicas precisam criar cópias de todas as funções no caminho de chamadas que leva a cadaotimização, ainda que isto envolva copiar funções que não serão otimizadas. Neste trabalho, propomos uma soluçãopara este problema. Utilizando uma combinação de despacho dinâmico e uma máquina de estados para controlar as transiçõesentre os contextos dinamicamente, nosso método implementa otimizações completamente sensíveis ao contextonecessitando apenas copiar as funções que serão otimizadas, mas não o caminho de chamadas até elas.Apresentamos nossa abordagem em Minilog, uma linguagem mínima que possui todos os recursos necessários para aplicaro método proposto, e provamos sua corretude. Implementamos nosso método na infraestrutura de compiladores LLVM,utilizando-o para otimizar programas com propagação de constantes completamente sensível a contexto.Nossos experimentos nos benchmarks do LLVM Test Suite e do SPEC CPU2006 mostram que nosso método escala significativamentemelhor em termos de espaço que clonagem de funções, gerando binários em média 2.7x menores, adicionando em média 8.5x menosbytes ao implementar a mesma otimização. Os binários gerados utilizando nossa técnica tiveram performance muito semelhante aosgerados com clonagem tradicional.Além disso, utilizando essa classe de otimizações ainda pouco explorada, conseguimos speed-ups de até 20\% em algunsbenchmarks quando comparados a LLVM -O3.Universidade Federal de Minas GeraisUFMGFernando Magno Quintao PereiraEdson BorinMario Sergio Ferreira Alvim JuniorGabriel Poesia Reis e Silva2019-08-13T22:30:16Z2019-08-13T22:30:16Z2017-08-04info:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesisapplication/pdfhttp://hdl.handle.net/1843/JCES-AVKLSPinfo:eu-repo/semantics/openAccessporreponame:Repositório Institucional da UFMGinstname:Universidade Federal de Minas Gerais (UFMG)instacron:UFMG2019-11-14T15:07:03Zoai:repositorio.ufmg.br:1843/JCES-AVKLSPRepositório InstitucionalPUBhttps://repositorio.ufmg.br/oairepositorio@ufmg.bropendoar:2019-11-14T15:07:03Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG)false |
dc.title.none.fl_str_mv |
Dynamic dispatch of context-sensitive optimizations |
title |
Dynamic dispatch of context-sensitive optimizations |
spellingShingle |
Dynamic dispatch of context-sensitive optimizations Gabriel Poesia Reis e Silva Compiladores Otimizantes Linguagens de Programação Propagação de Constantes Otimizações Sensíveis ao Contexto Linguagem de programação (Computadores) Otimização combinatória Compiladores (Computadores) Computação |
title_short |
Dynamic dispatch of context-sensitive optimizations |
title_full |
Dynamic dispatch of context-sensitive optimizations |
title_fullStr |
Dynamic dispatch of context-sensitive optimizations |
title_full_unstemmed |
Dynamic dispatch of context-sensitive optimizations |
title_sort |
Dynamic dispatch of context-sensitive optimizations |
author |
Gabriel Poesia Reis e Silva |
author_facet |
Gabriel Poesia Reis e Silva |
author_role |
author |
dc.contributor.none.fl_str_mv |
Fernando Magno Quintao Pereira Edson Borin Mario Sergio Ferreira Alvim Junior |
dc.contributor.author.fl_str_mv |
Gabriel Poesia Reis e Silva |
dc.subject.por.fl_str_mv |
Compiladores Otimizantes Linguagens de Programação Propagação de Constantes Otimizações Sensíveis ao Contexto Linguagem de programação (Computadores) Otimização combinatória Compiladores (Computadores) Computação |
topic |
Compiladores Otimizantes Linguagens de Programação Propagação de Constantes Otimizações Sensíveis ao Contexto Linguagem de programação (Computadores) Otimização combinatória Compiladores (Computadores) Computação |
description |
The compilers community has dedicated much time and effort in making context-sensitive analyses scalable, with great profit. However, the implementation of context-sensitive optimizations remains a challenge. The main problem is code size growth. Both function cloning and inlining are based on creating copies of all functions in the call path that leads to each optimization, even when that involves copying functions that are not optimized. We propose a solution for that problem. Using a combination of dynamic dispatch and a state machine to dynamically control the transitions between calling contexts, our method implements fully context-sensitive optimizations only needing to copy optimized functions. Experiments in the LLVM Test Suite and SPEC CPU2006 show our method scales better than cloning, using 8.5x less bytes to implement the same optimizations. We have also observed speed-ups of up to 20% on top of LLVM -O3 using fully context-sensitive constant propagation. |
publishDate |
2017 |
dc.date.none.fl_str_mv |
2017-08-04 2019-08-13T22:30:16Z 2019-08-13T22:30:16Z |
dc.type.status.fl_str_mv |
info:eu-repo/semantics/publishedVersion |
dc.type.driver.fl_str_mv |
info:eu-repo/semantics/masterThesis |
format |
masterThesis |
status_str |
publishedVersion |
dc.identifier.uri.fl_str_mv |
http://hdl.handle.net/1843/JCES-AVKLSP |
url |
http://hdl.handle.net/1843/JCES-AVKLSP |
dc.language.iso.fl_str_mv |
por |
language |
por |
dc.rights.driver.fl_str_mv |
info:eu-repo/semantics/openAccess |
eu_rights_str_mv |
openAccess |
dc.format.none.fl_str_mv |
application/pdf |
dc.publisher.none.fl_str_mv |
Universidade Federal de Minas Gerais UFMG |
publisher.none.fl_str_mv |
Universidade Federal de Minas Gerais UFMG |
dc.source.none.fl_str_mv |
reponame:Repositório Institucional da UFMG instname:Universidade Federal de Minas Gerais (UFMG) instacron:UFMG |
instname_str |
Universidade Federal de Minas Gerais (UFMG) |
instacron_str |
UFMG |
institution |
UFMG |
reponame_str |
Repositório Institucional da UFMG |
collection |
Repositório Institucional da UFMG |
repository.name.fl_str_mv |
Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG) |
repository.mail.fl_str_mv |
repositorio@ufmg.br |
_version_ |
1816829656235507712 |