2.8 Paralelismo Temporal e Espacial Acima do paralelismo no nível de bit, como aquele presente em uma ALU de mais de um bit, temos o Paralelismo no Nível Instrução (Instruction Level Paralelism – ILP). Existem dois tipos básicos de ILP: temporal e espacial. Pipelining realiza ILP temporal. Refere-se à segmentação da execução de uma instrução em vários sub-processos que são executados por unidades autônomas dedicadas (estágios do pipeline). Instruções sucessivas podem ser executadas em um modo análogo à montagem de carros em uma fábrica. Usando pipelining, várias instruções podem ser executadas em paralelo, cada uma em um estágio diferente do pipeline, e cada uma em uma fase diferente de sua execução. Fetch Decode Memory Access Execute Write Back (a) Clock Cycle 0 1 2 3 4 5 7 Fetch Stage Decode Stage Execute Stage M. Access Stage W. Back Stage I1 I2 I1 I3 I2 I1 I4 I3 I2 I1 I5 I4 I3 I2 I1 I6 I5 I4 I3 I2 I7 I6 I5 I4 I3 (b) Porque as operações realizadas por cada estágio do pipeline são simples, cada um destes estágios pode ser implementado com hardware simples, o que resulta em uma máquina capaz de funcionar com uma alta frequência de clock. Teoricamente, quanto mais profundo o pipeline (número maior de etapas de pipeline), mais rápida a máquina; mas é óbvio que existem limitações práticas a esta regra. A primeira máquina pipelined de propósito geral foi a IBM 7030 Stretch [Bloch59]. Após a IBM Stretch, a maioria das máquinas high-end tem usado alguma forma de pipelining. aula6.doc 1 de 26 ILP espacial é aquele presente em processadores com múltiplas unidades funcionais. Refere-se à execução de mais de uma instrução simultaneamente em diferentes unidades funcionais do processador. Paralelismo temporal e espacial podem estar presentes ao mesmo tempo em uma máquina. Na verdade, poucos anos após a IBM 7030 Stretch ter sido construída, a CDC6600 foi produzida com pipelining e várias unidades funcionais que podiam funcionar em paralelo. Look-Ahead Hardware FU Instruction Memory Fetch Decode Hardware Decode Dispatch Hardware Dispatch IW & Issue Hardware Issue FU FU FU FU Execute Write Back Result Buses Data Memory (b) (a) aula6.doc 2 de 26 2.9 Pipelining A figura abaixo mostra uma versão simplificada de uma possível implementação de um processador MIPS de 64 bits. Nesta implementação, todas as instruções executam em um ciclo de clock. Instruction Fetch Instr. Decode Reg. Fetch Execute Addr. Calc Adder 4 Next SEQ PC Zero? RS1 L M D MUX Data Memory ALU Imm MUX MUX RD Reg File Memory Address RS2 Write Back MUX Next PC Memory Access Sign Extend WB Data A ISA MIPS 64 possui um conjunto de instruções um pouco maior que a ISA MIPS 32. Isso explica o controle do MUX que define o próximo valor de PC na figura acima. aula6.doc 3 de 26 Na figura abaixo á apresentado conjunto de instruções da MIPS 64. aula6.doc 4 de 26 A arquitetura anterior pode ser implementada usando pipelining como abaixo. Execute Addr. Calc Instr. Decode Reg. Fetch Next SEQ PC Next SEQ PC Adder 4 Zero? RS1 MUX MEM/WB Data Memory EX/MEM ALU MUX MUX ID/EX Imm Reg File IF/ID Memory Address RS2 Write Back MUX Next PC Memory Access WB Data Instruction Fetch Sign Extend RD RD RD Com a implementação acima, a cada ciclo de clock, as instruções avançam de um dos registradores em verde para o outro. 1. Inicialmente, no primeiro estágio, temos apenas o endereço da instrução (Address) em PC. 2. No estágio seguinte, temos a instrução e seu endereço no registrador IF/ID – este registrador demarca a saída do estágio de Fetch e a entrada do estágio de Decode do pipeline. 3. No terceiro estágio, a instrução, seu endereço e os registradores que ela endereça são escritos no registrador ID/EX - note que, mesmo que a instrução não precise ler os registradores, ainda assim eles são lidos para simplificar o hardware. 4. No quarto estágio, a operação que a instrução demandar da ALU é realizada e: a. Se a instrução for de desvio, o PC é atualizado e a instrução terminada (é enviado um código “não faça nada” para o próximo estágio). b. Se a instrução for de outro tipo, ela e o resultado da operação realizada pela ALU são transferidos para o próximo estágio. 5. No quinto estágio, se a instrução apenas envolver uma operação da ALU, seu resultado é escrito no banco de registradores. Caso contrário, a instrução é de acesso à memória e este acesso é feito. Caso a instrução seja de leitura na memória, o dado lido é escrito no banco de registradores aula6.doc 5 de 26 A Figura abaixo ajuda a visualizar melhor a evolução da execução das instruções no pipeline. Na figura, a execução de uma sequencia de instruções (no lado direito) pode ser analisada a cada ciclo de clock (colunas); isto é, podemos visualizar onde cada instrução estará no pipeline a partir do ciclo onde a primeira entra no pipeline (cycle 1). Quando o pipeline está cheio, 5 instruções estão sendo executadas em paralelo. Time (clock cycles) O r d e r Reg DMem Reg DMem Reg ALU Ifetch DMem ALU Reg Ifetch ALU I n s t r. ALU Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Cycle 7 Ifetch Ifetch Reg Reg Reg DMem Reg A cada ciclo todas as instruções no pipeline se movem, avançando de um estágio do pipeline. A figura abaixo mostra a execução de uma sequencia de instruções no pipeline. Time (clock cycles) and r7,r8,r9 or r10,r11,r12 Xor r13,r14,r15 Ifetch DMem Reg DMem Ifetch Reg DMem Ifetch Reg DMem Ifetch Reg ALU sub r4,r5,r6 Reg ALU Ifetch ALU O r d e r add r1,r2,r3 WB ALU I n s t r. MEM ALU IF ID/RF EX Reg Reg Reg Reg DMem aula6.doc Reg 6 de 26 Na figura acima, não há dependências entre as instruções, mas elas podem ocorrer, como no caso abaixo. Ifetch and r6,r1,r7 or r8,r1,r9 xor r10,r1,r11 DMem Reg DMem Ifetch Reg DMem Ifetch Reg DMem Ifetch Reg ALU sub r4,r1,r3 Reg ALU Ifetch ALU O r d e r add r1,r2,r3 WB ALU I n s t r. MEM ALU IF ID/RF EX Reg Reg Reg Reg Reg DMem Na figura acima, três instruções têm sua execução afetada pela necessidade do dado produzido pela primeira (r1). Ou seja, elas possuem dependência de dados com a primeira. Existem três tipos de dependência de dados: dependência verdadeira (read after write – RAW), anti dependência (write after read – WAR), e dependência de saída (write after write – WAW). Outro tipo de dependência importante é a dependência de controle. Estes quatro tipos de dependência são ilustrados na tabela abaixo. I: add r1,r2,r3 J: sub r4,r1,r3 I: sub r4,r1,r3 J: add r1,r2,r3 K: mul r6,r1,r7 Dependência Verdadeira (RAW) Anti Dependência (WAR) I: sub r1,r4,r3 J: add r1,r2,r3 K: mul r6,r1,r7 Dependência de Saída (WAW) 10: beq r1,r3,36 14: and r2,r3,r5 18: or r6,r1,r7 22: add r8,r1,r9 36: xor r10,r1,r11 Dependência de Controle aula6.doc 7 de 26 No exemplo de dependência verdadeira de dados, as instruções I e J não podem ser executadas em paralelo nem fora de ordem, já que a instrução J precisa do conteúdo de r1, que será produzido pela instrução I. No exemplo de anti dependência, dependendo do hardware I e J podem até ser executadas em paralelo (se os dados forem lidos no início do ciclo e escritos no final), mas não fora de ordem. No exemplo de dependência de saída, I e J não podem ser executadas em paralelo ou fora de ordem. No exemplo de dependência de controle, vemos que as instruções de número 14, 18 e 22 só devem ser executadas se o desvio (beq) não for tomado: elas possuem, então, dependência de controle com relação à instrução 10 (beq). Em máquinas pipeline como as apresentadas, anti dependências e dependências de saída não causam problemas, mas dependências verdadeiras e dependências de controle precisam ser tratadas. Na figura abaixo, o dado produzido pela primeira instrução precisa ser, de algum modo, comunicado para as instruções que precisam dele em estágios anteriores do pipeline. or r8,r1,r9 xor r10,r1,r11 Reg DMem Ifetch Reg DMem Ifetch Reg DMem Ifetch Reg ALU and r6,r1,r7 Ifetch DMem ALU sub r2,r1,r3 Reg ALU O r d e r add r1,r2,r3 Ifetch ALU I n s t r. ALU Time (clock cycles) Reg Reg Reg Reg DMem aula6.doc Reg 8 de 26 Uma técnica conhecida como forwarding pode ser empregada para resolver o problema de dependências verdadeiras dentro de pipeline. A figura abaixo ilustra como a técnica forwarding resolve o problema de dependências de dados verdadeiras dentro do pipeline. NextPC mux MEM/WR EX/MEM ALU mux ID/EX Registers Data Memory mux Immediate O circuito de forwarding envia os dados necessários para cada estágio do pipeline conforme necessário. A figura abaixo mostra exemplos, inclusive um de um lw com um sw. or r8,r6,r9 xor r10,r9,r11 Reg DMem Ifetch Reg DMem Ifetch Reg DMem Ifetch Reg ALU sw r4,12(r1) Ifetch DMem ALU lw r4, 0(r1) Reg ALU O r d e r add r1,r2,r3 Ifetch ALU I n s t r. ALU Time (clock cycles) Reg Reg Reg Reg DMem aula6.doc Reg 9 de 26 Contudo, há casos como o abaixo que não tem solução e uma “bolha” tem que ser inserida no pipeline. and r6,r1,r7 or DMem Ifetch Reg DMem Reg Ifetch Reg DMem Reg Ifetch r8,r1,r9 Reg ALU O r d e r sub r4,r1,r6 Reg ALU lw r1, 0(r2) Ifetch ALU I n s t r. ALU Time (clock cycles) Reg DMem Reg Na figura acima, o dado do lw só é produzido muito tarde para ser forwarded (não pode haver forwarding para traz...). A figura abaixo mostra a bolha. and r6,r1,r7 or r8,r1,r9 Reg DMem Ifetch Reg Bubble Ifetch Bubble Reg Bubble Ifetch Reg DMem Reg Reg DMem ALU sub r4,r1,r6 Ifetch ALU O r d e r lw r1, 0(r2) ALU I n s t r. ALU Time (clock cycles) aula6.doc Reg DMem 10 de 26 As figuras a seguir mostram a execução de uma sequencia de instruções sem dependência de dados: Determinou o endereço de A A 06 - add r1,r2,r3 05 - xor r11,r12,r13 Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Sign Extend RD Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 MUX MUX Imm Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 02 - and r2,r3,r4 Zero? RS1 RS2 03 - or r5,r6,r7 MUX Next PC 04 - sub r8,r9,r10 WB Data Ciclo 6 RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r3,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 1 Determinou o endereço de A A 07 - and r2,r3,r4 06 - add r1,r2,r3 Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 Imm MUX MUX Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 03 - or r5,r6,r7 Zero? RS1 RS2 04 - sub r8,r9,r10 MUX Next PC 05 - xor r11,r12,r13 WB Data Ciclo 7 Sign Extend RD RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r3,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 2 aula6.doc 11 de 26 Determinou o endereço de A A 08 - or r5,r6,r7 07 - and r2,r3,r4 Next SEQ PC Next SEQ PC Adder 4 Zero? RS1 MUX MEM/WB Data Memory Sign Extend RD Instr. 05 – xor r11,r12,r13 EX/MEM Instr. 04 – sub r8,r9,r10 ALU Imm Instr. 03 – or r5,r6,r7 MUX MUX Instr. 02 – and r2,r3,r4 ID/EX Instr. 01 – add r1,r2,r3 Reg File IF/ID Memory Address RS2 05 - xor r11,r12,r13 04 - sub r8,r9,r10 MUX Next PC 06 - add r1,r2,r3 WB Data Ciclo 8 RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r3,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 3 Determinou o endereço de A A 08 - or r5,r6,r7 09 - sub r8,r9,r10 Next SEQ PC Next SEQ PC Adder 4 Zero? RS1 MUX MEM/WB Data Memory Instr. 05 – xor r11,r12,r13 EX/MEM Instr. 04 – sub r8,r9,r10 Imm ALU Instr. 03 – or r5,r6,r7 MUX MUX Instr. 02 – and r2,r3,r4 ID/EX Instr. 01 – add r1,r2,r3 Reg File IF/ID Memory Address RS2 06 - add r1,r2,r3 05 - xor r11,r12,r13 MUX Next PC 07 - and r2,r3,r4 WB Data Ciclo 9 Sign Extend RD RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r3,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 4 aula6.doc 12 de 26 Determinou o endereço de A A 09 - sub r8,r9,r10 10 - xor r11,r12,r13 Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 Imm MUX MUX Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 06 - add r1,r2,r3 Zero? RS1 RS2 07 - and r2,r3,r4 MUX Next PC 08 - or r5,r6,r7 WB Data Ciclo 10 Sign Extend RD RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r3,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 5 aula6.doc 13 de 26 As figuras a seguir mostram a execução de uma sequencia de instruções com dependência de dados e sem forwarding: Determinou o endereço de A Com dependência de dados 06 - add r1,r2,r3 05 - xor r11,r12,r13 Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Sign Extend RD Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 MUX MUX Imm Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 02 - and r2,r3,r4 Zero? RS1 RS2 03 - or r5,r6,r7 MUX Next PC 04 - sub r8,r9,r10 WB Data A Ciclo 6 RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 6 Determinou o endereço de A A 07 - and r2,r1,r4 06 - add r1,r2,r3 Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 Imm MUX MUX Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 03 - or r5,r6,r7 Zero? RS1 RS2 04 - sub r8,r9,r10 MUX Next PC 05 - xor r11,r12,r13 WB Data Ciclo 7 Sign Extend RD RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 7 aula6.doc 14 de 26 Determinou o endereço de A A 08 - or r5,r6,r7 07 - and r2,r1,r4 Next SEQ PC Next SEQ PC Adder 4 Zero? RS1 MUX MEM/WB Data Memory Sign Extend RD Instr. 05 – xor r11,r12,r13 EX/MEM Instr. 04 – sub r8,r9,r10 ALU Imm Instr. 03 – or r5,r6,r7 MUX MUX Instr. 02 – and r2,r3,r4 ID/EX Instr. 01 – add r1,r2,r3 Reg File IF/ID Memory Address RS2 05 - xor r11,r12,r13 04 - sub r8,r9,r10 MUX Next PC 06 - add r1,r2,r3 WB Data Ciclo 8 RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 8 Determinou o endereço de A A 08 - or r5,r6,r7 bolha Next SEQ PC Next SEQ PC Adder 4 Zero? RS1 MUX MEM/WB Data Memory Instr. 05 – xor r11,r12,r13 EX/MEM Instr. 04 – sub r8,r9,r10 Imm ALU Instr. 03 – or r5,r6,r7 MUX MUX Instr. 02 – and r2,r3,r4 ID/EX Instr. 01 – add r1,r2,r3 Reg File IF/ID Memory Address RS2 06 - add r1,r2,r3 05 - xor r11,r12,r13 MUX Next PC 07 - and r2,r1,r4 WB Data Ciclo 9 Sign Extend RD RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 9 aula6.doc 15 de 26 Determinou o endereço de A A 08 - or r5,r6,r7 bolha Next SEQ PC Next SEQ PC Adder 4 Zero? RS1 MUX MEM/WB Data Memory Sign Extend RD Instr. 05 – xor r11,r12,r13 EX/MEM Instr. 04 – sub r8,r9,r10 ALU Imm Instr. 03 – or r5,r6,r7 MUX MUX Instr. 02 – and r2,r3,r4 ID/EX Instr. 01 – add r1,r2,r3 Reg File IF/ID Memory Address RS2 06 - add r1,r2,r3 bolha MUX Next PC 07 - and r2,r1,r4 WB Data Ciclo 10 RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 10 Determinou o endereço de A A 08 - or r5,r6,r7 bolha Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 Imm MUX MUX Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 bolha Zero? RS1 RS2 bolha MUX Next PC 07 - and r2,r1,r4 WB Data Ciclo 11 Sign Extend RD RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 11 aula6.doc 16 de 26 Determinou o endereço de A A 08 - or r5,r6,r7 09 - sub r8,r9,r10 Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Sign Extend RD Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 MUX MUX Imm Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 bolha Zero? RS1 RS2 bolha MUX Next PC 07 - and r2,r1,r4 WB Data Ciclo 12 RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r3,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 12 Determinou o endereço de A A 09 - sub r8,r9,r10 10 - xor r11,r12,r13 Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 Imm MUX MUX Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 bolha Zero? RS1 RS2 07 - and r2,r3,r4 MUX Next PC 08 - or r5,r6,r7 WB Data Ciclo 13 Sign Extend RD RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r3,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 13 aula6.doc 17 de 26 As figuras a seguir mostram a execução de uma sequencia de instruções com dependência de dados e com forwarding: Determinou o endereço de A Com forwarding 06 - add r1,r2,r3 05 - xor r11,r12,r13 Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Sign Extend RD Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 MUX MUX Imm Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 02 - and r2,r3,r4 Zero? RS1 RS2 03 - or r5,r6,r7 MUX Next PC 04 - sub r8,r9,r10 WB Data A Ciclo 6 RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r1,r7 Instr. 09 – sub r8,r1,r10 Instr. 10 – xor r11,r1,r13 CS252-s06, Lec 02-intro 15 Determinou o endereço de A A 07 - and r2,r1,r4 06 - add r1,r2,r3 Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 Imm MUX MUX Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 03 - or r5,r6,r7 Zero? RS1 RS2 04 - sub r8,r9,r10 MUX Next PC 05 - xor r11,r12,r13 WB Data Ciclo 7 Sign Extend RD RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r1,r7 Instr. 09 – sub r8,r1,r10 Instr. 10 – xor r11,r1,r13 CS252-s06, Lec 02-intro 16 aula6.doc 18 de 26 Vai ler o valor errado no fim do ciclo Ciclo 8 08 - or r5,r1,r7 Determinou o endereço de A 07 - and r2,r1,r4 Next SEQ PC Next SEQ PC Adder 4 Zero? RS1 MUX MEM/WB Data Memory Sign Extend RD Instr. 05 – xor r11,r12,r13 EX/MEM Instr. 04 – sub r8,r9,r10 ALU Imm Instr. 03 – or r5,r6,r7 MUX MUX Instr. 02 – and r2,r3,r4 ID/EX Instr. 01 – add r1,r2,r3 Reg File IF/ID Memory Address RS2 05 - xor r11,r12,r13 04 - sub r8,r9,r10 MUX Next PC 06 - add r1,r2,r3 WB Data A RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r1,r7 Instr. 09 – sub r8,r1,r10 CS252-s06, Lec 02-intro Vai ler o valor errado no fim do ciclo A Ciclo 9 Usa o valor correto via forwarding 08 - or r5,r1,r7 09 - sub r8,r1,r10 07 - and r2,r1,r4 Next SEQ PC Zero? RS1 MUX MEM/WB Data Memory Instr. 05 – xor r11,r12,r13 EX/MEM Instr. 04 – sub r8,r9,r10 Imm ALU Instr. 03 – or r5,r6,r7 MUX MUX Instr. 02 – and r2,r3,r4 ID/EX Instr. 01 – add r1,r2,r3 Reg File IF/ID Memory Address RS2 06 - add r1,r2,r3 05 - xor r11,r12,r13 Next SEQ PC Adder 4 Determinou o endereço de A MUX Next PC 17 WB Data Instr. 10 – xor r11,r1,r13 Sign Extend RD RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r1,r7 Instr. 09 – sub r8,r1,r10 Instr. 10 – xor r11,r1,r13 CS252-s06, Lec 02-intro 18 aula6.doc 19 de 26 Vai ler o valor certo no fim do ciclo Ciclo 10 Usa o valor correto via forwarding 08 - or r5,r1,r7 09 - sub r8,r1,r10 10 - xor r11,r1,r13 Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 Imm MUX MUX Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 06 - add r1,r2,r3 Zero? RS1 RS2 07 - and r2,r1,r4 MUX Next PC Determinou o endereço de A WB Data A Sign Extend RD RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r1,r7 Instr. 09 – sub r8,r1,r10 Instr. 10 – xor r11,r1,r13 Registradores feitos com FFs tipo D acionados por nívelCS252-s06, Lec 02-intro 19 aula6.doc 20 de 26 As figuras a seguir mostram que, mesmo com forwarding, há casos que não é possível evitar bolhas no pipeline: 08 - or r5,r6,r7 07 - and r2,r1,r4 06 - lw r1,0(r3) Next SEQ PC Next SEQ PC Adder Zero? RS1 MUX MEM/WB Data Memory Sign Extend RD Instr. 05 – xor r11,r12,r13 EX/MEM Instr. 04 – sub r8,r9,r10 ALU Imm Instr. 03 – or r5,r6,r7 MUX MUX Instr. 02 – and r2,r3,r4 ID/EX Instr. 01 – add r1,r2,r3 Reg File IF/ID Memory Address RS2 05 - xor r11,r12,r13 04 - sub r8,r9,r10 MUX Next PC 4 Determinou o endereço de A Dependência verdadeira - LW WB Data A Ciclo 8 RD RD Instr. 06 – lw r1,0(r3) Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 20 Determinou o endereço de A A 08 - or r5,r6,r7 Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 Imm MUX MUX Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 05 - xor r11,r12,r13 Zero? RS1 RS2 06 - lw r1,0(r3) bolha MUX Next PC 07 - and r2,r1,r4 WB Data Ciclo 9 Sign Extend RD RD RD Instr. 06 – lw r1,0(r3) Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 21 aula6.doc 21 de 26 Determinou o endereço de A A 09 - sub r8,r1,r10 08 - or r5,r6,r7 Next SEQ PC Next SEQ PC Adder 4 Zero? RS1 MUX MEM/WB Data Memory Instr. 05 – xor r11,r12,r13 EX/MEM Instr. 04 – sub r8,r9,r10 Imm ALU Instr. 03 – or r5,r6,r7 MUX MUX Instr. 02 – and r2,r3,r4 ID/EX Instr. 01 – add r1,r2,r3 Reg File IF/ID Memory Address RS2 06 - lw r1,0(r3) bolha MUX Next PC 07 - and r2,r1,r4 WB Data Ciclo 10 Sign Extend RD RD RD Instr. 06 – lw r1,0(r3) Instr. 07 – and r2,r1,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 22 aula6.doc 22 de 26 Ifetch 14: and r2,r3,r5 18: or de DMem Reg DMem Ifetch Reg DMem Ifetch Reg DMem Ifetch Reg Reg Ifetch r6,r1,r7 dependência ALU 10: beq r1,r3,36 uma ALU ilustra ALU abaixo ALU figura ALU A 22: add r8,r1,r9 controle. Reg 36: xor r10,r1,r11 Reg Reg Reg DMem Reg Dependências de controle provocam bolhas para trás (squash de instruções). Desvios condicionais – bolhas para trás 06 - beqz r1, i10 05 - xor r11,r12,r13 Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM Instr. 05 – xor r11,r12,r13 ALU Instr. 04 – sub r8,r9,r10 Imm MUX MUX Instr. 03 – or r5,r6,r7 ID/EX Instr. 02 – and r2,r3,r4 Reg File IF/ID Memory Address Instr. 01 – add r1,r2,r3 02 - and r2,r3,r4 Zero? RS1 RS2 03 - or r5,r6,r7 MUX Next PC 04 - sub r8,r9,r10 Determinou o endereço de A WB Data A Ciclo 6 Sign Extend RD RD RD Instr. 06 – beqz r1, i10 Instr. 07 – and r2,r3,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 23 aula6.doc 23 de 26 Determinou o endereço de A A 07 - and r2,r3,r4 05 - xor r11,r12,r13 06 - beqz r1, i10 Next SEQ PC Next SEQ PC Adder 4 Zero? RS1 MUX MEM/WB Data Memory Sign Extend RD Instr. 05 – xor r11,r12,r13 EX/MEM Instr. 04 – sub r8,r9,r10 ALU Imm Instr. 03 – or r5,r6,r7 MUX MUX Instr. 02 – and r2,r3,r4 ID/EX Instr. 01 – add r1,r2,r3 Reg File IF/ID Memory Address RS2 03 - or r5,r6,r7 MUX Next PC 04 - sub r8,r9,r10 WB Data Ciclo 7 RD RD Instr. 06 – add r1,r2,r3 Instr. 07 – and r2,r3,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 24 Determinou o endereço de A A 08 - or r5,r6,r7 07 - and r2,r3,r4 Next SEQ PC Next SEQ PC Adder 4 Zero? RS1 MUX MEM/WB Data Memory Instr. 05 – xor r11,r12,r13 EX/MEM Instr. 04 – sub r8,r9,r10 Imm ALU Instr. 03 – or r5,r6,r7 MUX MUX Instr. 02 – and r2,r3,r4 ID/EX Instr. 01 – add r1,r2,r3 Reg File IF/ID Memory Address RS2 05 - xor r11,r12,r13 04 - sub r8,r9,r10 MUX Next PC 06 - beqz r1, i10 WB Data Ciclo 8 Sign Extend RD RD RD Instr. 06 – beqz r1, i10 Instr. 07 – and r2,r3,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 25 aula6.doc 24 de 26 Determinou o endereço de A A 10 - xor r11,r12,r13 07 - and r2,r3,r4 anulada Next SEQ PC Next SEQ PC Adder 4 MUX MEM/WB Data Memory EX/MEM ALU Imm MUX MUX Instr. 01 – add r1,r2,r3 ID/EX Reg File IF/ID Memory Address RS2 Instr. 03 – or r5,r6,r7 05 - xor r11,r12,r13 Zero? RS1 Instr. 02 – and r2,r3,r4 06 - beqz r1, i10 MUX Next PC 08 - or r5,r6,r7 anulada WB Data Ciclo 9 Sign Extend Instr. 04 – sub r8,r9,r10 RD Instr. 05 – xor r11,r12,r13 RD RD Instr. 06 – beqz r1, i10 Instr. 07 – and r2,r3,r4 Instr. 08 – or r5,r6,r7 Instr. 09 – sub r8,r9,r10 Instr. 10 – xor r11,r12,r13 CS252-s06, Lec 02-intro 26 Note que, se não aproveitarmos os dados disponíveis no estágio de execução (linhas em vermelho) para determinar o próximo PC, teremos que anular 3 instruções. A arquitetura abaixo pode reduzir o número de instruções anuladas no caso de desvios tomados para apenas uma: Pipeline melhorado Instruction Fetch Memory Access Write Back Adder Adder MUX Next SEQ PC Next PC Zero? RS1 MUX MEM/WB Data Memory EX/MEM ALU MUX ID/EX Imm Reg File IF/ID Memory Address RS2 WB Data 4 Execute Addr. Calc Instr. Decode Reg. Fetch Sign Extend RD RD RD • Perda de apenas um ciclo se o desvio for tomado CS252-s06, Lec 02-intro 27 aula6.doc 25 de 26 Dependências de controle podem ser tratadas em máquinas pipelined basicamente de quatro formas diferentes: 1. Parando (stall) o pipeline até que a direção do desvio seja conhecida 2. Predizendo que o desvio não vai ser tomado 3. Predizendo que o desvio vai ser tomado 4. Incluindo o conceito de desvio atrasado (delayed branch) na ISA Escalonando Branch Delay Slots A. From before branch add $1,$2,$3 if $2=0 then delay slot becomes B. From branch target sub $4,$5,$6 add $1,$2,$3 if $1=0 then delay slot becomes if $2=0 then add $1,$2,$3 add $1,$2,$3 if $1=0 then sub $4,$5,$6 C. From fall through add $1,$2,$3 if $1=0 then delay slot sub $4,$5,$6 becomes add $1,$2,$3 if $1=0 then sub $4,$5,$6 • A é a melhor escolha, pois enche o slot e reduz a contagem de instruções (CI) • Em B, a instrução sub pode precisar ser copiada, aumentando a CI • Em B e C, não pode haver problemas em executar a sub quando o desvio não é tomado CS252-s06, Lec 02-intro 30 aula6.doc 26 de 26