FILIPE POLINA AFFONSO BRANCH PREDICTION LONDRINA–PR 2016 FILIPE POLINA AFFONSO BRANCH PREDICTION Trabalho de Conclusão de Curso apresentado ao curso de Bacharelado em Ciência da Computação da Universidade Estadual de Londrina para obtenção do título de Bacharel em Ciência da Computação. Orientador: Prof. Dr. Wesley Attrot LONDRINA–PR 2016 Filipe Polina Affonso Branch Prediction/ Filipe Polina Affonso. – Londrina–PR, 201635 p. : il. (algumas color.) ; 30 cm. Orientador: Prof. Dr. Wesley Attrot – Universidade Estadual de Londrina, 2016. 1. Branch Prediction. 2. Predição de Desvios. I. Dr. Wesley Attrot. II. Universidade Estadual de Londrina. III. Departamento de Computação. IV. Branch Prediction CDU 02:141:005.7 FILIPE POLINA AFFONSO BRANCH PREDICTION Trabalho de Conclusão de Curso apresentado ao curso de Bacharelado em Ciência da Computação da Universidade Estadual de Londrina para obtenção do título de Bacharel em Ciência da Computação. BANCA EXAMINADORA Prof. Dr. Wesley Attrot Universidade Estadual de Londrina Orientador Prof. Dr. Segundo Membro da Banca Universidade/Instituição do Segundo Membro da Banca Prof. Dr. Terceiro Membro da Banca Universidade/Instituição do Terceiro Membro da Banca Prof. Ms. Quarto Membro da Banca Universidade/Instituição do Quarto Membro da Banca Londrina–PR, 24 de novembro de 2016 Este trabalho é dedicado às crianças adultas que, quando pequenas, sonharam em se tornar cientistas. AGRADECIMENTOS Muitos agradecimentos e tals. . . “No início, o Universo foi criado. Isso irritou profundamente muitas pessoas e, no geral, foi encarado como uma péssima ideia.” (Douglas Adams) AFFONSO, F. P.. Branch Prediction. 35 p. Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação) – Universidade Estadual de Londrina, Londrina–PR, 2016. RESUMO Previsores de Desvio são técnicas implementadas nos processadores para aumentar a eficiência no uso do pipeline. Diferentes técnicas tem taxas melhores de assertividade comparadas com outras técnicas. Este trabalho tem o intuito de criar e comparar técnicas de Previsão de Desvios que sejam mais assertivas que as técnicas usadas atualmente. Palavras-chave: Predição de desvios. Pipeline. Otimização AFFONSO, F. P.. Branch Prediction. 35 p. Final Project (Bachelor of Science in Computer Science) – State University of Londrina, Londrina–PR, 2016. ABSTRACT Branch Predictors are techniques implemented in processors to increase efficiency on the pipeline usage. Newer routines provide better resolution rates. This paper will create and compare new methods that will try to be more assertive using less hardware power. Keywords: Branch Prediction. Pipeline. Optimization LISTA DE ILUSTRAÇÕES Figura 1 – Contador Saturado de dois bits . . . . . . . . . . . . . . . . . . . . . . 25 LISTA DE TABELAS LISTA DE ABREVIATURAS E SIGLAS PC Program Counter (Contador de Programa) SUMÁRIO 1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2 2.1 2.2 2.3 2.4 PREDITORES DE Two Bit Counter . Bi Modal . . . . . . Local Branch . . . . GShare . . . . . . . . . . . . 25 25 25 25 25 3 3.1 NAM SED TELLUS SIT AMET LECTUS URNA ULLAMCORPER TRISTIQUE INTERDUM ELEMENTUM . . . . . Pellentesque sit amet pede ac sem eleifend consectetuer . . . 27 27 4 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 ANEXOS 33 DESVIO . . . . . . . . . . . . . . . . . . . . . . . . DINÂMICOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ANEXO A – MORBI ULTRICES RUTRUM LOREM. . . . . . . . . . . . . . . . . . . 35 23 1 INTRODUÇÃO A busca para uma melhor performance em termos de tempo de execução sempre foi um norte para a Ciência da Computação. No final dos anos 50, sentindo a necessidade de ampliar a performance de máquinas para estudos científicos [1], como o IBM 704, criou-se uma máquina que usa um técnica de paralelismo de processamento chamada futuramente de Pipeline. O Pipeline é uma técnica implementada em processadores para otimizar o uso de cada ciclo de execução. O formato do método possui estágios, em que cada um deles possui ao menos um circuito que realiza uma função específica. As principais funções são: Fetch, Decode, Execute e Write-back [2]. Em processadores Escalares, existe uma dependência entre os estágios, logo, o estágio de Execução, por exemplo, somente poderá executar um código que o estágio de Decodificação já tenha processado. Para a implementação de paralelismo no Pipeline é necessário que as próximas instruções sejam carregadas continuamente. Isso se faz apenas tomando o próximo PC (Program Counter) da instrução que foi executada mais recentemente no Pipeline. A escolha do próximo endereço a ser carregado no PC, contudo, pode não ser aquela que o programa deveria executar. Em instruções de desvios condicionais, o processador somente obtém o endereço da próxima instrução no estágio de execução, fazendo com que a fase de carregamento (Fetch) possa ter sido carregada com um endereço indesejado. Este fato gera problemas como um taxa baixa de Ciclos Por Instrução, subutilizando o poder do processador e também força que o Pipeline descarte informações, gerando um fenômeno conhecido por Bolha. Não se conhece uma máquina que é capaz de determinar o futuro de uma execução, logo o carregamento do próximo endereço a ser executado depende de uma previsão de qual seja este endereço e, assim, aumentar a probabilidade de que um endereço carregado seja de fato executado. Preditores de Desvio foram criados a partir da necessidade de evitar o desperdício de ciclos do processador. Desta forma, podemos definir políticas sobre quais endereços devem ser carregados quando existe uma instrução em que é possível acontecer um salto. É importante notar que instruções de saltos incondicionais não sofrem desta mazela, já que esta instrução possui o endereço alvo disponível já na fase de Decode. Uma forma de superar esta dificuldade é tentar prever o endereço que tem a maior probabilidade de ser executado no futuro. Com isso surgem as técnicas de Predição de Desvios estáticas, que podem ser implementadas sem a adição de hardware especializado. O Pipeline pode ser construído de forma que sempre irá, por exemplo, carregar o próximo 24 endereço da própria instrução do salto. Em termos mais práticos, isso significa que o Pipeline vai sempre ignorar que o salto vai acontecer. Com facilidade percebe-se que uma técnica estática não convém, já que se um código for escrito com a intenção de tomar todos os saltos como verdade, significa que este Pipeline do exemplo vai gerar Bolhas todas as vezes que uma instrução de salto tiver que ser executada. Para superar este obstáculo, criaram-se técnicas de Previsão de Desvios Dinâmicas. Estas técnicas necessitam de hardware adicional pois algumas exigem o uso de memória. Técnicas Dinâmicas tentam aprender com a execução do código qual o caminho mais provável a ser seguido e, então, aplica este caminho no Pipeline. Neste trabalho serão demonstradas comparações entre técnicas conhecidas e utilizadas por fabricantes de processadores bem como uma tentativa de desenvolvimento de uma nova técnica que tentará ser mais eficiente em termos de assertividade do que os métodos conhecidos. 25 2 PREDITORES DE DESVIO DINÂMICOS 2.1 Two Bit Counter O Two Bit Counter é uma técnica que usa apenas um contador para prever qual será a direção do desvio tomando em conta quais foram as direções tomadas anteriormente. Inicialmente inicia-se o contador com o valor zero e conforme a execução segue o contador é modificado tomando em conta os acertos e erros anteriores. Figura 1 – Contador Saturado de dois bits Previsor Two Bit Counter e sua explicação 2.2 Bi Modal Um Previsor BiModal e sua explicação... 2.3 Local Branch Previsor Local Branch e sua explicação 2.4 GShare Previsor GShare e sua explicação 27 3 NAM SED TELLUS SIT AMET LECTUS URNA ULLAMCORPER TRISTIQUE INTERDUM ELEMENTUM 3.1 Pellentesque sit amet pede ac sem eleifend consectetuer Maecenas non massa. Vestibulum pharetra nulla at lorem. Duis quis quam id lacus dapibus interdum. Nulla lorem. Donec ut ante quis dolor bibendum condimentum. Etiam egestas tortor vitae lacus. Praesent cursus. Mauris bibendum pede at elit. Morbi et felis a lectus interdum facilisis. Sed suscipit gravida turpis. Nulla at lectus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent nonummy luctus nibh. Proin turpis nunc, congue eu, egestas ut, fringilla at, tellus. In hac habitasse platea dictumst. 29 4 CONCLUSÃO Sed consequat tellus et tortor. Ut tempor laoreet quam. Nullam id wisi a libero tristique semper. Nullam nisl massa, rutrum ut, egestas semper, mollis id, leo. Nulla ac massa eu risus blandit mattis. Mauris ut nunc. In hac habitasse platea dictumst. Aliquam eget tortor. Quisque dapibus pede in erat. Nunc enim. In dui nulla, commodo at, consectetuer nec, malesuada nec, elit. Aliquam ornare tellus eu urna. Sed nec metus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus id magna. Duis malesuada interdum arcu. Integer metus. Morbi pulvinar pellentesque mi. Suspendisse sed est eu magna molestie egestas. Quisque mi lorem, pulvinar eget, egestas quis, luctus at, ante. Proin auctor vehicula purus. Fusce ac nisl aliquam ante hendrerit pellentesque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Morbi wisi. Etiam arcu mauris, facilisis sed, eleifend non, nonummy ut, pede. Cras ut lacus tempor metus mollis placerat. Vivamus eu tortor vel metus interdum malesuada. Sed eleifend, eros sit amet faucibus elementum, urna sapien consectetuer mauris, quis egestas leo justo non risus. Morbi non felis ac libero vulputate fringilla. Mauris libero eros, lacinia non, sodales quis, dapibus porttitor, pede. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Morbi dapibus mauris condimentum nulla. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam sit amet erat. Nulla varius. Etiam tincidunt dui vitae turpis. Donec leo. Morbi vulputate convallis est. Integer aliquet. Pellentesque aliquet sodales urna. 31 REFERÊNCIAS [1] Bloch, E. The engineering design of the STRETCH computer. In: Proc. Fall Joint Computer Conference. [S.l.: s.n.], 1959. p. 48–59. [2] SHEN, J.; LIPASTI, M. Modern Processor Design: Fundamentals of Superscalar Processors. [S.l.]: McGraw-Hill, 2005. Anexos 35 ANEXO A – MORBI ULTRICES RUTRUM LOREM. Sed mattis, erat sit amet gravida malesuada, elit augue egestas diam, tempus scelerisque nunc nisl vitae libero. Sed consequat feugiat massa. Nunc porta, eros in eleifend varius, erat leo rutrum dui, non convallis lectus orci ut nibh. Sed lorem massa, nonummy quis, egestas id, condimentum at, nisl. Maecenas at nibh. Aliquam et augue at nunc pellentesque ullamcorper. Duis nisl nibh, laoreet suscipit, convallis ut, rutrum id, enim. Phasellus odio. Nulla nulla elit, molestie non, scelerisque at, vestibulum eu, nulla. Ut odio nisl, facilisis id, mollis et, scelerisque nec, enim. Aenean sem leo, pellentesque sit amet, scelerisque sit amet, vehicula pellentesque, sapien.