Você está na página 1de 4

Centro Federal de Educação Tecnológica

de Minas Gerais
Departamento de Computação
Curso de graduação em Engenharia da Computação
Organização e Arquitetura de Computadores II
Profa. Daniela Cristina Cascini Kupsch (cascini@decom.cefetmg.br)

Comece a fazer esta lista imediatamente. Você nunca terá tanto tempo para resolvê-la quanto agora.
Data da entrega: 04/06/2014 às 15:00 ou antes.
Após a data da entrega você pode entregar a lista para ser corrigida, mas não receberá os pontos pelo
trabalho.

LISTA III
Exercício 1

Qual seria o desempenho de referência (em ciclos, por iteração do loop) da sequência de código
descrita abaixo se nenhuma nova execução de instrução puder ser iniciada até que a execução da
instrução anterior tivesse sido concluída? Ignore a busca e a decodificação da instrução. Assuma,
por enquanto que a execução não fique em stall por falta da próxima instrução, mas somente
uma instrução/ciclo pode ser enviada. Considere que o desvio é tomado e que existe um delay
slot de desvio de um ciclo.

Latências além de um ciclo


Loop: LD F2, 0 (RX) Memory LD +4
I0: DIVD F8, F2, F0 Memory SD +1
I1: MULTD F2, F6, F2 ADD, SUB de inteiro +0
I2: LD F4, 0 (RY) Desvios +1
I3: ADDD F4, F0, F4 ADDD +1
I4: ADDD F10, F8, F2 MULTD +5
I5: ADDI RX, RX, #8 DIVD +12
I6: ADDI RY, RY, #8
I7: SD F4, 0(RY)
I8: SUB R20, R4, RX
I9: BNZ R20, LOOP

Exercício 2

Pense no que realmente significam os números de latência – eles indicam o número de ciclos que
determinada função exige para produzir sua saída, e nada mais. Se o pipeline ocasionar stalls
para os ciclos de latência de cada unidade funcional, pelo menos você terá a garantia de que
qualquer par de instruções de ponta a ponta (um “produtor” seguido por um “consumidor”) será
executado corretamente. Contudo, nem todos os pares de instruções possuem um relacionamento
produtor/consumidor. Às vezes, duas instruções adjacente não têm nada a ver uma com a outra.
Quantos ciclos o corpo do loop na sequência de código do exercício 1 exigiria se o pipeline
detectasse dependência de dados verdadeiras e só elas produzissem stall, ao invés de tudo ficar
cegamente em stall só porque uma unidade funcional está ocupada? Mostre o código com <stall>
inserido onde for necessário para acomodar as latências definidas. (Dica: uma instrução com
latência “+2” precisa que dois ciclos de clock de <stall> sejam inseridos na sequência de código.
Pense desta maneira: uma instrução de 1 ciclo possui uma latência 1+0, significando zero estado
de espera extra. Assim, a latência 1+1 implica um ciclo de stall; latência 1+N possui N ciclos de
stall extras).

Exercício 3

Vamos considerar o que conseguimos obter com o escalonamento dinâmico. Considere uma
microarquitetura como a da Figura abaixo. Suponha que as ALUs possam fazer todas as
operações aritméticas (MULTD, DIVD, ADDD, ADDI, SUB) e desvios, e que a estação de
reserva (RS) possa enviar no máximo uma operação para cada unidade funcional por ciclo (uma
operação para cada ALU mais uma operação de memória para a unidade LD/ST)

a) Suponha que todas as instruções da sequência apresentada no Exercício 1 estejam


presentes no RS, sem que qualquer renomeação precise ser feita. Destaque quaisquer
instruções no código onde a renomeação de registradores melhoraria o desempenho
(Dica: Procure hazards RAW e WAW. Considere as mesmas latências de unidade
funcional do Exercício 1)

b) Suponha que a versão com registrador renomeado do código do item (a) esteja presente
na RS no ciclo de clock N, com latências indicadas no Exercício 1. Mostre como a RS
deverá enviar essas instruções fora de ordem, clock por clock, para obter o desempenho
ideal nesse código (Considere as mesmas restrições de RS do item (a). Considere também
que os resultados precisam ser escritos na RS antes que estejam disponíveis para uso, ou
seja, sem bypassing). Quantos ciclos de clock a sequência de código utiliza?
Exercício 4

Neste exercício, vamos examinar como variações no algoritmo Tomasulo se comportam quando
executam o loop abaixo.

DADDIU R4, R1, # 800 ; R1 = upper bound for X


foo: L.D F2, 0 (R1) ; (F2) = X(i)
MUL.D F4, F2, F0 ; (F4) = a* X(i)
L.D F6, 0 (R2) ; (F6) = Y(i)
ADD.D F6, F4, F6 ; (F6) = a * X(i) + Y(i)
S.D F6, 0 (R2) ; Y(i) = a *X(i) + Y(i)
DADDIU R1, R1, #8 ; increment X index
DADDIU R2, R2, #8 ; increment Y index
DSLTU R3, R1, R4 ; test: continue loop?
BNEZ R3, foo ; loop if needed

As unidades funcionais (FUs) são descritas na tabela a seguir:

Tipo da FU Ciclos em EX Número de FU Número de estações


de reserva
Inteiro 1 1 5
Somador PF 10 1 3
Multiplicador PF 15 1 2

Considere o seguinte:

 As unidades funcionais não são pipelined


 Não é realizado renomeação de registradores
 Não há adiamente entre as unidades funcionais; os resultados são comunicados pelo
barramento comum de dados (CDB)
 O estágio de execução (EX) realiza o cálculo efetivo de endereço e os acessos à memória
para loads e stores. Assim, o pipeline é IF/ID/IS/ EX/ WB
 Loads requerem um ciclo de clock
 Os resultados dos estágios IS (emissão – IS) e write-back (WB) requerem um ciclo de
clock cada um
 Há cinco slots de buffer para store e cinco slots de buffer para load.
 Considere que a instrução Branch on Not Equal to Zero (BNEZ) requer um ciclo de
clock.

a) Para este problema use o pipeline MIPS de Tomasulo de despacho único apresentado em
sala de aula (primeira versão do Tomasulo – aula 8), com as latências do pipeline
definidas na tabela anterior. Para três iterações do loop, mostre o número de ciclos de
stall para cada instrução e em que ciclo de clock cada uma delas começa a ser executada
(ou seja, entra no seu primeiro ciclo EX). Não faça renomeação de registradores,
considere a dependência entre os registradores em diferentes loops. Quantos ciclos
cada iteração leva? Dê a sua resposta em forma de tabela com os seguintes títulos de
coluna:
a. Iteração (número da iteração do loop)
b. Instrução
c. Envia (ciclo em que a instrução é enviada)
d. Executa (ciclo em que a instrução é executada)
e. Acesso à memória (ciclo em que a memória é acessada)
f. Escrita no CDB (ciclo em que o resultado é gravado no CDB).
g. Comentário (descrição de qualquer evento que a instrução esteja aguardando.
Mostre três iterações do loop em sua tabela. Você pode ignorar a primeira instrução

b) Repita o procedimento do item (a), mas desta vez considere um algoritmo Tomasulo de
dois despachos e uma unidade de ponto fluturante totalmente pipelined (FPU).

Exercício 5

Considere um BTB (Branch Target Buffer) que tenha penalizades de zero, dois e dois ciclos de clock
para previsão correta de desvio condicional, previsão incorreta e uma falha de buffer,
respectivamente. Considere também um projeto de BTB que distingue desvios condicionais e não
condicionais, armazenando os endereços alvo para um desvio condicional e a instrução alvo para um
desvio não condicional

a) Qual é a penalidade em ciclos de clock quando um desvio não condicional é encontrado no


buffer?
b) Determine a melhoria da utilização de branch folding para desvios não condicionais.
Suponha uma taxa de acerto de 90%, uma frequência de desvio não condicional de 5% e uma
penalidade de dois ciclos de clock para uma falha de buffer. Quanta melhoria é obtida com
essa modificação? Quão alta deve ser a taxa de acerto para essa melhoria gerar ganho de
desempenho?

Você também pode gostar