A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Y86: Encadeamento de Instruções (PIPE)

Apresentações semelhantes


Apresentação em tema: "Y86: Encadeamento de Instruções (PIPE)"— Transcrição da apresentação:

1 Y86: Encadeamento de Instruções (PIPE)
Arquitectura de Computadores Lic. em Engenharia Informática Luís Paulo Santos

2 Y86: Encadeamento de instruções (pipeline)
Conteúdos 9 – Organização do Processador 9.2 – Datapath encadeado (pipeline) C1 9.3 – Dependências de Dados e Controlo Resultados de Aprendizagem R9.2 – Analisar e descrever organizações encadeadas de processadores elementares R9.3 – Caracterizar limitações inerentes a organizações encadeadas (dependências) e conceber potenciais soluções AC – Y86: PIPE

3 Y86 PIPE-: Limitações Dependências de Dados Dependências de controlo
Uma leitura de um registo precedida de uma escrita no mesmo registo constitui uma dependência de dados Se a leitura ocorre antes da conclusão da escrita ocorre uma anomalia Na versão PIPE- estas anomalias são corrigidas empatando o pipeline através da injecção de “bolhas” (nops) Dependências de controlo O desfecho dos saltos condicionais só é conhecido depois da fase de execução. O Y86 prevê que o salto é tomado, executando as instruções no alvo de forma especulativa. Previsões erradas são corrigidas inserindo “bolhas”. O destino de um ret só é conhecido depois da fase de leitura de memória. O Y86 resolve esta anomalia inserindo “bolhas” até que o endereço da próxima instrução seja conhecido. AC – Y86: PIPE

4 Y86 PIPE: Motivação As dependências de dados são demasiado comuns
Resolvê-las recorrendo à injecção de “bolhas” resulta no desperdício de um elevado número de ciclos, comprometendo o desempenho do pipeline A versão PIPE do Y86 propõe-se resolver estas dependências de dados, diminuindo o número de bolhas injectadas (logo o número de ciclos desperdiçados) As dependências de controlo não sofrem qualquer alteração relativamente a PIPE- AC – Y86: PIPE

5 PIPE-: Condições para stall
Write back W icode valE valM dstE dstM data out read Mem . Data Data control memory memory Registo a ler d_srcA e d_srcB (instrução no estágio de decode) Registos destino dstE e dstM nos estágios E, M e W Dependência Dados d_srcA ou d_srcB == E_dst? ou M_dst? Ou W_dst? (? = E ou M) Ignorar se RegID==8 write Memory data in Addr CC d_ srcB srcA e_Bch M_Bch M_ valA M icode Bch valE valA dstE dstM ALU ALU ALU fun. ALU ALU Execute A B E icode ifun valC valA valB dstE dstM srcA srcB Select d_ rvalA dstE dstM srcA srcB A Decode A B W_ valM Register Register M file file W_ valE E D icode ifun rA rB valC valP Predict PC Instruction Instruction PC PC memory memory increment increment Fetch f_PC M_ valA Select PC W_ valM F predPC AC – Y86: PIPE

6 PIPE- : Implementação do stalling
Se (d_srcA in {E_dstE, E_dstM, M_dstE, M_dstM, W_dstE, W_dstM} || d_srcB in {E_dstE, E_dstM, M_dstE, M_dstM, W_dstE, W_dstM} ) Então E_bubble = D_stall = F_stall =1; E M W F D rB srcA srcB icode valE valM dstE dstM Bch valA ifun valC valB valP rA predPC d_ D_ E_ Pipe control logic D_stall E_bubble M_ W_ F_stall E_bubble “Injecção” de um nop no estágio E (icode=0, E_dstE=E_dstM=8) D_stall Escrita no registo D inibida F_stall Escrita no registo F inibida AC – Y86: PIPE

7 Data Forwarding Problema Observação Resolução do problema
Um registo é lido na fase de DECODE A escrita só ocorre na fase de WRITEBACK Observação O valor a escrever no registo é gerado na fase de execução ou memória Resolução do problema Passar o valor necessário directamente do estágio onde está disponível (E, M ou W) para o estágio de DECODE AC – Y86: PIPE

8 Y86 PIPE: Exemplo de Forwarding (1)
W_valE PC increment CC ALU Data memory Fetch Decode Execute Memory Write back Register file A B M E valP d_ srcA , srcB valA valB aluA aluB Bch valE Addr , Data rA W F D f_PC Instruction valE I1: irmovl $10, %eax I2: mrmovl 30(%ebx), %ecx I3: addl %esi, %edi I4: addl %esi, %eax I5: jmp MAIN 1 2 3 4 5 6 I1 I2 I3 I4 I5 I6 Forward F F D F D E F D E M F D E M W F D E M W valB = W_valE AC – Y86: PIPE

9 Y86 PIPE: Exemplo de Forwarding (2)
PC increment CC ALU Data memory Fetch Decode Execute Memory Write back Register file A B M E valP d_ srcA , srcB valA valB aluA aluB Bch valE Addr , Data rA W F D f_PC Instruction I1: irmovl $10, %eax I2: mrmovl 30(%ebx), %ecx I3: addl %esi, %eax I4: … I1 I2 I3 I4 M_valE valE 1 2 3 4 5 6 I1 I2 I3 I4 I5 I6 Forward F F D F D E F D E M F D E M W F D E M W valB = M_valE AC – Y86: PIPE

10 Y86 PIPE: Exemplo de Forwarding (3)
PC increment CC ALU Data memory Fetch Decode Execute Memory Write back Register file A B M E valP d_ srcA , srcB valA valB aluA aluB Bch valE Addr , Data rA W F D f_PC Instruction I1: irmovl $10, %eax I2: addl %esi, %eax I3: … e_valE I1 I2 I3 1 2 3 4 5 6 I1 I2 I3 I4 I5 I6 Forward F F D F D E F D E M F D E M W F D E M W valB = e_valE AC – Y86: PIPE

11 Y86 PIPE: Exemplo de Forwarding (4)
W_valM PC increment CC ALU Data memory Fetch Decode Execute Memory Write back Register file A B M E valP d_ srcA , srcB valA valB aluA aluB Bch valE Addr , Data rA W F D f_PC Instruction valM I1: mrmovl 30(%ebx), %ecx I3: addl %esi, %ebx I3: addl %esi, %edi I4: addl %ecx, %eax I5: jmp MAIN 1 2 3 4 5 6 I1 I2 I3 I4 I5 I6 Forward F F D F D E F D E M F D E M W F D E M W valA = W_valM AC – Y86: PIPE

12 Y86 PIPE: Exemplo de Forwarding (5)
PC increment CC ALU Data memory Fetch Decode Execute Memory Write back Register file A B M E valP d_ srcA , srcB valA valB aluA aluB Bch valE Addr , Data rA W F D f_PC Instruction m_valM I1: mrmovl 30(%ebx), %ecx I2: addl %esi, %edi I3: addl %ecx, %eax I4: … I1 I2 I3 I4 1 2 3 4 5 6 I1 I2 I3 I4 I5 I6 Forward F F D F D E F D E M F D E M W F D E M W valA = m_valM AC – Y86: PIPE

13 Y86 PIPE: Exemplo de Forwarding (6)
PC increment CC ALU Data memory Fetch Decode Execute Memory Write back Register file A B M E valP d_ srcA , srcB valA valB aluA aluB Bch valE Addr , Data rA W F D f_PC Instruction m_valM I1: mrmovl 30(%ebx), %ecx I2: addl %ecx, %eax I3: … I2 I3 I1 nop I1 I2 I3 1 2 3 4 5 6 I1 I2 I3 I4 I5 Forward F F D F D E F D M E F D E M W M W F D E M W valA = m_valM AC – Y86: PIPE

14 Load /Use Uma situação de load/use ocorre quando uma leitura de memória para registo é seguida de uma leitura do mesmo registo Como I1 ainda está no estágio de Execute quando I2 pede o valor do registo, este valor ainda não foi lido e não pode ser encaminhado (forwarded) para o Decode A resolução da anomalia passa por injectar uma “bolha”, dando assim tempo para que a memória seja lida I1: mrmovl 30(%ebx), %ecx I2: addl %ecx, %eax AC – Y86: PIPE

15 Detecção de load/use Anomalia Condição Load/Use
E_icode in { IMRMOVL, IPOPL } && E_dstM in { d_srcA, d_srcB } AC – Y86: PIPE

16 Y86 PIPE: Atalho a usar I1 I2 I3 I4 F F D F D E F D E M
PC increment CC ALU Data memory Fetch Decode Execute Memory Write back Register file A B M E valP d_ srcA , srcB valA valB aluA aluB Bch valE Addr , Data rA W F D f_PC Instruction I1: irmovl $10, %eax I2: irmovl $30, %eax I3: addl %eax, %eax I1 I2 I3 I4 valE e_valE 1 2 3 4 5 6 I1 I2 I3 I4 I5 I6 Forward F F D F D E F D E M valA = valB = e_valE AC – Y86: PIPE 16

17 Y86 PIPE: implementação de forwarding
Adicionar 5 atalhos dos registos de pipeline E, M, e W para o estágio decode Adicionar 2 multiplexers para seleccionar valA e valB no decode AC – Y86: PIPE

18 Y86 PIPE: implementação de forwarding
## Qual o atalho a utilizar? ## NOTA: X representa A ou B conforme ## se trate de valA ou valB int new_E_valX = [ # Use incremented PC D_icode in { ICALL, IJXX } : D_valP; # Forward valE from execute d_srcX == E_dstE : e_valE; # Forward valM from memory d_srcX == M_dstM : m_valM; # Forward valE from memory d_srcX == M_dstE : M_valE; # Forward valM from write back d_srcX == W_dstM : W_valM; # Forward valE from write back d_srcX == W_dstE : W_valE; # Use value read from register file 1 : d_rvalX; ]; AC – Y86: PIPE

19 Y86 PIPE: Resumo Dependências de Dados
Tratadas maioritariamente com forwarding Não há penalização no desempenho Load/use exige que se empate o pipeline durante 1 ciclo Dependências de Controlo (não há alterações relativamente a PIPE-) Salto condicional mal previsto: cancelar instruções em F e D 2 ciclos do relógio desperdiçados ret: Empatar o estágio F (injectando bolhas em E) até o endereço de retorno ser lido 3 ciclos do relógio desperdiçados AC – Y86: PIPE


Carregar ppt "Y86: Encadeamento de Instruções (PIPE)"

Apresentações semelhantes


Anúncios Google