Y86: Encadeamento de Instruções (PIPE)

Slides:



Advertisements
Apresentações semelhantes
PIPELINE (continuação).
Advertisements

Redes de computadores II
WebDesign Redes de Computadores Aula 07
Medição do desempenho Computacional
Arquitetura e organização de computadores
Aula 06: Introdução ao Pipelining, Hazards Estruturais e Forwarding
A Arquitetura: conjunto de instruções
Assembly MAC-1 Implementação de ciclos Ciclo ‘while’ // Em Java : ...
Introdução Arquitectura com unidade de controlo uniciclo.
Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha
Aritmética Aceleração da adição.
0. Introdução.
Sistemas Embarcados Microcontroladores PIC
Exemplo de arquitetura registrador-registrador- MIPS
MIPS PIPELINE.
MIPS MULTICICLO Fluxo de Dados e Controle
Processo de Pipelining (exemplo da lavanderia)
MC542 Organização de Computadores Teoria e Prática
Processador Intel Itanium
Sistemas Operacionais
Pipeline.
SSC114 Arquitetura de Computadores Pipeline - Predição de desvios
SSC144 Arquitetura de Computadores Introdução
Dados do Grupo. 1) Apresentação do Testbench Desenvolvido:
Maria Aparecida Castro Livi
Rganização de Computadores Melhorias de Desempenho com Pipelines Capítulo 6 – Patterson & Hennessy Organização de Computadores Melhorias de Desempenho.
Multiplicação de valores inteiros
+ = MOTIVAÇÃO ARQUITETURA DE COMPUTADORES CIRCUITOS LOGICOS
Avaliação do desempenho
Programação em Assembly Procedimentos e funções
Arquitecturas RISC Programação em assembly
Avaliação do Desempenho
Avaliação do Desempenho
Y86: Definição da Arquitectura
Y86: Datapath Sequencial
Processamento Vectorial: Single Instruction Multiple Data
Y86: Encadeamento de Instruções (PIPE-)
Optimização do Desempenho: Técnicas Independentes da Máquina Arquitectura de Computadores Lic. em Engenharia Informática Luís Paulo Santos.
Optimização do Desempenho: Técnicas Dependentes da Máquina
Processadores – Aula 3 Professor: André Luis Meneses Silva
Processadores – Aula 3 Professor: André Luis Meneses Silva
Introdução à Programação
Prof. Felipe Ferreira de Oliveira
Unidade Central de Processamento
Funcionamento básico de um computador
Linguagem de Montagem.
Família Intel P5 e P6 P5 P6 NetBurst Incluindo cache L2.
Core War A Batalha do Núcleo.
Organização e Arquitetura de Computadores
Processamento de dados na UCP e memória UCP
Contextualização de Paralelismo em nível de instrução
Unidade Central De Processamento: Processador
Paralelismo em Máquinas Monoprocessadas
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Arquitetura Cleópatra Bloco de Controle.
Conceitos Avançados de Arquitetura de Computadores Arquiteturas RISC Reduced Instruction Set Computer 6.
Parte 3 Seção de Dados e Unidade de Controle
Conceitos Avançados de Arquitetura de Computadores Arquiteturas RISC Arquiteturas Superpipeline e Superescalares.
1  1998 Morgan Kaufmann Publishers Paulo C. Centoducatte – MC542 - IC/Unicamp- 2006s Prof. Paulo Cesar Centoducatte
Estrutura do Processador
Processador MAC-1 Arquitectura.
Aula 10 – Sumário Aritmética Pipelines Aceleração da adição
Arquitetura de Computadores
Existem 8 registos principais de 32 bits no processador (existem mais como %EIP): %EAX %EBX %ECX %EDX %ESI %EDI %EBP %ESP Os registos são armazenados em.
Afonso Ferreira Miguel
Pet computação UFPE Arquitetura Von Neumann. pet computação UFPE 1.Definição e tipos de arquitetura Quando falamos em arquitetura temos dois tipos a considerar:
EA869 Modos de Endereçamento Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato 1.
Construção de Via de dados Trabalho Avaliativo do Primeiro Bimestre. Marcos André de Sena Silva.
Microprogramação Controlador Microprogramado RI Microcomandos UAL MICROMEMÓRIA MPC MIR DECOD.... Vamos então construir o controlador microprogramado do.
Determinou o endereço de A
Transcrição da apresentação:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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