Anda di halaman 1dari 102

Pipeline:

conceitos básicos e mais...


Alice M. Tokarnia

Ref.: J. L. Hennessy, D. A. Patterson, Computer


Architecture: A Quantitative Approach, 4th Edition,
Morgan Kaufmann, 2007
Temas
• Conceitos básicos
– estrutura de pipeline de instruções, peformance e harzards
• Exemplo: pipeline com 5 estágios para arquitetura RISC
• Hazards
– consequências para a performance
• Implementação
– controle e hazards
• Papel do conjunto de instruções
– Exceções precisas e imprecisas
• Instruções de ponto flutuante
– Exemplo: MIPS R4000/4400
• Escalonamento dinâmico
• Algoritmo de Tomasulo
Pipelining
• Técnica de implementação que explora o
paralelismo entre as etapas de execução das
instruções de uma sequência.
– Similar a uma linha de montagem
– Transparente para o programador
– Objetivo: aumentar o número de instruções
executadas por unidade de tempo
Definições
• Estágios (segmentos)
– Cada estágio é responsável por executar uma etapa da
instrução
– Uma instrução é passada através da sequência de
estágios para completar sua execução
– Ciclo do processador
• usualmente igual a 1 ou 2 ciclos de relógio
– Desafio de balancear os estágios
• Thoughtput ou produtividade
– Número de instruções executadas por unidade de
tempo
Comparações
• Pipeline x Implementação Multiciclo
– Multiplos ciclos para execução de uma instrução
– Aceleração : pipeline reduz o número médio de
ciclos por instrução (CPI)
– Condições ideais
• Instruções independentes e estágios balanceados
• Aceleração igual ao número de estágios
• Pipeline x Implementação uniciclo
– Aceleração: pipeline permite reduzir o ciclo de
relógio (CLK)
RISC
• Conjunto de instruções load-store
– projetado para simplificar a implementação da pipeline
• Operações ALU feitas sobre registradores
– Valor armazenado em todos os bits (32 ou 64 bits)
• Instruções de acesso à memória
– Load e Store
• entre registrador e memória
• Podem envolver somente parte de um registrador
• Formato de instruções
– Poucos formatos
– Geralmente, todas as instruções tem o mesmo tamanho
MIPS64
• Versão 64 bits do conjunto de instruções MIPS
– D no início ou no final das instruções
• 32 registradores com 64 bits
– R0 = zero
• Instruções com 32 bits
MIPS: Formatos de Instruções
MIPS64: Classes de instruções
• ALU
– DADD, DSUB, AND, OR, DADDI, DADDU, DADDIU,...
– I para instruções com valores imediatos de 16 bits
– U para instruções sobre representação sem sinal
» Não geram exceção de overflow
• Load e Store
– Entre registrador e memória
– Endereço = base (registrador) + offset (imediato, 16 bits)
– LD, SD para mover 64 bits entre registrador e memória
• Desvio condicional e Incondicional
– Condicional (Branch)
» Condição: comparação entre registradores e com zero (nos
exemplos, somente igualdade)
» Destino: offset de 16, com sinal, somado ao PC
– Incondicional (Jump) (não aparece nos exemplos)
– Destino: várias formas de endereçamento com PC
ALU
Load , Store
Desvios
RISC: Implementação Multiciclo-1
• IF (Instruction fetch)
• Leitura de Instrução na memória usando PC como
endereço, PC=PC+4
• ID (Instruction decode/Register fetch)
• Fixed-field decoding
• Decodifica instrução, leitura de registradores, extensão
de sinal de imediatos e offsets
• no caso de desvios: teste, cálculo do endereço destino
• **implementações de alta performance: concluir a
execução de instruções de desvio neste ciclo
RISC: Implementação Multiciclo-2

• EX: Execution/Effective address


• Operações distintas para instruções distintas
• ALU: realiza operação espeficada no opcode (reg op reg, reg
op imm)
• Load/Store: calcula endereço efetivo (registrador + offset)
• MEM: Memory access
• Load/Store: realiza acesso utilizando endereço efetivo
• WB:
• Atualiza registrador com o resultado de operação ALU ou
com o valor lido por Load
RISC: Avaliação da Implementação
Multiciclo
• Preliminar para implementação pipeline
• Número de ciclos por classe de instrução
• Desvios condicionais: 2
• ALU: 5
• Load: 5
• Store: 4
• Supondo que desvios e stores constituem 12%
e 10% das instruções executadas.
• CPI = 4,54
Pipeline
• Associe um estágio a cada ciclo da
implementação multiciclo
• Comece uma nova instrução a cada ciclo

Feito!! Ou quase...
Funcionamento Ideal

CPI = 1 !!
Mais detalhado...
Mesmo no funcionamento ideal...
• Instruções diferentes em cada estágio
– Solução: Armazene os resultados necessários para executar o
próximo ciclo de cada instrução
• Performance da memória...
– Solução: cache para poder manter a frequência alta
• Conflito entre leitura de dados e instruções
– Solução: um cache para dados outro para instruções
• PC para a leitura da próxima instrução
– Ok, resolvido. PC atualizado no primeiro estágio
• Leitura e Escrita de registradores no mesmo ciclo
– Não é um problema...
• E os devios?
Nova representação com
registradores de pipeline...
Performance da Implementação em Pipeline

• Latência
– Tempo de execução de uma instrução
– Ligeiramente maior que na implementação multiciclo devido ao
hardware de controle da pipeline.
– Entretanto, programas executam mais rapidamente..
• Limites para performance da pipeline
• Aumento da latência de instrução limita o número de
estágios da pipeline
• Dificuldades em dividir em estágios de igual duração
• Latência de registradores de pipeline e tempo de setup
• Desvio máximo das transições de relógio entre os
registradores de pipeline
Exemplo de Comparação
• Instruções executadas: ALU (40%), Desvios
(20%), Acesso à memória (40%)
• Implementação Multiciclo
– 5 ciclos para ALU e acessos a memória, 2 ciclos para
desvios
– Ciclo de relógio =1ns
 tempo médio por instrução = 4,4 ns
• Implementação Pipeline
– Ciclo de relógio = 1,2 ns (clock skew & setup time)

– Comparando = 4,4 ns/1,2ns =3,7


Hazards
• Combinações de instruções que podem parar
a execução do fluxo de instruções na pipeline
• Hazards estruturais
• Conflito no uso de recursos
• Hazards de dados
• Dependência de resultados de instruções anteriores
ainda em execução na pipelin
• Hazards de controle
• Instruções que alteram o PC, como desvios
Stall: Parando Fluxo de Instruções
• Técnica para resolução de hazards
– Neste livro
• Para a execução de uma instrução e das instruções
seguintes
• Deixa prosseguir as instruções que entraram antes na
pipeline
Hazards e Performance
• Tempo médio perdido em stalls por instrução
(em ciclos de relógio por instrução)
Pequeno cálculo com muitas hipóteses...
Exemplo de Hazard Estrutural
Resolvendo com stall
Impacto sobre a Performance de tratar
o hazard estrutural com stalls
• 40% das instruções constituem acessos à memória
• (período do )Clock to processador sem hazard
estrutural = 1,05 (clock com hazard)
• Para o processador com hazard
Resolvendo com mais “estrutura”
• Caches separados para instruções e dados
– Acesso em paralelo se torna possível não sendo
mais necessário parar a pipeline
Exemplo de Hazard de Dados
Como resolver a dependência de
dados?
• 1. Introduzir as paradas na pipeline (stalls)
– Muitos ciclos perdidos...
• 2. Outra possibilidade: verificar se os
resultados estão disponíveis nos registradores
de pipeline
Antecipação de Resultados para ALU
• Forwarding, bypassing, short-circuit
• 1. Operando da ALU pode vir dos registradores
– ID/EX
• funcionamento normal, lido do arquivo de registradores
– EX/MEM
• resultado da instrução anterior
– MEM/WB
• resultado de duas instruções atrás

• 2. a lógica de antecipação detecta que o operando de


uma instrução se encontra numa instrução anterior na
pipeline e seleciona o valor atualizado para o dado
Resolvendo as dependência de dados
através de antecipação
Antecipação de dado para cálculo de
endereço (resolvido!)
Necessidade de paradas da pipeline
Resolvendo a dependência de dados
com stall
Hazards de controle
• Desvios: Endereço da próxima instrução a ser
executada não é conhecido no estágio IF...
– Desvio efetuado: próxima instrução no endereço
de desvio
• Desvios incondicionais são sempre efetuados...
– Desvio não-efetuado: próxima instrução é a
instrução seguinte em PC+4
• Uma solução
– Manter o valor de PC+ 4 por mais um ciclo
Repetição do estágio IF quando o endereço da
próxima instrução for conhecido (equivalente a stall)
Redução da penalidade de associada
aos desvios
• Métodos de previsão de desvios
– Previsão de desvio satisfeito
– Previsão de desvio não-satisfeito
Previsão de desvio não-satisfeito
Mais uma técnica: Desvio Adiado
• Funciona bem em pipelines de 5 estágios e
desvios resolvido logo no segundo estágio

•Branch slot
preenchido com uma instrução que possa ser executada
no caso de desvio satisfeito ou não-satisfeito.
Desvio Adiado
Desvio Adiado: encontrando a instrução
para executar depois do desvio
Ainda mais...
• Encontrar a instrução para preencher o slot é
complicado....
– Compiladores com otimização
– Previsão é imperfeita
• Mais um tipo de instrução
– “desvios com cancelamento” (canceling or
nullifying branch)
• Inclui a previsão na instrução de desvio
• Transforma a próxima instrução em no-op caso a
previsão esteja incorreta.
Performance da implementação Pipeline levando em
conta os hazards de controle (desvios)
Exemplo
• Pipeline com mais estágios
• Cálculo do endereço: estágio 3
• Avaliação da condição de desvio: estágio 4
Mesmo Exemplo...
Resposta parcial...
Para a próxima aula
• Ler a seção A.3 (implementação de pipeline
Implementação Multiciclo (IF e ID)
5 ciclos de instruções MIPS

1. IF

2.ID
Implementação Multiciclo: EX

3. EX
– Acesso à memória

– ALU

– ALU com endereçamento imediato

– Desvio condicional (branch)


Implementação Multiciclo: MEM
4. MEM
– Acesso à memória

– Desvio Condicional
Implementação Multiciclo: WB
• 5. WB
– ALU

– ALU com imediato

– Load
Implementação Multiciclo
Implementação Pipeline-1
Implementação Pipeline-2: desvios resolvidos ID
(Falta um multiplexador! Outros probemas?)
Funcionamento da Pipeline da MIPS
Hazard de dados
Antecipação de dados
Antecipação de operandos para a ALU
(no estágio EX)
Parada (stall) de um ciclo

Introduzir zeros nos registradores ID/EX


Manter o conteúdo de IF/ID
Repetir a leitura da instrução em IF
Desvios
• Novamente é preciso repetir a leitura de
instrução quando o desvio é efetivado...
Hazard de Dados
mais uma classificação
• Critério
– ordem de leitura e escrita por instruções, que deve ser mantida
pela pipeline para funcionamento correto
• RAW
– inst. I + k tenta ler antes da escrita por inst. i (valor errado)
• WAW
– inst. I + k tenta escrever antes da escrita por inst. i (valor final
errado)
• WAR
– inst. I + k tenta escrever antes da leitura por inst. i (valor errado)
» Não ocorre na pipeline MIPS
• RAR
– Não existe!! Não é um hazard!!!
Mais desafios para implementação de
Pipelines de Instruções
• Exceções (ou interrupções ou falta)
– Desvio para um endereço que não faz parte de uma
instrução na pipeline
– Várias causas
• Requisição de um dispositivo de I/O
• Chamada ao sistema operacional por um programa
• Depuração de código (Tracing, Breakpoint)
• Overflow em aritmética inteira
• Aritmética de FP (valores fora da faixa, NAN)
• Page Fault (Dado ou instrução fora da memória principal)
• Acesso desalinhado
• Violação de proteção de memória
• Instrução inválida
• Problemas de hardware (por ex., detectados com códigos)
• Queda de energia
Classificação de exceções...
– Evento síncrono: sempre na mesma instrução
com dado na mesma posição de memória
Evento assíncrono: exceção geralmente pode ser
tratada após a execução da instrução.

– Requisitadas: Instrução no programa de usuário.


Pode ser tratada após o termino da instrução.
Forçadas: problemas de hardware fora de
controle do programador
Mais classes de exceções...
– Mascarável: reconhecimento do evento pode ser
desabilitado pelo usuário
Não-mascarável: geralmente eventos ligados ao
hardware
– Intra-intrução : eventos ocorrem no meio de
instruções e impedem o término de sua execução.
• Exceções síncronas causadas pela instrução
• Exceções assíncronas devidas ao mal funcionamento do
hardware causam o término do programa (catastróficas)
Inter-instrução: é possível completar a instução antes
de tratar a exceção
Mais uma classificação...
– Com término do programa: programa é encerrado
depois do evento de exceção
– Com retomada do programa: programa deve
retomar sua execução

– Mais difícil implementação: exceções intra-


instruções com retomada
• Envolve salvar o estado, sanar a causa e retomar a
execução!
• Pipeline reiniciável: presente nos computadores atuais
– Ausente nos computadores mais antigos
Suspendendo & Retomando a Execução

• Muito difícil: Exceção no meio da instrução (ex.:


falta de página no acesso a dados )
– Outras instruções estão executando na pipeline
• É preciso parar a pipeline salvando o estado do processador
– Por exemplo , transformando a instrução que causou a exceção
em no-op e também todas as instruções que se seguem na
pipeline
• Inserir um instrução de trap no estágio inicial (IF)
• Sanar a causa (carregar a página)
– Executar a instrução de trap
• Reiniciar a execução
– Reiniciando a instrução do fluxo de instruções (replicando os
valores de PC presentes na pipeline), instrução RFE do MIPS
Pipelines x Exceções
• Exceções Precisas
– Instruções anteriores aquelas que causou a
exceção são completamente executadas
– Instrução na qual ocorreu exceção e todas as
sucessivas não alteram o estado
• Exceções Imprecisas
– não é possível garantir que o estado não tenha
sido alterado...
Em sistemas reais
• Com pipelines para aritmética sobre inteiros
– Suporte a exceções precisas é mais simples
– Suporte à memória virtual, geralmente demanda
exceções precisas para falta de página

• Implementação de exceções precisas pode


usar recursos de hardware e software
Pipeline MIPS
• Exceções precisas
• Tratamento de exceções na mesma ordem que
ocorreriam num implementação sem pipeline
Exceções na Pipeline MIPS
Exemplos de Exceções – Pipeline para
Aritmética com Inteiros

•Podem ocorrer múltiplas exceções em um ciclo.


•Exceções podem ocorrer “fora de ordem”.
•Como implementar exceções precisas?
Pipeline MIPS: Tratamento de Exceções
– Para cada instrução: Vetor de exceções (Exeception status
vector)
– Marca exceções que ocorrem durante a execução da instrução
– Acompanha instrução passando pelos registradores de pipeline
– A partir do momento em que ocorre uma exceção, nenhuma
instrução pode escrever em registradores ou memória.
– Instrução de STORE: armazenamento em memória não é permitido quando
ocorre “falta de página”
– Exceções são conferidas quando a instrução chega ao início
do estágio WB
– Tratamento em ordem de ocorrência
– Exceções da instrução i são tratadas antes daquelas da instrução i+1
– Se houve uma exceção as mudanças de estado deveriam ser invalidadas.
» Graças ao bloqueio de escrita, não houve mudança...
Pontos que simplificam o projeto de
exceções precisas na máquina MIPS
• Um resultado por instrução
• Escrita no final da instrução
• Instruções que atingem o final do estágio MEM (ou o
início do WB) sem marca de exceção tem garantia de
término
• Portanto, somente instruções com garantia de término
(committed instructions) realizam escritas que alteram
estado.
• Garantia de término antes de alterações de
estado
ISA & Exceções-1
outras pipelines
• Instrução que modifica estado (registrador ou memória)
em estágios intermediários da pipeline
– Antes da garantia de término da instrução e predecessoras.
• Exemplo: auto-incremente IA-30
– Se a execução da instrução for descontinuada devido a uma
exceção...
• Sem suporte de hardware, exceção imprecisa...
– Duas alternativas
• Não permitir alterações no estado antes da garantia de término
– E as instruções dependentes? Atrasar a pipeline?
• Permitir alterações de estado, mas incluir hardware para
restabelecer o estado caso a instrução não termine
– Pipeline FP da MIPS
ISA & Pipeline & Exceções
outras pipelines
• Instrução que modificam a memória no meio
da execução
– String Copy no VAX e no IBM360
• Uso de “registradores de trabalho” são sempre
preservados no caso de exceção. Permite a continuar a
instrução a partir onde houve a exceção.
– Registradores de status (condition codes)
• Em especial em ISAs onde CC é modificado
implicitamente...
• Registrador de CC é considerado como um operando de
branches..
Pipeline da MIPS: Operações FP (multiciclo)
• Operações FP
– Se operações FP forem executadas em 1 ou 2 ciclos
• Ciclo longo demais...
– Alternativa: operações FP com maior número de ciclos
• Unidades funcionais específicas (+/-/convesão, mult., div.)
• Estágio EX repetido várias vezes para instruções FP...
– Unidades funcionais podem ou ser implementadas em pipeline...
• Stall em caso de hazard estrutural ou de dados
Pipeline MIPS com operações FP
Pipeline FP
(1 int., 4 FP+, 7 FPx, 1FP/)
Parâmetros para Pipeline com operações multiciclo

• Latência
– número de ciclos entre a instrução que produz um resultado e
a instrução que utiliza este resultado

• Intervalo de repetição ou iniciação


– Número de ciclos entre instruções do mesmo tipo
Possíveis Hazards?
Exemplo de operação-1
Controle da Pipeline FP
• Verifica hazards estruturais
• Unidade funcional ocupada?
» Somente para opearação de divisão
» Introduzir stalls
• Verifica hazards RAW
– Registradores origem ainda precisam ser alterados por instruções
anteriores
• Pode ser verificado no estágio ID
• Verifica hazards WAW
– Escrita de dados precisa ser feita na ordem correta
» Se instruções anteriores tem maior número de ciclos pode
haver necessidade de introduzir stalls ...
Exceções na Pipeline FP
• Término de instruções fora de ordem
• Podem causar exceções imprecisas, mesmo se não
existirem dependências
Quatro Estratégias-1
• Ignore: mantenha exceções imprecisas
• início dos anos 70
• Ainda utilizado em alguns supercomputadores
• Incompatível com uso de memória virtual e com o
padrão IEEE para ponto flutuante
• Dois modos de funcionamento
• (1) rápido
• (2)com exceções precisas
– Limita a superposição de instruções (1 instrução FP ativa de
cada vez)
Quatro Estratégias-2
• Manter buffer com resultados de uma instrução
até que as anteriores tenham terminado
– History file
• para valores alterados por instruções fora de ordem
– Future file
• Valores são alterados em ordem
Quatro Estratégias-3
• Guarda informação suficiente para completar
todas as instruções antes da primeira
instrução terminada antes da exceção.
Quatro Estratégias-4
• Somente iniciar a execução de uma instrução
quando for garantido que as instruções
anteriores tem “garantia de termino”

• Obter garantia de termino o mais cedo possível...


• Caso contrário, execução se torna mais lenta
Escalonamento da Pipeline de Instruções &
Arquiteturas RISC
• Conjunto de instruções RISC
– Projeto de pipeline da pipeline mais simples
– Facilitam o escalonamento
– Durante a compilação ou durante a execução (hardware)

• Exemplo: A+B =C
– Maior número de instruções na arquitetura RISC,
separando o acesso à memória da operação
aritmética permite um melhor escalonamento da
pipeline
Pipelines com escalonamento dinâmico de instruções

• Pipelines simples:
– instruções são lidas e começam sua execução
– se houver dependências, são introduzidos “stalls”
e todo o fluxo de instruções é atrasado.
• Pipeline com escalonamento dinâmico
– instruções seguintes podem continuar se não
houver problema...
– objetivo: aumento donúmero de instruções
executadas por unidade de tempo
Escalonamento Dinâmico
• Pontos básicos
– Decodificação dividida em dois “estágios
• Iniciar a execução (issue, ativar, lançar)
– Somente quando há unidades funcionais disponíveis
• Ler operandos
– com base na análise de dependências
– Não existe antecipação, operandos são lidos diretamente do
arquivo de registradores
– Várias unidades funcionais do mesmo tipo
– Várias operações em execução paralelamente
Escalonamento Dinâmico com
Scoreboarding (CDC 6600)
• Problemas de dependências de dados:
– anti-dependências
– RAW, WAW
Processador MIPS com Scoreboard
Duas etapas substituem o estágio ID
• 1. Issue (IS, lançamento)
• Verifca se instruções ativas precisam escrever operando
destino ( hazard WAW)
• Verifica se há unidade funcional disponível
• Em ordem (Buffer entre IF e IS)
• 2. Ler operandos
• Verifica se instruções ativas precisam escrever
operando origem (hazard RAW)
• Pode decidir passar instruções para execução fora de
ordem
Estágios EX e WB
• EX (execução)
– Executa a operação e envia sinal ao scoreboard
– Pode levar um ou mais ciclos
– depende da operação

• WB (escrita de resultados)
– Verifica hazards WAR
Exemplo
Execução controlada por Scoreboard-1
Execução controlada por Scoreboard-2
Execução controlada por Scoreboard-3
Neste ponto...
• Pipeline
• Hazards
– estrutural
– dados (RAW, WAW, WAR)
– Controle
• Técnicas de previsão de desvios
– Stall: parando a pipeline
• Exceções
– Precisas (computadores atuais)
• Aritmética de ponto flutuante padrão IEEE
• Memória virtual (exceção de falta de página)
• Pipelines com operaçõe multiciclo (em pipeline ou não)
• Escalonamento dinâmico
• Técnica Scoreboard

Anda mungkin juga menyukai