Interdependência entre alocação de registradores e escalonamento de instruções: estudo sistemático e verificação de soluções

Detalhes bibliográficos
Autor(a) principal: João Francisco Neiva de Carvalho
Data de Publicação: 2018
Tipo de documento: Dissertação
Idioma: por
Título da fonte: Repositório Institucional da UFMG
Texto Completo: http://hdl.handle.net/1843/43016
Resumo: Register allocation and instruction scheduling are two important tasks performed by a compiler. The first defines which program values should be allocated in the machine physical registers and associates those values with the available physical registers. The second schedules the program instructions, moving them along the code, so that the resulting instruction sequence is executed faster than the original instruction sequence. However, these two tasks are involved in a prioritization problem: if the allocation task is executed before the scheduling task, false dependencies may arise between instructions, preventing the optimal scheduling. On the other hand, if the scheduling task is performed prior to the allocation task, program values can remain alive for a large number of instructions, increasing the chances of spilling values into memory. This prioritization problem, also known as the problem of the interdependence between register allocation and instruction scheduling tasks, has gained relevance with the emergence of RISC architectures and with the increasing importance of compilers for efficient code generation. The work described in this dissertation takes over this problem in two distinct and complementary aspects: a theoretical one, realized through a systematic literature review; and a practical one, realized by the implementation of Pinter’s approach into LLVM, an approach that aims to reduce the impact that the interdependence between the two tasks produces on the generation of efficient code. The results achieved, mainly the practical results, indicate that the interdependence between the two tasks remains a relevant problem and show that the realized implementation was able to generate more efficient codes, when compared to codes generated by LLVM and Microsoft Visual Studio compilers
id UFMG_2ac295839e3b15bad82709150ec9b410
oai_identifier_str oai:repositorio.ufmg.br:1843/43016
network_acronym_str UFMG
network_name_str Repositório Institucional da UFMG
repository_id_str
spelling Interdependência entre alocação de registradores e escalonamento de instruções: estudo sistemático e verificação de soluçõesCompiladoresOtimização de CódigoAlocação de RegistradoresEscalonamento de InstruçõesComputação – TesesCompiladores (Computadores) – TesesSoftware – Desenvolvimento – TesesOtimização de código - TesesRegister allocation and instruction scheduling are two important tasks performed by a compiler. The first defines which program values should be allocated in the machine physical registers and associates those values with the available physical registers. The second schedules the program instructions, moving them along the code, so that the resulting instruction sequence is executed faster than the original instruction sequence. However, these two tasks are involved in a prioritization problem: if the allocation task is executed before the scheduling task, false dependencies may arise between instructions, preventing the optimal scheduling. On the other hand, if the scheduling task is performed prior to the allocation task, program values can remain alive for a large number of instructions, increasing the chances of spilling values into memory. This prioritization problem, also known as the problem of the interdependence between register allocation and instruction scheduling tasks, has gained relevance with the emergence of RISC architectures and with the increasing importance of compilers for efficient code generation. The work described in this dissertation takes over this problem in two distinct and complementary aspects: a theoretical one, realized through a systematic literature review; and a practical one, realized by the implementation of Pinter’s approach into LLVM, an approach that aims to reduce the impact that the interdependence between the two tasks produces on the generation of efficient code. The results achieved, mainly the practical results, indicate that the interdependence between the two tasks remains a relevant problem and show that the realized implementation was able to generate more efficient codes, when compared to codes generated by LLVM and Microsoft Visual Studio compilersA alocação de registradores e o escalonamento de instruções são duas importantes tarefas realizadas por um compilador. A primeira define quais valores do programa deverão ser alocados nos registradores físicos da máquina e associa esses valores com os registradores físicos disponíveis. A segunda escalona as instruções do programa, podendo movimentá-las ao longo do código, a fim de que a sequência de instruções resultante seja executada mais rapidamente do que a sequência de instruções original. Todavia, essas duas tarefas estão envolvidas em um problema de priorização: se a tarefa de alocação for executada antes da tarefa de escalonamento, falsas dependências poderão surgir entre as instruções do código, prejudicando o escalonamento ótimo. Por outro lado, se a tarefa de escalonamento for realizada antes da tarefa de alocação, os valores do programa podem permanecer vivos por um grande número de instruções, aumentando as chances de derramamentos de valores para a memória. Esse problema de priorização, também conhecido como o problema da interdependência entre as tarefas de alocação de registradores e escalonamento de instruções, ganhou relevância com o surgimento das arquiteturas RISC e com o aumento da importância dos compiladores para a geração de códigos eficientes. O trabalho descrito nesta dissertação considera esse problema em duas vertentes distintas e complementares: uma teórica, realizada por meio de uma revisão sistemática da literatura sobre o tema; e uma prática, efetuada a partir da implementação da abordagem de Pinter no LLVM, uma abordagem que visa reduzir o impacto que a interdependência entre as duas tarefas acarreta sobre a geração de códigos eficientes. Os resultados alcançados, principalmente os resultados práticos, indicam que a interdependência entre as duas tarefas continua sendo um problema relevante e mostram que a implementação realizada foi capaz de gerar códigos mais eficientes, quando comparados com os códigos gerados pelo LLVM e pelo Microsoft Visual Studio.CAPES - Coordenação de Aperfeiçoamento de Pessoal de Nível SuperiorUniversidade Federal de Minas GeraisBrasilICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃOPrograma de Pós-Graduação em Ciência da ComputaçãoUFMGMariza Andrade da Silva Bigonhahttp://lattes.cnpq.br/6660127471891321Mariza Andrade da Silva BigonhaCarlos Camarão de FigueiredoKécia Aline Marques FerreiraLeonardo Vieira dos Santos ReisJoão Francisco Neiva de Carvalho2022-07-07T13:47:22Z2022-07-07T13:47:22Z2018-03-28info:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesisapplication/pdfhttp://hdl.handle.net/1843/43016porhttp://creativecommons.org/licenses/by-nc-nd/3.0/pt/info:eu-repo/semantics/openAccessreponame:Repositório Institucional da UFMGinstname:Universidade Federal de Minas Gerais (UFMG)instacron:UFMG2022-07-07T13:47:22Zoai:repositorio.ufmg.br:1843/43016Repositório InstitucionalPUBhttps://repositorio.ufmg.br/oairepositorio@ufmg.bropendoar:2022-07-07T13:47:22Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG)false
dc.title.none.fl_str_mv Interdependência entre alocação de registradores e escalonamento de instruções: estudo sistemático e verificação de soluções
title Interdependência entre alocação de registradores e escalonamento de instruções: estudo sistemático e verificação de soluções
spellingShingle Interdependência entre alocação de registradores e escalonamento de instruções: estudo sistemático e verificação de soluções
João Francisco Neiva de Carvalho
Compiladores
Otimização de Código
Alocação de Registradores
Escalonamento de Instruções
Computação – Teses
Compiladores (Computadores) – Teses
Software – Desenvolvimento – Teses
Otimização de código - Teses
title_short Interdependência entre alocação de registradores e escalonamento de instruções: estudo sistemático e verificação de soluções
title_full Interdependência entre alocação de registradores e escalonamento de instruções: estudo sistemático e verificação de soluções
title_fullStr Interdependência entre alocação de registradores e escalonamento de instruções: estudo sistemático e verificação de soluções
title_full_unstemmed Interdependência entre alocação de registradores e escalonamento de instruções: estudo sistemático e verificação de soluções
title_sort Interdependência entre alocação de registradores e escalonamento de instruções: estudo sistemático e verificação de soluções
author João Francisco Neiva de Carvalho
author_facet João Francisco Neiva de Carvalho
author_role author
dc.contributor.none.fl_str_mv Mariza Andrade da Silva Bigonha
http://lattes.cnpq.br/6660127471891321
Mariza Andrade da Silva Bigonha
Carlos Camarão de Figueiredo
Kécia Aline Marques Ferreira
Leonardo Vieira dos Santos Reis
dc.contributor.author.fl_str_mv João Francisco Neiva de Carvalho
dc.subject.por.fl_str_mv Compiladores
Otimização de Código
Alocação de Registradores
Escalonamento de Instruções
Computação – Teses
Compiladores (Computadores) – Teses
Software – Desenvolvimento – Teses
Otimização de código - Teses
topic Compiladores
Otimização de Código
Alocação de Registradores
Escalonamento de Instruções
Computação – Teses
Compiladores (Computadores) – Teses
Software – Desenvolvimento – Teses
Otimização de código - Teses
description Register allocation and instruction scheduling are two important tasks performed by a compiler. The first defines which program values should be allocated in the machine physical registers and associates those values with the available physical registers. The second schedules the program instructions, moving them along the code, so that the resulting instruction sequence is executed faster than the original instruction sequence. However, these two tasks are involved in a prioritization problem: if the allocation task is executed before the scheduling task, false dependencies may arise between instructions, preventing the optimal scheduling. On the other hand, if the scheduling task is performed prior to the allocation task, program values can remain alive for a large number of instructions, increasing the chances of spilling values into memory. This prioritization problem, also known as the problem of the interdependence between register allocation and instruction scheduling tasks, has gained relevance with the emergence of RISC architectures and with the increasing importance of compilers for efficient code generation. The work described in this dissertation takes over this problem in two distinct and complementary aspects: a theoretical one, realized through a systematic literature review; and a practical one, realized by the implementation of Pinter’s approach into LLVM, an approach that aims to reduce the impact that the interdependence between the two tasks produces on the generation of efficient code. The results achieved, mainly the practical results, indicate that the interdependence between the two tasks remains a relevant problem and show that the realized implementation was able to generate more efficient codes, when compared to codes generated by LLVM and Microsoft Visual Studio compilers
publishDate 2018
dc.date.none.fl_str_mv 2018-03-28
2022-07-07T13:47:22Z
2022-07-07T13:47:22Z
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/43016
url http://hdl.handle.net/1843/43016
dc.language.iso.fl_str_mv por
language por
dc.rights.driver.fl_str_mv http://creativecommons.org/licenses/by-nc-nd/3.0/pt/
info:eu-repo/semantics/openAccess
rights_invalid_str_mv http://creativecommons.org/licenses/by-nc-nd/3.0/pt/
eu_rights_str_mv openAccess
dc.format.none.fl_str_mv application/pdf
dc.publisher.none.fl_str_mv Universidade Federal de Minas Gerais
Brasil
ICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
Programa de Pós-Graduação em Ciência da Computação
UFMG
publisher.none.fl_str_mv Universidade Federal de Minas Gerais
Brasil
ICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
Programa de Pós-Graduação em Ciência da Computação
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_ 1816829662978899968