Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Nächste SlideShare
Processador mips - pipeline
Processador mips - pipeline
Wird geladen in …3
×

Hier ansehen

1 von 40 Anzeige

Weitere Verwandte Inhalte

Ähnlich wie Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf (20)

Aktuellste (20)

Anzeige

Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf

  1. 1. Aula 12 - Organização Lógica e Funcional de um Processador (Parte 2) Professor: João Victor de Araujo Oliveira Arquitetura de Computadores 1 Superior em Computação Instituto Federal de Brasília - Campus Taguatinga
  2. 2. Na aula passada 1. Implementação MIPS básica 2. Convenções lógicas de projeto 3. Construindo um caminho de dados 4. Projetando uma unidade de controle
  3. 3. Hoje ● Visão geral de pipelining ● Hazards de pipeline ○ Hazards Estruturais ○ Hazards de Dados ○ Hazards de Controle ● Previsão de desvios ● Caminho de Dados Usando Pipeline
  4. 4. Pipelining Pipelining: é uma técnica em que várias instruções são sobrepostas na execução, semelhante a uma linha de montagem ● Analogia a um sistema de lavanderia ○ Técnica de pipelining aumenta a vazão (throughput) do sistema ○ Não diminui o tempo para concluir uma trouxa de roupas ○ Mas quando temos muitas trouxas para lavar, traz uma melhoria no tempo total de conclusão do trabalho
  5. 5. Pipelining ● Se todos os estágios levarem aproximadamente o mesmo tempo e houver trabalho suficiente para realizar, então: ○ Ganho de velocidade devido à técnica de pipelining será igual ao número de estágios do pipeline! ■ O pipeline da lavanderia é potencialmente 4 vezes mais rápida do que sem pipeline ● Mesmo princípio é aplicado em um pipeline computacional ○ Podemos dividir nosso caminho de dados em diferentes estágios e definir um tempo de ciclo de clock que seja suficiente para executar qualquer um desses estágios.
  6. 6. Pipelining ● Pipeline para a implementação MIPS simples ○ Podemos dividir a execução das instruções em 5 estágios 1. Buscar a instrução da memória 2. Ler as instruções enquanto a instrução é decodificada (simultaneamente) 3. Executar a operação ou calcular o endereço de memória de dados 4. Acessar um operando na memória de dados 5. Escrever o resultado em um registrador
  7. 7. Exercício 1 (Resolvido) Compare o tempo médio entre as instruções de uma implementação em ciclo único, em que todas as instruções levam um ciclo de clock, com uma implementação com pipeline. Os tempos de operação para as principais unidades funcionais neste exemplo são de: ● 200 ps para acesso à memória ● 200 ps para operação com ALU ● 100 ps para leitura ou escrita de registradores. No modelo de ciclo único, cada instrução leva exatamente um ciclo de clock, de modo que o ciclo precisa ser esticado para acomodar a instrução mais lenta.
  8. 8. Exercício 1 (Resolvido) ● Precisamos calcular o tempo de execução para cada tipo de instrução ● No projeto de ciclo único precisamos contemplar a instrução mais lenta: LW que leva 800 ps ● No projeto de pipeline temos que definir o ciclo de um estágio igual à etapa mais lenta: 200 ps
  9. 9. Exercício 1 (Resolvido) Comparação inicial: execução de três loads ● Foi necessário aumentar o ciclo de algumas etapas no pipeline ● Ganho de 4 vezes sem considerar a execução da primeira linha de comando
  10. 10. Hazards de Pipeline ● Existem situações no pipeline em que a próxima instrução não pode ser executada no ciclo de clock seguinte ○ Esses eventos são chamados de Hazards e podem ser de três tipos 1. Hazards Estruturais 2. Hazards de dados 3. Hazards de controle (Próxima aula)
  11. 11. Hazards Estruturais ● Hazard Estrutural: O hardware não admite a combinação de instruções que querem executar no mesmo ciclo de clock ○ Ex.: Suponha que tenhamos uma única memória para instruções e dados
  12. 12. Hazards de dados ● Hazard de dados: Uma instrução planejada não pode ser executada no ciclo de clock correto porque os dados necessários para executar a instrução ainda não estão disponíveis. ○ Surgem quando uma instrução depende de uma anterior, que ainda está no pipeline add $s0, $t0, $t1 sub $t2, $s0, $t3 ○ Note que a instrução add não escreve o resultado de $s0 até o quinto estágio ○ Ou seja, o processador deveria ter que ficar parado por 3 ciclos de clock até que sub consiga realizar a etapa de decodificação da instrução
  13. 13. Hazards de dados ● Principal solução para o hazard de dados: Fowarding ( ou bypass) ○ Não precisamos esperar que a instrução anterior termine antes de tentar resolver o problema ○ No exemplo anterior: ■ Assim que a ALU gerasse o resultado da soma para a instrução add, poderíamos fornecê-la como uma entrada para a instrução sub ● Fowarding: um método para resolver hazards de dados utilizando o elemento de dados que falta a partir de buffers internos, em vez de esperar que chegue nos registradores ou na memória add $s0, $t0, $t1 sub $t2, $s0, $t3
  14. 14. Exercício 2 (resolvido) Para as duas instruções anteriores, mostre quais estágios do pipeline estariam conectados pelo forwarding. Use o desenho abaixo para representar o caminho de dados durante os cinco estágios do pipeline Obs.: ● O sombreamento indica que o elemento é usado pela instrução. Logo, MEM tem um fundo branco porque add não acessa a memória de dados. ● O sombreamento na metade direita do banco de registradores ou memória significa que o elemento é lido nesse estágio, e o sombreamento da metade esquerda significa que ele é escrito nesse estágio.
  15. 15. Exercício 2 (resolvido) Note que o bypass só será válido se o estágio de destino estiver mais adiante no tempo do que o estágio de origem ● Nada de viagens no tempo nessa disciplina!
  16. 16. Exercício 3 (Resolvido) O que aconteceria se no exercício anterior a primeira instrução fosse um lw que recebe dados em $s0? Note que: ● Os dados desejados só estariam disponíveis depois do quarto estágio da primeira instrução na dependência, que é muito tarde para a entrada do terceiro estágio de sub ● Precisaremos atrasar um estágio para um hazard de dados no uso do load ○ Esse atraso no processamento das instruções é chamado de stall e é também chamado de bolha (como veremos na figura a seguir) lw $s0, 20 ($t1) sub $t2, $s0, $t3
  17. 17. Exercício 3 (Resolvido)
  18. 18. Hazard de Controle ● Também chamado de Hazard de desvio ○ A próxima instrução não pode ser executada no devido ciclo de clock do pipeline porque a instrução buscada não é aquela necessária ■ Ou seja, o fluxo de instrução não é aquilo que o pipeline esperava ○ Em uma instrução de desvio (beq, por exemplo), não sabemos, a priori, se a próxima instrução será ■ PC+4 ou ■ Determinada pelo offset/label. ○ Como as instruções são sobrepostas, precisaríamos ocasionar um Stall no pipeline imediatamente após buscarmos um desvio, esperando até que o pipeline determine o resultado do desvio para saber em qual endereço apanhar a próxima instrução
  19. 19. Hazard de Controle ● Suponha que adicionamos hardware suficiente para testar os registradores, calcular o endereço de desvio e atualizar o PC no segundo estágio (ID) ○ Mesmo assim precisaríamos ocasionar um stall em um ciclo de clock
  20. 20. Hazard de Controle ● Custo de tratar um hazard de controle é alto (especialmente em hardwares mais complexos) ○ Nem sempre será possível “adiantar” a decisão da instrução de desvio na fase ID ○ Segunda solução: Predição para tratar desvios ○ Técnica mais simples: prever que todos os desvios não serão tomados! (Preditores estáticos) ● Quando estiver certo o pipeline prosseguirá a toda velocidade! ● Quando estiver errado, terá que pagar o custo de ocasionar stall! ○ Quando a escolha estiver errada, o controle do pipeline terá de garantir que as instruções após o desvio errado não tenham efeito, reiniciando o pipeline a partir do endereço de desvio apropriado
  21. 21. Exemplo de Previsão de Desvios Desvio não tomado Desvio tomado
  22. 22. Preditores de Desvios Dinâmicos ● Previsores estáticos não levam em consideração a individualidade de uma instrução de desvio específica ○ Preditores de desvios dinâmicos: fazem suas escolhas dependendo do comportamento de cada desvio e podem mudar as previsões para um desvio durante a vida de um programa ○ Técnica mais comum: manter um histórico de cada desvio como tomado ou não tomado, e depois usar o comportamento passado recente para prever o futuro ■ A quantidade e o tipo de histórico mantido tem se tornado extensos, resultando em preditores que podem prever desvios corretamente, com uma precisão superior a 90%
  23. 23. Exercício 4 ● Para cada sequência de código a seguir, indique se 1. Deverá sofrer stall; 2. Pode evitar stalls usando apenas forwarding; ou 3. Pode ser executada sem stall ou forwarding.
  24. 24. Caminho de Dados Usando Pipeline Podemos dividir nosso processador uniciclo em nos cinco estágios do pipeline 1. IF - Busca de instruções 2. ID - Decodificação de Instruções e leitura do banco de registradores 3. EX - Execução ou cálculo de endereço 4. MEM - Acesso à memória de dados 5. WB - Escrita do resultado
  25. 25. Caminho de Dados Usando Pipeline Duas exceções em que os dados não se movem da esquerda para a direita 1. Em WB, pois coloca o resultado de volta no banco de registradores 2. Seleção do próximo valor de PC entre PC+4 e o endereço de desvio
  26. 26. Visão da execução de um pipeline onde cada instrução tem o seu próprio caminho de dados Como podemos garantir que executaremos 3 instruções em um mesmo caminho de dados, sem que um dado de uma instrução não atrapalhe outra?
  27. 27. Caminho de dados na versão pipeline A fim de reter o valor de uma instrução individual para seus outros quatro estágios, o valor lido da memória de instruções precisa ser salvo em um registrador. Argumentos semelhantes se aplicam a cada estágio do pipeline, de modo que precisamos colocar registradores sempre que existam linhas divisórias entre os estágios do pipeline
  28. 28. Sequência de estágios para a execução de uma instrução load word Busca de instruções - Instrução é lida da memória usando o endereço de PC e armazenada no registrador IF/ID - PC + 4 é escrito de volta ao PC (para a próxima instrução) e também armazenado em IF/ID, caso seja necessário em uma instrução do tipo beq
  29. 29. Sequência de estágios para a execução de uma instrução load word Decodificação da Instrução - A instrução é lida de IF/ID, fornecendo os campos imediato de 16 bits e os dois números dos registradores do campo rs e rt - Todos os três valores são armazenados em ID/EX, assim como o endereço no PC incrementado
  30. 30. Sequência de estágios para a execução de uma instrução load word Execução - É lido de ID/EX o conteúdo do primeiro registrador e o imediato com sinal extendido - A soma destes dois valores é armazenada em EX/MEM
  31. 31. Sequência de estágios para a execução de uma instrução load word Acesso a memória - é lido o endereço resultante gerado pela ALU que reside em EX/MEM - O valor carregado do endereço é salvo em MEM/WB
  32. 32. Sequência de estágios para a execução de uma instrução load word Escrita do resultado O valor do dado carregado da memória e armazenado em MEM/WB é escrito no banco de registradores Está faltando algo para que o lw se complete corretamente?
  33. 33. Caminho de dados correto, passando o número do registrador de destino para as etapas posteriores
  34. 34. Representando um pipeline graficamente ● Podemos representar a execução de múltiplas instruções em um pipeline simultaneamente através de dois estilos básicos de diagramas ○ Diagrama de pipeline com múltiplos ciclos de clock ○ Diagrama de pipeline com único ciclo de clock ● Considere o seguinte código
  35. 35. Diagrama de pipeline com múltiplos ciclos de clock
  36. 36. Diagrama de pipeline com múltiplos ciclos de clock
  37. 37. Diagrama de Ciclo único de clock correspondente ao ciclo de clock 5
  38. 38. Exercício 5 De acordo com o pipeline estudado nesta disciplina e do fragmento de código a seguir, considerando que $s4 = 3, responda as questões abaixo: loop: beq $s4,$zero end_loop sw $s1, 0($s2) add $s1, $s1,$s3 lw $s3,0($s2) addi $s2,$s3, 8 addi $s4,$s4, -1 j loop end_loop: a) Mostre a temporização dessa sequência de instruções para o pipeline MIPS de cinco estágios com hardware de adiantamento ou bypassing, e que uma leitura e uma escrita de registrador no mesmo ciclo de clock “adiantam” através do banco de registradores. Suponha que o desvio seja tratado esvaziando o pipeline até que se tenha calculado o endereço efetivo da próxima instrução na etapa de EX. Além disso, suponha que a instrução de jump seja tratado esvaziando o pipeline até que se tenha calculado o endereço da próxima instrução na etapa de ID. Obs.: Só é necessário mostrar uma iteração do loop mais a próxima instrução da iteração seguinte no diagrama de múltiplos ciclos de pipeline. b) Se todas as etapas deste pipeline levam um ciclo, de quantos ciclos esse loop precisa para ser executado?
  39. 39. Nas Próximas aulas ● Exercícios ● Tratamento de exceções ● Introdução a paralelismo a nível de instruções
  40. 40. Referências Hennessy, J. (2017). Organização e Projeto de Computadores. 5th edição. Grupo GEN.

×