Visão Geral
Pipeline:
– Paralelismo em nível de instrução (ILP) – Técnica de implementação de processadores que permite a sobreposição temporal das diversas fases da execução de instruções. – É a principal técnica de uma geração de microprocessadores para executarem programas mais rapidamente. Exemplo: Processo de lavar roupas. Estratégia: Executar todos os estágios concorrentemente. – O tempo individual na execução de uma instrução não muda, mas o tempo de execução de várias instruções (troughput) é potencialmente menor.
Pipeline no MIPS
Instruções MIPS são executadas em até 5 passos (estágios): Busca de Instrução na Memória (IF) Leitura de registradores e decodificação da instrução (simultâneos) (ID) Execução da operação ou cálculo de endereço (EX) Acesso de um operando na memória (MEM) Escrita de resultado em um registrador (WB) Execução sem Pipeline IF – ID – EX – MEM – WB IF – ID – EX – MEM WB Execução com Pipeline IF – ID – EX – MEM – WB IF – ID – EX – MEM – WB IF – ID – EX – MEM – WB Tempo
Performance: Um exemplo
Compare o tempo médio de execução para a implementação monociclo (1 ciclo de clock para toda a instrução), com o tempo de execução multiciclo em pipeline, considerando os dados:
Performance: Um exemplo
Solução:
Performance: Um exemplo
Solução: Solução Monociclo: Todas instruções levarão 8 ns, o tempo da maior. Tempo entre 1a e 4a instrução é de 3x8 ns = 24 ns. Solução Multiciclo: Clock ajustado para a operação individual mais lenta, 2ns. Tempo entre 1a e 4a instrução é de 3 x 2ns = 6 ns 4x mais rápido! Comentários: Idealmente, um pipeline de 5 estágios deveria levar a um ganho de 5 vezes. Problema: Estágios não são balanceados ( o tempo de cada estágio não é igual à divisão do tempo total uniciclo pelo nro de estágios) e há o overhead de encher o pipeline.
Exemplo
No exemplo anterior, considere a execução de 1003 instruções. Qual seria o tempo total de execução com e sem pipeline? Com pipeline: A execução das 3 instruções, vimos que dá 14 ns. Com pipeline, cada instrução acrescenta 2 ns ao tempo total de execução. Tempo total: 1000 x 2 ns + 14 ns = 2014 ns. Sem pipeline: Cada instrução em 8 ns Tempo total: 1003 x 8 ns = 8024 ns Ganho: 8024/2014 = 3,98
Relação do MIPS com Pipeline
Tamanho único das instruções facilita os estágios de busca e decodificação de instruções. Poucos formatos de instruções com operandos em lugares iguais permitem a leitura de registradores e decodificação da operação de forma simultânea. Somente instruções de load e store acessam dados na memória, permitindo o uso do estágio de execução para cálculo de endereço.
Conflitos (Hazards)
Existem situações no pipeline em que a próxima instrução não pode ser executada no próximo ciclo de clock. São conflitos. – Conflitos causam paradas no pipeline (stalls). Instruções buscadas após a necessidade de stall também devem parar. Instruções buscadas antes devem continuar. Três tipos básicos: Conflitos Estruturais: O Hardware não suporta uma determinada combinação de instruções. Acontece quando algum componente é necessários em mais de 1 estágio. Exemplo: Se a memória de instruções é a mesma de dados. Conflitos de dados: Acontece quando uma instrução depende do resultado de uma instrução anterior. Exemplo: Uma instrução de sub que depende de um add anterior. O resultado só será escrito no último estágio do add. Conflitos de controle: Surgem quando são executadas instruções de saltos que alteram o PC. Exemplo: A próxima instrução depende de um branch ser tomado ou não.
Conflito Estrutural
Exemplo:
Conflitos de Dados
Exemplo: Considere a sequência:
Conflitos de Dados
Reduzindo conflitos de dados Técnica de bypassing (encaminhamento) O resultado do add não é necessário pelo sub até que este realmente seja gerado. Podendo evitar stall movendo o resultado do add para a entrada do sub. Encaminhamento: Resuldado da ULA nos regs EX/MEM e MEM/WB alimentado de volta às entradas da ULA. Se Hw de encaminhamento detectar que a operação anterior da ULA escreve o reg correspondente a uma origem para a operação atual, a lógica de controle seleciona o resultado do encaminhamento como entrada da ULA, ao invés do banco de regs. Isso acontece também para instruções que tenham acontecido 2 ciclos antes.
Conflitos de Dados
Reduzindo conflito de dados
Conflitos de Dados
Pode ser generalizado: saída da unidade que produz p/ unidade que precisa.
Conflito de Dados
Há casos que não tem jeito.
Conflitos de Controle
Quando há desvios: Somente no estágio MEM saberemos se branch será tomado (depende da ULA) – Uma solução: Esvaziar pipe, esperando definição do desvio. – Outra: Assumir desvio não tomado, continua normalmente. Desfaz se desvio. – Alternativa: Assumir desvio tomado, mas causa atraso para a definição do end. de desvio.
Conflitos de Controle
Alternativa: Desvio adiado com slot de atrado A próxima instrução é sempre executada. • Passível de otimizações do SW ou compilador. Escalonamento:
Exemplo com Conflito de Desvio
Exemplo: Em um proc., levase 3 estágios do pipeline antes de se determinar o end. De destino de um desvio e mais 1 ciclo para saber se o mesmo será tomado. Qual as penalidades dos jumps nas 3 abordagens vistas (esvaziar pipe, previsto tomado e previsto não tomado)?
Desempenho
Pipeline melhora throughput, não o tempo de execução de uma instrução individual Pipelines têm um limite de profundidade, pois alguma latência é introduzida entre os estágios do pipeline devido aos registradores. Quando o tempo do ciclo é tão pequeno quanto os overheads, deixa de valer a pena ter mais estágios. Exemplo: Considere um proc. Sem pipeline. Suponha que ele tenha um ciclo de clock de 1ns e use 4 ciclos para instruções de ALU e desvios, e 5 ciclos para operações de memória. As freqs. Dessas instruções são 40%, 20% e 40%, respectivamente. Imagine que versão pipeline acrescenta 0,2 ns de overhead. Qual o ganho com o pipeline?
Solução
Não pipeline: Texec = Ciclo de clock x CPI Texec = 1ns x ((40%+20%)x4 + 40%x5) = 1 ns x 4,4 Texec = 4,4 ns Com pipeline: C/ overhead de clock: 1 + 0,2 = 0,2 ns Speedup = Texec_sempipe / Texec_compipe Speedup = 4,4 / 1,2 = 3,7 vezes.
Implementação de Pipelines
Caminho de Dados: Estágios 1) IF: Busca de Instrução 2) ID: Decod. Instrução e leitura de registradores 3) EX: Execução ou cálculo de endereço 4) MEM: Acesso à memória de dados 5) WB: Escrita de registradores
Implementação de Pipelines
Controle: Sinais devem passar para os demais estágios no ciclo de clock correto. Basta, também, passar
Desafios em pipelines
Exceções e interrupções podem levar o processador a executar diferentes processos, interrompendo a sequência do pipeline. I/O Usuário Exceções em operações aritméticas etc. Conjunto de instruções complicadas podem trazer complexidades aos componentes do pipeline e criar dependências Estágios desbalanceados Complexidade na detecção de hazards Dificuldade de determinar branchs etc.