Pipeline. Execução seqüencial das instruções Uma etapa do ciclo de instrução se inicia...

Post on 22-Apr-2015

103 views 0 download

Transcript of Pipeline. Execução seqüencial das instruções Uma etapa do ciclo de instrução se inicia...

Unidade Central De Processamento: Processador

Pipeline

Execução seqüencial das instruções Uma etapa do ciclo de instrução se inicia

após a conclusão da anterior Uma máquina com este tipo de execução é

chamada de SISD (Single Instruction Single Data)

Arquitetura de Von Neumann

Arquitetura de Von Neumann Para aumentar a velocidade de execução de uma instrução, era necessário aumentar o clock do processador e melhorar a tecnologia dos semicondutores

As etapas do ciclo de instrução permaneciam sendo realizadas seqüencialmente

Sobreposição temporal das etapas da execução de instruções

As etapas de um ciclo de instrução vão ocorrer simultaneamente, porém sobre instruções diferentes

Pipeline

Cada uma das etapas do ciclo de instrução recebe o nome de estágio

Cada estágio é executado por uma unidade do processador:◦Unidade de Busca de Instrução (BI)◦Unidade de Decodificação (D)◦Unidade de Busca de Operandos (BO)◦Unidade de Execução da Instrução (E)◦Unidade de Escrita de Resultados (ER)

Pipeline

Pipeline

UnidadeDe BI

UnidadeDe D

UnidadeDe BO

UnidadeDe E

UnidadeDe ER

Processador

instrução

instrução

instrução instrução

Existem no pipeline situações em que a instrução seguinte não pode ser executada no próximo ciclo de clock: conflitos

Existem três tipos de conflitos:◦ Conflitos Estruturais◦ Conflitos de Controle◦ Conflitos de Dados

Pipeline

Ocorre quando duas instruções estão em etapas diferentes mas estão utilizando o mesmo hardware, por exemplo, a memória

No diagrama anterior ocorrem vários conflitos para acessar a memória, por exemplo:◦No instante de tempo 5, a instrução 5 está

sendo buscada na memória junto com os operandos da instrução 3

PipelineConflito Estrutural

Conflito

Se a memória for uma só, não é possível atender as duas requisições ao mesmo tempo◦ A memória principal (ou cache) possui somente

uma porta para atendimento de requisições Nas máquinas modernas existem duas

memórias cache: cache de dados e cache de instruções

PipelineConflito Estrutural

O estágio de busca de instruções irá buscar a instrução 5 na cache de instruções e ao mesmo tempo o estágio de busca de operandos acessa a cache de dados

Problema resolvido (para casos em que temos cache separadas)

PipelineConflito Estrutural

Ocorre quando uma instrução que está no pipeline é um desvio condicional

Enquanto esta instrução não passar pelo estágio de execução, não se sabe qual é a próxima instrução a ser executada

Ocorrerá, então, uma parada no pipeline (bolha)◦Queda no desempenho do pipeline

PipelineConflito de Controle

Para entendermos o que acontece no pipeline quando uma instrução de desvio é executada, iremos analisar o trecho de código a seguir

Considere que o código está armazenado na memória na ordem ilustrada

PipelineConflito de Controle

cin>>x>>valor;menor = 0;maior = 0;If (valor< x) { maior = menor; menor= valor; cout<< “qualquer coisa”; } else { menor = maior; maior = valor; }cin>> k;K++;

Instrução de

desvio condicional

Desvio

Fluxo de execução seqüencia

l

Instr. 1Instr. 2Instr. 3Instr. 4Instr. 5Instr. 6Instr. 7

Instr. 8Instr. 9

Instr. 10

Instr. 11

A técnica mais utilizada para resolver o conflito de controle é a predição ou previsão de desvios◦A unidade de busca de instrução tenta

prever se o desvio será tomado ou não◦Esta previsão é baseada em uma tabela

de histórico de desvios A tabela de histórico é uma memória cache

pequena associada ao estágio de busca de instrução do pipeline e tem cerca de 90 % de precisão

PipelineConflito de Controle

◦Esta tabela contém todas as instruções de desvio de um programa, informando se houve desvio ou não da última vez que a instrução foi executada

◦Se uma instrução de desvio condicional provocou um desvio da última vez que ela foi executada, da próxima vez que está instrução for executada, a unidade de busca irá considerar que haverá desvio novamente

PipelineConflito de Controle

int F, N;F = 1;cin >> N;

If (N = = 0) cout << “Fatorial de 0 é 1”; else {

F = N;while (N !=1){

F = F * (N-1);N = N –1;

}cout << “Fatorial de N é”, F;

}

Desvi

o

Fluxo de execução seqüenci

al

Em caso de estruturas de repetição,

é considerado que sempreocorrerá desvio

Quando a previsão está correta, o pipeline prossegue na velocidade máxima

Quando a previsão falha, o pipeline é esvaziado e as instruções corretas são buscadas

PipelineConflito de Controle

A execução de uma instrução depende do resultado de outra que ainda está no pipeline

Exemplo: suponha que tenhamos uma instrução de carga imediatamente seguida por uma instrução de subtração que utilize o resultado da carga

PipelineConflito de Dados

PipelineConflito de Dados

LDA Op ACC (OP)

SUB Op ACC ACC - (OP)

A operação LDA só escreve o resultado no

ACC no 5o estágio do pipeline

A operação SUB precisa do conteúdo do ACC no 4o

estágio do pipeline

Neste caso vai ocorrer uma bolha no pipeline

PipelineConflito de Dados

Bolha

A solução para resolver este conflito é a reordenação das instruções◦ As instruções que não estão conflitando são

adiantadas

PipelineConflito de Dados

LDA Op

SUB OpGET Op

LDA Op

SUB OpGET Op

Reordenação