You are on page 1of 5

Universidade Federal de Minas Gerais – UFMG

Instituto de Ciências Exatas – ICEx


Departamento de Ciência da Computação – DCC

Prova 2 - 2022/01

Disciplina: Organização de Computadores I – DCC 006


Professor: Daniel Fernandes Macedo

Nome: _____________________________________________________

Questão 1 (6 pontos)

A empresa Hard Co. possui um conjunto de unidades funcionais


implementadas, e está desenvolvendo uma nova linha de processadores
seguindo o conjunto de instruções do RISC-V. O processador irá suportar
instruções lógico-aritméticas com e sem imediato, load-stores e também
desvios. A empresa vai implementar processadores seguindo a mesma
separação de tarefas por ciclo do nosso livro texto.

a) Classifique as máquinas do melhor para o pior desempenho (e a


máquina X tem mais vazão que Y, então Y recebe 1 na sua coluna e X
recebe 2. Não se esqueça que para algumas métricas um valor menor
pode ser pior!) – 3 pontos

Métrica Uniciclo Multiciclo sem Multiciclo com


pipeline pipeline
Tempo de ciclo 1 3 (2 desconsiderando 2
o controle mais
complexo)
CPI (# ciclos por 3 2 1
instrução)
IPC (instr. 3 1 (2 desconsiderando 2 (3)
completadas por stalls)
ciclo)

b) Uma última opção que a Hard Co. quer considerar é o desenvolvimento


de um processador superescalar, podendo disparar um load/store e uma
instrução logico-aritmética por ciclo. Indique, para cada métrica abaixo,
qual deve melhorar, piorar ou se manter inalterada, explicando a sua
opinião. – 3 pontos

Considerando a comparação com o multiciclo com pipeline


Tempo de ciclo – igual. Mantém o mesmo caminho de dados.
CPI – Igual. Mantém o mesmo caminho de dados.
IPC – Maior. Entrega duas instruções por ciclo
Questão 2 (10 pontos)

O código abaixo está escrito em RISC-V. Ele irá executar em um processador


que possui pipeline similar ao que foi desenvolvido no nosso livro-texto (ou
seja, possui unidade de adiantamento). Responda:

01 addi x10, x0, 1


02 addi x11, x0, 2
03 ld x4, 10(x7)
04 ld x5, 14(x7)
05 add x3, x4, x5
06 or x0, x10, x11
07 ld x6, 18(x7)
08 repete: beq x5, x6, sai
09 subi x5, x5, 1
10 beq x0, x0, repete
11 sai: sub x1, x4, x5

a) Em quais linhas de código temos hazards (perigos) de dados? 5 e 8


b) Em quais linhas do código temos hazards (perigos) de controle? 8 e 10
c) Em quais linhas o pipeline irá gerar um stall devido aos hazards? 5, 8,
10
d) Re-escreva o código acima da forma mais eficiente, adicionando a
menor quantidade possível de nops, de forma a reduzir os hazards.

01 addi x10, x0, 1


02 addi x11, x0, 2
03 ld x4, 10(x7)
04 ld x5, 14(x7)
05 ld x6, 18(x7)
06 add x3, x4, x5
07 or x0, x10, x11
08 repete: beq x5, x6, sai
09 subi x5, x5, 1
10 beq x0, x0, repete
11 sai: sub x1, x4, x5

Aqui considerei também quem colocou dois nops depois de cada


instrução de desvio. Poderão ser gerados dois stalls a cada desvio devido
ao hazard de controle.
e) É possível resolver todos os hazards (controle e dados) apresentados?
Em caso negativo, proponha formas em hardware para minimizar a
quantidade de stalls nas situações que não puderam ser evitadas.

Não, ainda temos os hazards de controle. Eles podem ser amenizados


com mecanismos de predição de desvio ou dicas na instrução se o
desvio deve ser tomado ou não.
Questão 3 (5 pontos)

Dado o caminho de dados abaixo de uma máquina uniciclo, indique os valores


dos bits de controle (0, 1 ou X – don’t care) para as instruções abaixo do
conjunto de instruções do RISC-V.

Instrução RegWrite AluSrc PCSrc MemRead Memwrite MemToReg


lw 1 1 0 1 0 0
sw 0 1 0 0 1 X
sub 1 0 0 X 0 1
beq 0 0 ? X 0 X
jal 1 1 1 x 0 x

 Marquei com ? o PCSrc do BEQ porque faltou um AND no caminho de


dados, complicando a análise. Qualquer resposta aqui foi considerada
certa.
 Quem indicou que considerou a ordem inversa dos bits no MUX, ou que
percebi que houve uma inversão de todos os bits de controle, também
teve os pontos considerados.

Questão 4 (4 pontos)

O processador multiciclo com pipeline possui registradores temporários entre


os seus estágios, por exemplo os registradores EX/MEM entre os estágios EX
e MEM. Explique:
A) Por que razão temos esses registradores entre os estágios?

Para que o sinal de entrada da lógica combinacional do estágio fique


constante durante todo o estágio. Também evita que o resultado de um
estágio anterior seja encaminhado para o estágio seguinte antes do final
do ciclo, e bagunce a computação.

B) O estágio MEM escreve a sua saída para os registradores temporários


MEM/WB. Qual seria a vantagem de escrever para esses registradores
temporários, no lugar de já escrever o resultado no banco de
registradores?

Escrever para os registradores temporários é mais rápido que escrever


para o banco de registradores (porque o banco de registradores tem uma
implementação mais complexa que um único registrador, devido a termos
o controle de escrita, a seleção dos registradores a serem lidos/escritos –
um MUX com muitas portas atrasa muito o caminho de dados). Se a gente
escrevesse direto, o tempo do processamento do estágio MEM/WB ficaria
muito grande, impactando o tempo de ciclo.

You might also like