Please use this identifier to cite or link to this item: http://hdl.handle.net/1843/43016
Full metadata record
DC FieldValueLanguage
dc.contributor.advisor1Mariza Andrade da Silva Bigonhapt_BR
dc.contributor.advisor1Latteshttp://lattes.cnpq.br/6660127471891321pt_BR
dc.contributor.referee1Mariza Andrade da Silva Bigonhapt_BR
dc.contributor.referee2Carlos Camarão de Figueiredopt_BR
dc.contributor.referee3Kécia Aline Marques Ferreirapt_BR
dc.contributor.referee4Leonardo Vieira dos Santos Reispt_BR
dc.creatorJoão Francisco Neiva de Carvalhopt_BR
dc.creator.Latteshttp://lattes.cnpq.br/7121741948769406pt_BR
dc.date.accessioned2022-07-07T13:47:22Z-
dc.date.available2022-07-07T13:47:22Z-
dc.date.issued2018-03-28-
dc.identifier.urihttp://hdl.handle.net/1843/43016-
dc.description.abstractRegister 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 compilerspt_BR
dc.description.resumoA 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.pt_BR
dc.description.sponsorshipCAPES - Coordenação de Aperfeiçoamento de Pessoal de Nível Superiorpt_BR
dc.languageporpt_BR
dc.publisherUniversidade Federal de Minas Geraispt_BR
dc.publisher.countryBrasilpt_BR
dc.publisher.departmentICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃOpt_BR
dc.publisher.programPrograma de Pós-Graduação em Ciência da Computaçãopt_BR
dc.publisher.initialsUFMGpt_BR
dc.rightsAcesso Abertopt_BR
dc.rights.urihttp://creativecommons.org/licenses/by-nc-nd/3.0/pt/*
dc.subjectCompiladorespt_BR
dc.subjectOtimização de Códigopt_BR
dc.subjectAlocação de Registradorespt_BR
dc.subjectEscalonamento de Instruçõespt_BR
dc.subject.otherComputação – Tesespt_BR
dc.subject.otherCompiladores (Computadores) – Tesespt_BR
dc.subject.otherSoftware – Desenvolvimento – Tesespt_BR
dc.subject.otherOtimização de código - Tesespt_BR
dc.titleInterdependência entre alocação de registradores e escalonamento de instruções: estudo sistemático e verificação de soluçõespt_BR
dc.typeDissertaçãopt_BR
Appears in Collections:Dissertações de Mestrado

Files in This Item:
File Description SizeFormat 
JOÃO FRANCISCO - Dissertação de Mestrado - Revisão Final.pdf11.51 MBAdobe PDFView/Open


This item is licensed under a Creative Commons License Creative Commons