Aula 15: Ciclo de Execução e Introdução ao Pipeline
Diego Passos
Universidade Federal Fluminense
Na Última Aula. . .
Começamos a falar sobre as instruções de máquina.
▶ Operações simples que o hardware é capaz de executar.Programas executados por um computador são armazenados como sequências de
instruções na memória.
▶ Há um registrador especial chamado PC.
▶ Ele armazena o endereço da próxima instrução a ser executada. ▶ A cada nova instrução executada, PC é incrementado.
Na Última Aula. . . (II)
Discutimos tipos de instrução.
▶ Instruções aritméticas. ▶ Instruções lógicas.▶ Instruções de desvio condicional. ▶ Instruções de desvio incondicional. ▶ . . .
Vimos exemplos destes tipos de instrução na arquitetura MIPS.
▶ add.▶ beq.
▶ and.
Na Última Aula. . . (III)
Também vimos que instruções têm formatos específicos.
▶ Esquema de representação.▶ Define quais e como informações são guardadas na instrução.
Finalmente, discutimos os operandos de uma instrução.
▶ “Parâmetros” da operação a ser executada.
Ciclo de Execução de uma Instrução
Um processador funciona em ciclos.
▶ De tempos em tempos, ele executa a mesma sequência de passos. ▶ Potencialmente, com entradas diferentes.
▶ Manipulando as entradas, obtemos os resultados desejados.
Estes ciclos consistem na execução de instruções.
▶ As entradas são os dados.
▶ Mas também as instruções em si.
Composição (Básica) do Ciclo de Execução de uma Instrução
Vista na aula passada:
Buscar Instrução Interpretar Instrução Executar Instrução
Próxima instrução é buscada na memória.
Instrução é interpretada.
▶ i.e., reconhecem-se o tipo, os operandos, etc.
Ciclo de Execução: Mais Detalhadamente
Partes do ciclo mostrado no slide anterior são “complexas”.
▶ Interpretar instrução.▶ Executar instrução.
Há vários detalhes que ocorrem dentro de cada uma.
Ciclo de Execução: Mais Detalhadamente (II)
Início
Decodificar a Operação a
Ser Realizada Término
Buscar Instrução na Memória Buscar Operandos (Se Houver) Executar a Operação Armazenar Resultado (Se Houver)
Há fases de Busca de Operandos e Armazenamento de Resultado.
▶ No esquema anterior, faziam parte de Interpretar Instrução e Executar Instrução.
Nos próximos slides, discutiremos cada uma destas fases.
Buscar Instrução
Primeiro passo na execução da instrução:
▶ Descobrir qual ela é.Instruções são armazenadas na MP.
Processador só consegue manipular informações em seus registradores.
▶ Logo, antes de mais nada, processador precisa trazer instrução da MP para algum registrador. ▶ Não um registrador qualquer: o IR.
⋆ Instruction Register.
Em algumas arquiteturas, as instruções têm comprimento fixo.
▶ e.g., MIPS, com instruções de 32 bits.Em outras, comprimento pode ser variável.
▶ e.g., x86, com instruções de até 15 bytes.Buscar Instrução (II)
A busca de uma instrução, portanto, é basicamente uma leitura da memória.
Como o processador sabe o endereço a ser lido?
▶ Já discutido anteriormente.
▶ Há um outro registrador especial que o armazena. ▶ O Program Counter, ou PC.
⋆ Outros nomes: IC (Instruction Counter ), IP (Instruction Pointer ).
PC tem que ser constantemente atualizado.
▶ Para apontar para a próxima instrução a ser executada.
▶ Normalmente, instruções são executadas na ordem em que aparecem em memória. ▶ Logo, após a leitura da instrução atual, PC já é incrementado.
Decodificar a Instrução
Objetivo geral: entender a instrução.
▶ i.e., entender o que a sequência de bits representa.
Envolve uma série de sub-tarefas:
▶ Qual é a operação a ser realizada? ▶ Qual é o formato da instrução? ▶ Onde estão os operandos?Decodificar a Instrução (II)
0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 Opcode: 000000(2) = 0(10) Significado: Operação Lógica ou Aritmética Operando 1: 10001(2)=17(10) Significado: Primeiro Operando está no Reg. 17 Operando 2: 10010(2)=18(10) Significado: Segundo Operando está no Reg. 18 Resultado: 01000(2)=8(10) Significado: Armazenar Resultado no Reg. 8 Campo não Utilizado Nesta Instrução (deve sempre ser 0) Função: 100000(2)=32(10) Significado: Operação de Soma 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0Decodificar a Instrução (III)
Primeiro passo, normalmente, é reconhecer o opcode.
▶ Dado o opcode, geralmente, o restante do formato da instrução é conhecido pelo processador. ▶ i.e., processador sabe como tratar os demais bits da instrução.
▶ Adicionalmente, opcode define o tipo de operação a ser realizada.
0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 Opcode: 000000(2) = 0(10) Significado: Operação Lógica ou Aritmética Formato: R Operando 1: Registrador Operando 2: Registrador Resultado:
Decodificar a Instrução (IV)
Uma vez reconhecido o formato da instrução, pode-se descobrir a localização dos
operandos.
▶ Podem estar já em registradores.
▶ Podem ser constantes numéricas especificadas na própria instrução. ▶ Podem ser endereços de memória.
O opcode da instrução determina a semântica dos bits dos operandos.
▶ i.e., o que fazer com eles para encontrar os operandos.▶ e.g., usar como identificador de um registrador, somar com uma constante para obter um
Busca de Operandos
Note que nem toda instrução possui operandos.
Exemplo: instrução nop no x86.
▶ No Operation.
▶ Instrução que não faz “nada”.
⋆ Embora cause efeitos colaterais, como incrementar o PC.
Mas na enorme maioria dos casos, instruções possuirão ao menos um operando.
▶ Sempre verdade no MIPS, por exemplo.Busca de Operandos (II)
A busca de operandos consiste na tarefa de encontrar os valores sob os quais será
realizada a operação.
Os respectivos bits são passados como entrada de componentes internos do processador.
▶ Como somadores, deslocadores, multiplexadores, . . .Um caso comum ocorre quando operando está na MP.
▶ Endereço é dado por alguma combinação de valores em registradores e constantes específicas na própria instrução.
Busca de Operandos (III)
1 0 0 1 Registrador 0 0 0 1 1 Registrador 1 Seletor Mux Somador 0 1 Outro DadoNote que mesmo para operandos em
registradores, há algo a se fazer nesta
etapa.
▶ Bits do registrador especificado devem ser “conectados” ao(s) componente(s) adequado(s).
Busca de Operandos (IV)
1 0 0 1 Registrador 0 0 0 1 1 Registrador 1 Seletor Mux Somador 0 1 Imediato (Instrução) Endereço do OperandoNote ainda que certos casos de busca de
operandos requerem a execução de algum
tipo de processamento.
▶ Comumente, somas.
▶ Algumas vezes deslocamentos (multiplicações por potências de 2).
Exemplo: instrução load word no MIPS.
▶ Endereço: valor de registrador + imediato.
Execução da Operação
Uma vez que os bits dos operandos estejam “conectados” aos componentes corretos do
processador, a instrução é executada.
Esta execução geralmente consiste em algum tipo de operação lógica-aritmética.
▶ Somar dois números.▶ Calcular um xor bit a bit. ▶ . . .
Em alguns casos particulares, a operação pode ser simplesmente não fazer nada com o
dado.
▶ e.g., deixar o dado passar.
Execução da Operação (II)
Esta fase também consiste em “configurar” alguns componentes da CPU.
Determinados componentes precisam de informações adicionais.
▶ Linhas de controle.
▶ Especificam como o componente deve agir sobre os dados.
Exemplos clássicos:
▶ Um multiplexador: sinal na linha de controle seleciona entre primeira e segunda entrada. ▶ Unidade lógica-aritmética: sinal nas linhas de controle selecionam operação lógica aritmética
a ser realizada.
Os sinais destas linhas de controle são geralmente determinados a partir de campos da
instrução.
Armazenamento dos Resultados
Etapa similar à de busca de operandos.
▶ Mas no sentido inverso.▶ i.e., ao invés de ler valores, estes são armazenados em local apropriado.
Este “local” pode ser um registrador ou algum endereço da MP.
▶ Assim como ocorre na busca de operandos, opcode e formato da instrução determinam o local.
Também de forma similar, pode ser necessário realizar “processamento” para determinar
exatamente este local.
▶ i.e., algum tipo de conta.
▶ Exemplo clássico: instruções de transferência para a MP do MIPS. ⋆ Soma de registrador com imediato.
Armazenamento dos Resultados
Note ainda que certas instruções não geram dados a serem armazenados.
▶ Ao menos não na MP ou em registradores de propósito geral.▶ e.g., instruções de desvio.
Ciclos de CPU vs. Instruções
Processadores operam em ciclos.
Duração de um ciclo do processador é determinada pela frequência do seu clock.
▶ Clock de 1 GHz rightarrow 1 bilhão de ciclos por segundo.Pergunta: quantas instruções um processador operando a 1 GHz de clock executa
por segundo?
▶ Resposta: depende!
▶ Pode ser exatamente 1 bilhão. ▶ Pode ser menos.
Ciclos de CPU vs. Instruções
Processadores operam em ciclos.
Duração de um ciclo do processador é determinada pela frequência do seu clock.
▶ Clock de 1 GHz rightarrow 1 bilhão de ciclos por segundo.Pergunta: quantas instruções um processador operando a 1 GHz de clock executa
por segundo?
▶ Resposta: depende!
▶ Pode ser exatamente 1 bilhão. ▶ Pode ser menos.
Ciclos de CPU vs. Instruções
Por que depende?
▶ É possível projetar um processador que execute exatamente uma instrução a cada ciclo. ⋆ O que veremos nas próximas aulas.
▶ Mas há vantagens em quebrar a execução de uma instrução em vários ciclos de clock. ⋆ Reutilização de componentes.
⋆ Permitir que instruções mais simples levem menos tempo. ⋆ Permitir paralelismo.
Voltaremos a este ponto em aulas posteriores.
▶ Mas por hora, o foco será no último ponto.Pipeline: Uma Analogia
Vamos usar uma analogia
1para entender o conceito de Pipeline (Patterson):
▶ Suponha uma república de estudantes com 4 pessoas: Ann, Brian, Cathy, Dave. ▶ Toda segunda-feira à noite, eles lavam roupa.
▶ Cada um possui um conjunto de roupas sujas. ⋆ Aproximadamente a mesma quantidade de roupas. ▶ Processo composto por 4 etapas:
⋆ Máquina de lavar: 30 minutos. ⋆ Secador/passar roupas: 30 minutos. ⋆ Dobrar roupas: 30 minutos. ⋆ Guardar roupas: 30 minutos.
Pipeline: Uma Analogia (II)
Solução sequencial:
▶ Cada pessoa aguarda a conclusão da anterior.
3 0
B
C
D
A
Time
3 0 3 0
3 0
3 0
3 0
3 0
3 0
3 0 3 0
3 0
3 0
3 0 3 0
3 0
3 0
6 PM
7
8
9
1 0
1 1
1 2
1
2 AM
Ordem das TarefasPipeline: Uma Analogia (III)
Solução alternativa:
▶ A medida que uma pessoa termina uma fase, a seguinte inicia aquela fase do seu conjunto de roupas.
1 2
2 AM
6 PM
7
8
9
1 0
1 1
1
Time
B C D A3 0
3 0 3 0
3 0
3 0
3 0 3 0
Ordem das TarefasPipeline: Uma Analogia (IV)
Na solução original, cada pessoa demora 4
× 30 = 120 minutos para lavar sua roupa.
Na solução alternativa também.
Mas o tempo total na solução alternativa é muito menor:
▶ 210 minutos, contra 480 minutos.Em outras palavras:
▶ O tempo de resposta para uma única tarefa (pessoa) não mudou.
▶ Mas a vazão do sistema (pessoas atendidas por unidade de tempo) aumentou 118%.
Maior eficiência vem do uso de pipeline.
▶ i.e., executar etapas de tarefas diferentes em paralelo.
Ciclo de Execução de Instrução e Pipeline
Podemos aplicar a mesma técnica para a execução de instruções em uma CPU?
▶ Sim, desde que possamos quebrar a tarefa de execução das instruções emsub-tarefas independentes.
Podemos, por exemplo, considerar as subtarefas como as etapas do ciclo de execução de
uma instrução.
▶ Busca da instrução. ▶ Decodificação. ▶ Busca dos operandos. ▶ Execução.
▶ Armazenamento do Resultado.
Assumindo, é claro, que não haja dependência entre as etapas de instruções
subsequentes.
Ciclo de Execução de Instrução e Pipeline: Eficiência
No jargão de arquitetura de computadores, cada “subtarefa” é chamada de estágio do
pipeline.
Considerando um pipeline com 5 estágios, o estado do pipeline ao longo do tempo:
S1:
S2:
S3:
S4:
S5:
1
2
3
4
5
6
7
8
Tempo1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
1
2
3
4
5
6
1
2
3
4
5
1
2
3
4
...
Ciclo de Execução de Instrução e Pipeline: Eficiência (II)
Com 5 estágios, primeira instrução demora 5 ciclos de clock.
Após este tempo, a cada 1 ciclo, temos mais uma instrução sendo concluída.
Para executar n instruções, precisamos de t = 5 + n
− 1 = n + 4 ciclos.
▶ Logo, processador executa n
n+4 instruções por ciclo de clock. ▶ Para n grande, isso é praticamente 1.
Eficiência não é perfeita porque os k primeiros ciclos são gastos enchendo o pipeline.
▶ Onde k é o número de estágios.Pipeline vs. Monociclo
Na conta anterior, verificamos que com o pipeline quase conseguimos atingir uma
instrução por ciclo.
▶ Então qual é a vantagem de usar um pipeline com vários estágios ao invés de uma solução que faz tudo em um ciclo só?
A vantagem está na duração do ciclo.
▶ Como, individualmente, cada estágio do pipeline faz algo “simples”, a duração de um ciclo pode ser curta.
▶ Na implementação monociclo, cada ciclo é mais complexo, longo.
Exemplo: o que é melhor?
▶ Quase uma tarefa por ciclo, com ciclo de 1 ns.
Pipeline e Desvios
A técnica de pipeline é efetiva, desde que mantenhamos o pipeline cheio.
▶ i.e., quando uma instrução está no estágio i , a próxima está no estágio i + 1.Mas como o processador sabe qual é a próxima instrução?
▶ A princípio, uma tarefa fácil.▶ Programas são sequências de instruções armazenadas em memória. ⋆ Também de forma sequencial.
Mas há um caso especial: as instruções de desvio.
▶ Próxima instrução pode estar em alguma posição diferente.Pipeline e Desvios (II)
Suponha que uma instrução de desvio chegue ao último estágio do pipeline.
Neste ponto, a CPU descobre que será realizado um desvio (ao invés da execução
sequencial).
O que fazer?
▶ Outras instruções já estão no pipeline. ▶ Elas não deveriam ser executadas. ▶ Solução: flush do pipeline.
⋆ Esvaziamos o pipeline, não permitindo a conclusão das demais instruções. ⋆ Recomeçamos com o pipeline vazio a partir do endereço do desvio.
Pipeline e Desvios (III)
S1:
S2:
S3:
S4:
S5:
1
2
3
4
5
6
7
8
Tempo
1
2
3
4
5
6
11 12
1
2
3
4
5
11
1
2
3
4
1
2
3
1
2
...
Flush
Pipeline e Desvios (IV)
O flush em um pipeline impede que executemos instruções erradas.
▶ Mas desempenho é prejudicado.▶ Enfrentamos novamente o custo inicial de encher o pipeline.
Lembre-se: há dois tipos de desvios diferentes.
▶ Desvios condicionais. ▶ Desvios incondicionais.
No caso de desvios incondicionais, podemos amenizar o problema:
▶ Se conseguirmos detectar o desvio cedo, precisamos descartar apenas um subconjunto das instruções já executadas.
Pipeline e Desvios (V)
Mas e para desvios condicionais?
▶ Se soubéssemos cedo o resultado da condição, poderíamos usar a mesma estratégia dos desvios incondicionais.
▶ Mas isso geralmente não é possível. ⋆ Desvios condicionais são mais complexos.
⋆ Precisam chegar a estágios finais do pipeline para sabermos seu resultado.
Não há solução, então?
Predição de Desvios
Processadores modernos geralmente possuem um branch predictor.
▶ Preditor de desvios.▶ Tenta “advinhar” o resultado de uma instrução de desvio condicional. ▶ Baseado em histórico.
Quando CPU decta (cedo) a execução de uma instrução de desvio condicional:
▶ Preditor prevê se desvio ocorrerá ou não.▶ Se preditor diz que desvio não ocorrerá, próxima instrução é colocada no pipeline. ▶ Caso contrário, instrução do endereço de destino é utilizada.
Se o preditor acerta, pipeline continua cheio.
Se o preditor erra, temos que fazer um flush.
Exercício
Suponha um processador com pipeline de 5 estágios.
▶ Em instruções de desvio condicional, o preditor sempre prevê que o salto não ocorrerá. ▶ Assuma que ao final do quarto estágio a CPU é capaz de determinar o resultado de
instruções de desvio condicional.
▶ Caso o desvio seja tomado, é preciso dar um flush nas três instruções nos estágios anteriores. ▶ Caso contrário, o pipeline continua cheio.
Determine o número médio de instruções executadas por ciclo de clock considerando:
▶ 20% das instruções são de desvio condicional.▶ 30% destes desvios ocorrem.