Y86: Encadeamento de Instruções (PIPE-)

Slides:



Advertisements
Apresentações semelhantes
Contadores e Registradores
Advertisements

Coerência de Cache em Multiprocessadores
Software Básico Silvio Fernandes
PIPELINE (continuação).
Construção de Algoritmos 2
Programação em Java Prof. Maurício Braga
Arquitetura de Computadores
WebDesign Redes de Computadores Aula 07
Medição do desempenho Computacional
Arquitetura e organização de computadores
14/10/09 Uma animação possui: Início; Passo; Fim; 1.
TEORIA DA COMPUTAÇÃO Parte III  Máquina de Turing
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
Introdução ao Projecto com Sistemas Digitais e Microcontroladores Introdução à arquitectura de microprocessadores - 1 Introdução à arquitectura de microprocessadores.
0. Introdução.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
MIPS MULTICICLO Fluxo de Dados e Controle
Processo de Pipelining (exemplo da lavanderia)
Estruturas de repetição
MC542 Organização de Computadores Teoria e Prática
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Pipeline.
SSC114 Arquitetura de Computadores Pipeline - Predição de desvios
SSC144 Arquitetura de Computadores Introdução
SSC114 Arquitetura de Computadores Pipeline - Desempenho
Maria Aparecida Castro Livi
Introdução à Lógica de Programação (cont.)
Rganização de Computadores Melhorias de Desempenho com Pipelines Capítulo 6 – Patterson & Hennessy Organização de Computadores Melhorias de Desempenho.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Implementando um Montador com LEX e YACC - 3
Organização da Memória Principal
Tratamento de Ficheiros
Programação Baseada em Objectos Desenho de TAD
Avaliação do desempenho
A arquitectura IA32 A arquitectura de um processador é caracterizada pelo conjunto de atributos que são visíveis ao programador. Tamanho da palavra Número.
Programação em Assembly Procedimentos e funções
Programação em assembly
Avaliação do Desempenho
Y86: Definição da Arquitectura
Y86: Datapath Sequencial
Optimização do Desempenho: Técnicas Dependentes da Máquina
Y86: Encadeamento de Instruções (PIPE)
Listas Encadeadas.
Introdução à Programação
Prof. Felipe Ferreira de Oliveira
Funcionamento básico de um computador
Linguagem de Montagem.
AJProença, Sistemas de Computação, UMinho, 2013/141 Análise do código de gestão de uma função –invocação e regresso instrução de salto, mas com salvaguarda.
Arquitetura de computadores
Família Intel P5 e P6 P5 P6 NetBurst Incluindo cache L2.
Linguagem de Montagem PROVA 4 – 3/12.
Organização e Arquitetura de Computadores
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Fundamentos de Programação
Agenda - Aula 2 Introdução (Computador Digital) Processadores
Linguagem e Ambiente Scratch
Unidade Central De Processamento: Processador
Unidade Central De Processamento: Processador
Procedimentos Registro de Ativação e Variáveis Locais 11 1.
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.
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.
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) 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-

Exemplo Sequencial Lógica Combinatória R e g 300 ps 20 ps Clock Latência= 320 ps Ciclo = 320 ps Débito = 1 / 320E-12 = 3.12 GOPS R e g Clock Toda a computação feita num único ciclo: 300 ps para gerar os resultados + 20 ps para os armazenar Ciclo do relógio >= 320 ps AC – Y86: PIPE-

Encadeamento na Vida Real Sequencial Paralelo Encadeado (Pipeline) Ideia Dividir processo em estágios independentes Objectos movem-se através dos estágios em sequência Em cada instante, múliplos objectos são processados simultaneamente AC – Y86: PIPE-

Encadeamento: Exemplo R e g Clock Comb. logic A B C 100 ps 20 ps Latência = 360 ps Ciclo = 120 ps Débito = 8.33 GOPS R e g R e g R e g Clock Dividir lógica combinatória em 3 blocos de 100 ps cada Nova operação começa logo que uma termina o bloco A. Ciclo >= 120 ps Latência aumenta (360 ps) mas débito também AC – Y86: PIPE-

Encadeamento: Diagramas Sequencial Só começa uma nova operação quando a anterior termina 3-Way Pipelined Até 3 operações simultaneamente Time OP1 OP2 OP3 Time A B C OP1 OP2 OP3 AC – Y86: PIPE-

Limitações: Latências não uniformes g Clock Comb. logic B C 50 ps 20 ps 150 ps 100 ps A Latência = 510 ps Ciclo = 170 ps Débito = 5.88 GOPS Time OP1 OP2 OP3 A B C Débito limitado pelo estágio mais lento Outros estágios ficam inactivos durante parte do tempo Desafio: decompor um sistema em estágios balanceados AC – Y86: PIPE-

Limitações: custo do registo Latência= 300 + 120 = 420 ps, Ciclo=70 ps, Throughput = 14.29 GOPS Clock R e g Comb. logic 50 ps 20 ps Pipelines mais profundos têm maiores custos associados aos registos Percentagem de tempo devido aos registos por instrução: 1-stage pipeline: 6.25% (020 em 320 ps) 3-stage pipeline: 16.67% (060 em 360 ps) 6-stage pipeline: 28.57% (120 em 420 ps) AC – Y86: PIPE-

Y86: PIPE- AC – Y86: PIPE-

Y86: Estágios do pipeline Fetch Seleccionar PC Ler instrução Calcular próximo PC Decode Ler registos genéricos Execute ALU Memory Ler ou escrever na memória Write Back Escrever nos registos AC – Y86: PIPE-

Y86 PIPE- : Execução I1 I2 I3 I4 I5 I2 I3 I4 I5 I6 I1 I2 I3 I4 I1 I2 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, %edi I4: subl %esi, %ebx I5: addl %eax, %eax I6: jmp MAIN I1 I2 I3 I4 I1 I2 I3 1 2 3 4 5 6 I1 I2 I3 I4 I5 I6 I1 I2 F F D F D E F D E M F D E M W F D E M W I1 AC – Y86: PIPE-

Y86 PIPE- Forward (Upward) Paths Os registos do Pipeline contêm todos os valores intermédios necessários para executar a instrução Forward (Upward) Paths Os valores passam de um estágio para o próximo Não podem saltar estágios ex., valC passa pelo estágio de Decode (apesar de não ser usado) AC – Y86: PIPE-

Y86 PIPE-: feedback Predict PC Saltos condicionais Endereço de retorno Write back W icode valE valM dstE dstM data out read Mem . Data Data control memory memory write Memory data in Predict PC Valor do próximo PC valP: instruções genéricas valC: jmp, call Saltos condicionais tomado/não tomado Alvo (valC) / Continua (valP) Endereço de retorno Ler da memória Actualizar registos 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-

Y86: Dependências de Controlo - jXX 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: subl %eax, %eax I2: jz I5 I3: addl %esi, %edi I4: subl %esi, %ebx I5: addl %ecx, %edx ? Prevê salto condicional como tomado I1 I2 I5 1 2 3 4 5 6 I1 I2 F F D F D E I1 I2 I5 I1 AC – Y86: PIPE-

Y86: Dependências de Controlo - jXX Análises estatísticas mostram que os saltos condicionais são tomados em 60% dos casos Prevendo que o salto é tomado a decisão certa é tomada mais do que metade das vezes Alternativas: NT – Not Taken BTFNT – Backward Taken, Forward Not Taken AC – Y86: PIPE-

Y86: Dependências de Controlo - jXX nop I4 I1 Y86: Dependências de Controlo - jXX 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: subl %eax, %eax I2: jnz I5 I3: addl %esi, %edi I4: subl %esi, %ebx I5: addl %ecx, %edx I6: irmovl $10, %eax I7: irmovl $20, %esi I2 I1 I2 I5 I6 nop icode=00 dstE=dstM=8 I1 I2 I5 1 2 3 4 5 6 nop I1 I2 I5 F F D F D E F D E M F M W E D I1 I2 F D W M E I5 I1 I3 I6 I6 I3 I4 AC – Y86: PIPE-

Y86: Dependências de Controlo - jXX Prevê-se que o salto é sempre tomado A correcção da previsão é determinada 2 ciclos depois, quando a instrução de salto termina o estágio de execução Se a previsão estiver errada as 2 instruções que entretanto foram lidas para o pipeline são convertidas em nops: Injecção de “bolhas” Isto é possível porque estas instruções ainda não tiveram hipótese de alterar o estado da máquina Escritas que alteram o estado acontecem apenas nas fases de “EXECUTE” (CC), “MEMORY” e “WRITEBACK” (Registos) stall do pipeline (injecção de “bolhas”): resulta num desperdício de um número de ciclos igual ao número de bolhas injectadas AC – Y86: PIPE-

Y86: Dependências de Controlo - ret nop I6 I2 nop I4 I5 I6 I7 nop I1 I3 I6 I4 I5 I3 I4 I5 I6 I7 Y86: Dependências de Controlo - ret 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: call I3 I2: halt I3: addl %ebx, %ebx I4: addl %ecx, %ecx I5: addl %ecx, %ecx I6: ret I7: addl %eax, %eax I1 I3 I5 I4 I1 I3 I4 1 2 3 4 5 6 7 8 9 F F D F D E F E M D W F M D E I1 I3 W F D E M I1 I3 I4 D W M E F I5 E D W M F I6 D M E W F I2 I1 I7 I7 I7 I2 AC – Y86: PIPE- AC – Y86: PIPE- 18

Y86: Dependências de Controlo - ret Não é possível prever o destino do salto, pois este endereço encontra-se no topo da pilha A memória é lida apenas durante o estágio “MEMORY” O endereço de retorno estará disponível apenas 4 ciclos depois do início da execução do ret (W_valM) Obriga a injectar 3 “bolhas” Alternativas: Stack específica para endereços de retorno (call / ret) AC – Y86: PIPE-

Y86: Dependências de dados nop I4 I2 I2 nop I3 I1 I2 nop I3 Y86: Dependências de dados 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 %ebx, %eax I3: irmovl $20, %ebx I4: irmovl $20, %edx I1 I2 I3 nop I1 I2 I3 1 2 3 4 5 6 7 F F D F D E F D M E F D W M E I1 I1 I2 B1 F D W M E F D W M E B2 B3 I2 I1 I3 I4 AC – Y86: PIPE-

Y86 – Dependências de dados no %esp I1: irmovl $10, %eax I2: addl %ebx, %eax I3: irmovl $20, %ebx I4: irmovl $20, %edx I1: popl %eax I2: addl %ebx, %eax I3: pushl %ebx I4: irmovl $20, %edx Os registos são escritos apenas no estágio de WRITEBACK Se uma instrução tenta ler um registo antes da escrita estar terminada é necessário resolver a dependência Na versão PIPE- a leitura tem que ser adiada até ao ciclo imediatamente a seguir à escrita Isto é conseguido injectando “bolhas” no estágio de execução AC – Y86: PIPE-

Y86 PIPE- : fetch Prever PC valP ou valC da instrução anterior M_valA – jXX baseado em M_icode, M_Bch W_valM – ret baseado em W_icode Ler instrução calcular valP seleccionar valP ou valC baseado em icode (jmp,call) AC – Y86: PIPE-

Y86 PIPE- : Sumário Conceito Limitações Dividir execução das instruções em 5 estágios Limitações Dependências entre instruções resolvidas injectando “bolhas” Pode resultar num número significativo de ciclos desperdiçados Dependências de Dados Uma instrução escreve um registo, outra lê-o mais tarde Exigem a injecção de “bolhas” Dependências de Controlo Saltos condicionais: pode ser carregado um valor errado no PC (erro de previsão) Return: não pode ser previsto qual o endereço de retorno AC – Y86: PIPE-