1 / 19

Y86: Encadeamento de Instruções (PIPE)

Y86: Encadeamento de Instruções (PIPE). Arquitectura de Computadores Lic. em Engenharia Informática Luís Paulo Santos. Y86: Encadeamento de instruções (pipeline). Y86 PIPE-: Limitações. Dependências de Dados

colm
Download Presentation

Y86: Encadeamento de Instruções (PIPE)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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)

  3. Y86 PIPE-: Limitações • Dependências de Dados • 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.

  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-

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

  6. PIPE- : Implementação do stalling W_ dstM W_ dstE Se (d_srcAin {E_dstE, E_dstM, M_dstE, M_dstM, W_dstE, W_dstM} || d_srcBin {E_dstE, E_dstM, M_dstE, M_dstM, W_dstE, W_dstM} ) Então E_bubble = D_stall = F_stall =1; W icode valE valM dstE dstM M_ dstM M_ dstE M icode Bch valE valA dstE dstM E_ dstM Pipe E_ dstE control 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 logic E_bubble E icode ifun valC valA valB dstE dstM srcA srcB d_ srcB d_ srcA srcB D_ icode srcA D icode ifun rA rB valC valP D_stall F_stall F predPC

  7. Data Forwarding • 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

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

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

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

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

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

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

  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

  15. Detecção de load/use

  16. Y86 PIPE: Atalho a usar W I1 M I2 E I3 D rA , valP I4 Instruction Instruction memory memory f_PC F I1: irmovl $10, %eax I2: irmovl $30, %eax I3: addl %eax, %eax Data Data memory memory Memory Addr , Data valE Bch valE CC CC ALU ALU Execute aluA , aluB e_valE valA valB Forward , d_ srcA , F D E M Decode A A B B d_ srcB M M Register Register Register Register file file file file E E Write back F D E valP F D F PC PC increment increment Fetch 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ágiodecode • Adicionar 2 multiplexersparaseleccionarvalAe valBno decode

  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; ];

  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

More Related