Melhorando o desempenho com pipeline

Slides:



Advertisements
Apresentações semelhantes
Parte 1: Organização de Computadores
Advertisements

PIPELINE (continuaçã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 05:
Capitulo 6: Entrada e Saída
CPU: Controle e processamento
WebDesign Redes de Computadores Aula 05
WebDesign Redes de Computadores Aula 07
Arquitetura e organização de computadores.
Aula 06: Introdução ao Pipelining, Hazards Estruturais e Forwarding
Software Básico Silvio Fernandes
Exemplo de arquitetura registrador-registrador- MIPS
MIPS PIPELINE.
Processador Fluxo de Dados e Controle
AULA 06 - MIPS PIPELINE.
Processo de Pipelining (exemplo da lavanderia)
Daniel M. Aquino, Marcelo C. Perez, Thais A. B. Fernandes
Arquiteturas Superescalares
Paralelismo em nível de instrução: Arquiteturas VLIW Grupo 01: Júlia Martinez Perdigueiro ra Tatiane Baggio Borili ra
Pipeline.
Problemas com Entrada e Saída
SSC144 Arquitetura de Computadores Introdução
Joao Cláudio Soares Otero
Rganização de Computadores Melhorias de Desempenho com Pipelines - Parte B - Capítulo 6 – Patterson & Hennessy Organização de Computadores Melhorias de.
Rganização de Computadores Melhorias de Desempenho com Pipelines Capítulo 6 – Patterson & Hennessy Organização de Computadores Melhorias de Desempenho.
Professor: Erivelto Tschoeke – UDESC/CEPLAN
Sistemas Digitais Microprocessados
Multiplicador e Forwarding no MIPS
Arquitetura de Computadores
Autor: Fernando de Mesentier Silva
Instruções: A Linguagem de Máquina – Aula 01
Avaliando e Compreendendo o Desempenho - Respostas
Arquitetura de Computadores
Processadores – Aula 3 Professor: André Luis Meneses Silva
Fundamentos do Projeto Lógico
Processadores – Aula 3 Professor: André Luis Meneses Silva
Introdução à Programação
Prof. Felipe Ferreira de Oliveira
Aula prática 6 Vetores e Matrizes
Funcionamento básico de um computador
Prof.: Vagner Pinto Borges Prof.: Vagner Pinto Introdução à Arquitetura e Organização.
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Qualificadores.
Pipeline O throughput de um pipeline é determinado pela freqüência com que uma instrução sai do pipeline. Todos os estágios devem estar prontos ao mesmo.
Arquitetura de computadores
Sistemas Operacionais I
Organização e Arquitetura de Computadores
Agenda - Aula 2 Introdução (Computador Digital) Processadores
Davi de Andrade Lima Castro RA:  A plataforma C6000: ◦ Ponto-fixo:  C62x  C64 / C64x+ ◦ Ponto-flutuante:  C67x / C67x+ ◦ Arquitetura VLIW:
Contextualização de Paralelismo em nível de instrução
Aritmética Computacional Operações Complexas
Unidade Central De Processamento: Processador
POLIMIG Curso Técnico em Informática Disciplina: Hardware
Software Básico Nível ISA Capítulo 5 Mitsuo Takaki
Organização e Arquitetura de Computadores
Unidade Central De Processamento: Processador
Unidade Central De Processamento: Processador
A Linguagem de Máquina – Desvios e Laços
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
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
Arquitetura de computadores
ARQUITETURA DE COMPUTADORES Nível do Conjunto de Instruções
A linguagem de Máquina – Instruções Básicas
Introdução ao Processamento Vetorial
Organização de Computadores Implementação da UCP Construção do caminho de dados Controle Implementação monociclo.
 Evolução constante das linguagens de programação de alto nível (LAN) desde o Fortran (primeira LAN)  Surgimento de novos paradigmas como a OO, Orientação.
 Todo processador é constituído de circuitos capazes de realizar algumas operações primitivas:  Somar e subtrair  Mover um dado de um local de armazenamento.
TRABALHO AVALIATIVO ALUNO: FRANCISCO HELIÉSUS DE MEDEIROS MATÉRIA: ORGANIZAÇÃO DE COMPUTADORES.
Construção de Via de dados Trabalho Avaliativo do Primeiro Bimestre. Marcos André de Sena Silva.
Transcrição da apresentação:

Melhorando o desempenho com pipeline Prof. André Luis M. Silva e/msn:andreLuis.ms@gmail.com

Agenda Introdução Pipeline Caminho de dados Controle Problemas no projeto de pipeline Forwarding Introdução de Stalls Descartando instruções.

Introdução Em uma linha de produção de carros costumam dividir o trabalho de fabricação em etapas. Estas etapas visam possibilitar a realização de operações em paralelo. Diminui o tempo para montagem de vários carros.

Introdução Lavando roupas Etapas: lavar, secar, passar e guardar

Introdução Lavando roupas Etapas: lavar, secar, passar e guardar

Pipeline Técnica de implementação em que várias instruções são sobrepostas na execução. Sob condições ideais, o ganho de velocidade com a técnica de pipeline é igual ao número de estágios do pipeline.

Pipeline Etapas de uma instrução MIPS: Buscar instrução da memória Ler registradores enquanto a instrução é decodificada. Executar a operação ou calcular um endereço. Acessar um operando na memória de dados. Escrever o resultado em um registrador.

Pipeline Vamos fazer de conta que: Classe de instrução Busca de instrução Leitura de registradores Operação da ALU Acesso a dados Escrita de registradores Tempo Total lw 200 ps 100 ps 800 ps sw 700 ps form – R 600 ps branch 500 ps

Pipeline Projeto Ciclo Único Projeto com pipeline Em nosso estudo, padronizamos que a leitura ao banco de registradores leva metade do tempo do ciclo de clock e é sempre realizada na segunda metade. Projeto com pipeline Embora tenhamos feito esta padronização. Muitos projetos de processadores a seguem, como por exemplo, o mips. Escritas ao banco de registradores também leva metade do tempo do ciclo de clock e é sempre realizada na primeira metade.

Pipeline Observem que : Quantidade de instruções Arquitetura sem pipeline Arquitetura com pipeline 1 800 ps 900 ps 2 1600 ps 1100 ps 3 2400 ps 1300 ps 4 … 1.000.000 800.000.000 ps. 200.000.700 ps.

Pipeline A introdução de pipeline pode ser facilitada caso o conjunto de instruções de suporte a algumas características: Todas as instruções possuem mesmo tamanho. Apenas alguns formatos de instruções. Operandos de memória aparecem apenas em loads e stores. No MIPS, por exemplo, o tamanho de uma instrução sempre é 4 bytes. Esta característica faz com que saibamos antecipadamente, que uma palavra carregada da memória de instruções possui uma instrução completa e bem formada. Nos processadores Intel, instruções não possuem mesmo tamanho, podendo variar de 1 a 17 bytes. No MIPS existem poucos formatos de instruções (apenas 4). Embora diferente, estes formatos possuem muitas características comuns, tais como a localização do opcode e localização do registrador de origem. Alguns processadores permitem a realização de operações aritméticas envolvendo argumentos cujos valores estão em memória (processadores da linha Intel e AMD). Esta característica torna o pipeline mais complexo, visto que será necessário criar algumas etapas adicionais para a realização deste pipeline.

Pipeline Dificuldades na implementação de pipeline E se: Tivermos apenas uma memória? Risco estrutural Necessidade de nos preocuparmos com instruções ramificadas (decisões)? Risco de controle Uma instrução depende de uma instrução anterior? Risco de dados Construiremos um pipeline simples e veremos esses problemas. Risco estrutural indica que o hardware não pode admitir a combinação de instruções que queremos executar no mesmo ciclo de clock. Por exemplo, se no MIPS tivéssemos uma única memória para instruções e dados, em algum momento do pipeline teríamos conflito de acesso a esta memória, visto que, uma instrução estaria na etapa de busca de instruções e outra poderia estar acessando um operando na memória de dados. Risco de controle pode acontecer devido a necessidade de tomar uma decisão com base nos resultados de uma instrução enquanto outras estão sendo executas. Por exemplo, seja o seguinte código MIPS: Beq $1, $2, 40 add $5, $6, $7 # não dá para saber se seguiremos por add ou sub. 40: sub $5, $6, $7

Como fica o caminho de dados? Representação de ciclo único. O que falta para podermos compartilhar elementos do caminho de dados? O que precisamos adicionar para realmente dividir o caminho de dados em estágios?

Este projeto apresenta alguma falha? Registradores. São adicionados quatro registradores IF/ID, ID/EX, EX/MEM, MEM/WB Registradores. Nesta nova representação são introduzidos quatro registradores entre cada uma das etapas. O tamanho destes registradores varia: IF/ID possui 64 bits. ID/EX possui 128 bits. EX/MEM possui 97 bits. MEM/WB possui 64 bits. Este projeto apresenta alguma falha? Que instruções podemos executar para manifestar o problema?

beq $t1, $t2, offset #O que acontece? … add $s1, $s2, $s4 beq $t1, $t2, offset #O que acontece? … Não funciona, o problema está relacionado com as instruções que precisam realizar escrita em registradores. Lembrem-se que a cada ciclo de clock, uma nova instrução começa a ser executada no processador, logo, o valor necessário para endereçar o registrador de escrita é perdido. Teremos o endereço $s1 em IF/ID quando precisarmos armazenar o resultado da soma?

Caminho de dados corrigido O endereço do registrador de escrita é passado para os demais registradores No estágio de escrita, o mesmo é repassado para o banco de registradores Para não perdermos este valor, precisamos passar este valor para os registradores ID/EX, EX/MEM e MEM/WB.

Representando Pipelines Esta representação auxilia o entendimento do caminho de dados. Nela, utilizamos um caminho de dados para representar cada instrução. Fica mais fácil visualizar o que está acontecendo em um dado ciclo de instrução. Auxilia a responder questões do tipo: Quantos ciclos é necessário para execução deste código? Qual ALU está sendo usada no ciclo 5?

E como fica a Unidade de Controle? Os sinais

Controle do pipeline Lembrem-se, temos 5 estágios: Busca da instrução e incremento do PC Decodificação da instrução / Busca do registrador Execução Estágio da memória Escrita adiada Cada um destes estágios possui elementos que precisam ser configurados pela unidade de controle.

Transferir os sinais de controle exatamente como os dados. No projeto final, os sinais de controle são tratados como dado. Desta forma, o estágio atual do pipeline sempre terá seu respectivo sinal de controle para realização correta daquele trecho do caminho de dados. Transferir os sinais de controle exatamente como os dados.

Resolvendo problemas do Pipeline Como citado inicialmente, podemos ter três problemas principais no projeto de pipeline: Risco estrutural Criando um novo projeto. Risco de dados Risco de controle

Risco de Dados Problemas com o início da próxima instrução antes do término da primeira. Seja o seguinte trecho de código: sub $2, $1, $3 and $12, $2, $5 or $13, $6, $2 add $14, $2, $2 sw $15, 100($2) O que acontece neste trecho?

Risco de Dados Na execução desta instrução teremos algum problema? Não teremos, o registrador já possui o valor atual. Lembrem-se que a escrita e leitura de dados é feita utilizando apenas a metade do ciclo de clock. A primeira metade é destinada a escrita do valor e a segunda metade destinada a leitura. Esta convenção é bastante comum no projeto dos processadores modernos. O risco de dados correspondem às dependências que voltam no tempo

Risco de Dados Soluções de software Fazer o compilador garantir a inexistência do risco de dados. Isto é possível através da inserção de operações nop entre as instruções. Uma instrução nop significa no operation, ou seja, não realiza nenhuma operação. Ela apenas atrasa o início da instrução subseqüente.

Risco de Dados sub $2, $1, $3 nop sub $2, $1, $3 and $12, $2, $5 or $13, $6, $2 add $14, $2, $2 sw $15, 100($2) sub $2, $1, $3 and $12, $2, $5 or $13, $6, $2 add $14, $2, $2 sw $15, 100($2) A inserção de nops faz com que o pipeline perca desempenho. Observe, neste exemplo, que o novo programa levaria dois ciclos de clock a mais que o código original. Qual o problema desta opção?

Outra solução é utilizando Forwarding Use resultados temporários, não espere que eles sejam escritos. Dado é repassado de EX/MEM para operando 1 da ALU Dado é repassado de MEM/WB para operando 2 da ALU

Forwarding Unidade de forwarding compara registradores Se o registrador rd da primeira instrução for igual a um dos operandos da instrução anterior, é realizado forwarding

Forwarding No entanto, forwarding nem sempre é possível O que aconteceria se tivéssemos uma instrução de load seguida por uma outra instrução que lê do mesmo registrador? lw $2, 20($1) and $4, $2, $5 or $8, $2, $6 add $9, $4, $2 slt $1, $6, $7

Falha usando forwarding Momento que dispomos do dado é posterior ao momento que precisamos dele.

Ao inserir stalls, conseguimos alinhar estes momentos Podemos inserir stalls (parar) no pipeline mantendo uma instrução no mesmo estágio. Ao inserir stalls, conseguimos alinhar estes momentos

Unidade de detecção de riscos (hazard) Comparação Unidade de detecção de riscos Fios relativo a rs e rt da instrução que antecede lw Fio relativo a rt de lw Se houver dependência, o valor passado é 0.

Risco de Controle Seja a seguinte seqüência 40 beq $1,$3,28 44 and $12,$2,$5 48 or $13,$6,$2 52 add $14,$2,$2 … 72 lw $4,50($7) Conseguem ver algum problema? No pipeline, qual caminho devo optar?

Risco de Controle Optar por um dos caminhos E o que acontece se optarmos pelo caminho errado? Descartamos as instruções.

Hardware para descartar instruções. É inserido um novo somador para calcular o desvio durante a etapa de decodificação. Uma outra instrução é selecionada Se a escolha de desvio foi errada, é desencadeado um stall Zera IF/ID

Desvios Se o desvio for tomado, temos uma penalidade de um ciclo. Para nosso projeto simples, isso é razoável. Com pipelines mais profundos, a penalidade aumenta e a previsão de desvio estático diminui drasticamente o desempenho. Solução: previsão de desvio dinâmico.

Desvios

Melhorando o desempenho com pipeline – aula 02 Prof. André Luis M. Silva e/msn:andreLuis.ms@gmail.com

Agenda Tratamento de Exceções. Técnicas sofisticadas de previsão de desvio. Pipeling Avançado

Exceções Seja a seguinte instrução: add $1, $2, $1 O que acontece com o pipeline caso esta instrução gere um overflow aritmético?

Tratamento de Exceções. EX.Flush IF.Flush Zera a memória EX/MEM provocando um flush na instrução que está em execução ID.Flush Zera a memória ID/EX provocando um flush na instrução anterior a atual que foi decodificada Zera a memória IF/ID provocando um flush na instrução anterior a atual que foi buscada Após flush das instruções anteriores, a memória de instrução carrega o valor 0x80000180: o endereço da rotina de tratamento de exceção

Pipelining Avançado Faz uso de técnicas para prover o aumento do ILP (paralelismo em nível de instrução). Podemos adotar duas abordagens: Aumento do número de estágios do pipeline. Aumento do número de componentes internos do processador. Esta abordagem é conhecida como despacho múltiplo, pois permite o início de mais de uma instrução em cada estágio de pipeline.

Despacho múltiplo Despacho múltiplo estático Maior parte das decisões de despacho, são tomadas pelo compilador. Mais propenso a erros, e menos portável. Despacho múltiplo dinâmico Maior parte das decisões de despacho, são tomadas pelo processador em tempo de execução. Menos propenso a erro e mais portável.

Despacho Múltiplo Independente da técnica de despacho, é empregado o conceito de especulação. A especulação é uma técnica pela qual o compilador ou processador advinha o resultado de uma instrução com o objetivo de procurar por instruções independentes (que possam ser executadas em paralelo).

Despacho Múltiplo Estático Também conhecido como VLIW (palavra de instrução muito longa). Eles recebem este nome porque o pacote de instruções fornecidos pelo compilador em um dado ciclo, pode ser visto como uma única instrução grande. Utilizado na arquitetura IA-64.

Despacho Múltiplo Estático Ao invés de 32, são buscados 64 bits da memória de instruções O compilador gera código que pode ser colocado em paralelo. Caso não exista nenhum conjunto de duas instruções passíveis de ser colocadas em paralelo, é inserido uma instrução NOP.

Despacho Múltiplo Estático Alguns elementos do hardware são duplicados para permitir execução em paralelo. Dois estensores de sinal Duas ALUS Banco de Registradores apresenta saídas e entradas duplicadas Memória de instruções apresenta duas saídas.

Despacho Múltiplo Estático Como este loop seria escalonado em um pipeline com despacho duplo estático? Loop: lw $t0, 0($s1) addu $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -4 bne $s1, $zero, Loop

Despacho Múltiplo Estático Instrução da ALU ou desvio Instrução de transferência de dados Ciclo de Clock Loop: nop lw $t0, 0($s1) 1 addi $s1, $s1, -4 2 addu $t0, $t0, $s2 3 bne $s1, $zero, Loop sw $t0, 4($s1) 4

Despacho Múltiplo Dinâmico Processadores com despacho múltiplo dinâmico também são conhecidos como processadores superescalares. Nestes processadores, instruções são despachadas em ordem e, em tempo de execução, o processador realiza especulação. O código escalonado é garantido pelo hardware.

Despacho Múltiplo Dinâmico Realiza a busca e decodificações de instruções, delegando a instrução para sua respectiva unidade funcional Busca e decodificação de instruções Buffers que armazenam operandos e a operação. Aguarda disponibilidade da unidade funcional Estação de Reserva Estação de Reserva Estação de Reserva Estação de Reserva Executam a operação desejada. Resultado é armazenado na estação de reserva ou na unidade de commit. Execução fora de ordem Ponto Flutuante Inteiro Inteiro Load/Store Unidade de Commit Unidade de commit reordena as ações e libera, quando julgar seguro, os resultados para a memória ou para os registradores.

Referências Hennessy e Patterson Seções 6.1 a 6.10