Buscar

Desempenho de Organizações de Máquinas

Prévia do material em texto

UNIVERSIDADE DE SÃO PAULO 
SEGUNDO SEMESTRE LETIVO DE 2020 
PROVA P1 
 
1 
 
 
 
Escola EACH TURMA 
Nota do aluno na PROVA 
Curso Sistemas de Informação 
Disciplina Arquitetura de Computador Data da Prova 12/11/20 
Professor Clodoaldo Aparecido de Moraes Lima 
Aluno 
No. USP 
 
 
1ª Questão) Um processador RISC é implementado em duas versões de organização síncrona: uma monociclo, em que cada instrução 
executa em exatamente um ciclo de relógio, e uma versão pipeline de 5 estágios. Os estágios da versão pipeline são: (1) busca de 
instrução, (2) busca de operandos, (3) execução da operação, (4) acesso à memória e (5) atualização do banco de registradores. A 
frequência máxima de operação das organizações foi calculada em 100 MHz para a versão monociclo e 400 MHz para a versão 
pipeline. Um programa X que executa 200 instruções é usado para comparar o desempenho das organizações. Das 200 instruções, 
apenas 40% fazem acesso à memória, enquanto as demais operam apenas sobre registradores internos da organização. Assuma, que o 
programa não apresenta nenhum conflito de dados ou de controle entre instruções que podem estar simultaneamente dentro do pipeline 
da segunda organização. Calcule o tempo de execução do programa X nas organizações monociclo e pipeline. 
 
Organização da máquina Versão 1 - Monociclo 
Período para execução de uma instrução [1/(100 x 10^6)] s = 10 ns 
Período para execução de 200 instruções 200 x 10 ns = 2.000 ns 
 
 
Período do pipeline [1/(400 x 10^6)] s = 2,5 ns 
Período para execução de 200 instruções (Observar o princípio da Figura 1) 
40% fazem acesso à memória (80 instruções – utilizam 5 estágios) 
60% operam apenas sobre registradores internos da organização (120 instruções – utilizam 4 estágios). 
Estágio 1: 200 períodos de clock (200 instruções) 
Estágio 2: tem início no segundo período de clock para a instrução 1. Logo, para execução deste estágio em todas as instruções, temse 
mais um período de clock em relação ao estágio anterior; Estágio 3: .... 
Importante: 40% e 60% (descritos anteriormente) estarão inseridos no tempo necessários à execução do pior caso (5 estágios). 
 Logo, o período para execução das 200 instruções é: (200 + 1 + 1 +1 +1) x 2,5 ns = 510 ns 
 
 C1 C2 C3 C4 C5 C6 C7 C8 C9 
Inst 1 BI DI EX Mem WB 
Instr2 BI DI EX Mem WB 
Instr3 BI DI EX WB 
Instr4 BI DI WB 
Instr5 BI WB 
 
 
 
 
 
 
 
2ª Questão) Supondo que melhoramos uma máquina fazendo as instruções de adição serem executadas 2 vezes mais rápidas, e as 
instruções de multiplicação 4 vezes mais rápidas. Se o tempo de execução de certo benchmark antes do melhoramento é de 100s, 
sendo 20s em adição e 40s em multiplicação. 
a) calcular o speedup 
𝑇𝑎𝑑𝑖çã𝑜
𝑜𝑙𝑑 = 20 
 
𝑇𝑎𝑑𝑖çã𝑜
𝑛𝑒𝑤 = 100 ∗ [(1 − 0.2) +
0.2
2
] = 90 𝑠 
UNIVERSIDADE DE SÃO PAULO 
SEGUNDO SEMESTRE LETIVO DE 2020 
PROVA P1 
 
2 
 
𝑠𝑝𝑒𝑒𝑑𝑢𝑝 =
𝑇𝑎𝑑𝑖çã𝑜
𝑜𝑙𝑑
𝑇𝑎𝑑𝑖çã𝑜
𝑛𝑒𝑤 =
100
90
= 1.11 
 
𝑇𝑎𝑑𝑖çã𝑜
𝑜𝑙𝑑 𝑇𝑚𝑢𝑙𝑡 = 40 
𝑇𝑎𝑑𝑖çã𝑜
𝑛𝑒𝑤 = 100 ∗ [(1 − 0.4) +
0.4
4
] = 70 𝑠 
𝑠𝑝𝑒𝑒𝑑𝑢𝑝 =
𝑇𝑎𝑑𝑖çã𝑜
𝑜𝑙𝑑
𝑇𝑎𝑑𝑖çã𝑜
𝑛𝑒𝑤 =
100
70
= 1.43 
 
 
b) calcular o fator de melhoramento total 
 
𝑇𝑡𝑜𝑡𝑎𝑙
𝑛𝑒𝑤 = 100 − 𝑅𝑇𝑎𝑑𝑖çã𝑜
𝑛𝑒𝑤 − 𝑅𝑇𝑎𝑑𝑖çã𝑜
𝑛𝑒𝑤 = 100 − 10 − 30 = 60 
𝑠𝑝𝑒𝑒𝑑𝑢𝑝 =
𝑇𝑎𝑑𝑖çã𝑜
𝑜𝑙𝑑
𝑇𝑎𝑑𝑖çã𝑜
𝑛𝑒𝑤 =
100
60
= 1,67 
 
3ª Questão) Suponhamos que melhoramos uma máquina fazendo todas as instruções de ponto-flutuante serem executadas 5 vezes 
mais rápido. 
a) Se o tempo de execução de certo benchmark antes do melhoramento é de 10s, qual seria o speedup se metade dos 10s é 
despendida em instruções de ponto-flutuante? 
𝑇𝑎𝑑𝑖çã𝑜
𝑛𝑒𝑤 = 10 ∗ [(1 − 0.5) +
0.5
5
] = 6 𝑠 
𝑠𝑝𝑒𝑒𝑑𝑢𝑝 =
𝑇𝑎𝑑𝑖çã𝑜
𝑜𝑙𝑑
𝑇𝑎𝑑𝑖çã𝑜
𝑛𝑒𝑤 =
10
6
= 1,67 
 
b) Estamos procurando um benchmark para testar a nova unidade de ponto-flutuante acima, e queremos que o benchmark todo 
mostre um speedup de 3. Um benchmark é executado em 100s, com o antigo hardware de ponto-flutuante. Quanto do tempo de 
execução as instruções de ponto-flutuante devem corresponder nesse programa para que possamos produzir o speedup desejado 
nesse benchmark? 
 
𝑠𝑝𝑒𝑒𝑑𝑢𝑝 =
𝑇𝑝𝑓
𝑜𝑙𝑑
𝑇𝑝𝑓
𝑛𝑒𝑤 ⟶ 𝑇𝑝𝑓
𝑛𝑒𝑤 =
𝑇𝑝𝑓
𝑜𝑙𝑑
𝑠𝑝𝑒𝑒𝑑𝑢𝑝
=
100
3
 
 
 
100
3
= 100 ∗ [(1 − 𝑓𝑟𝑎𝑐𝑡𝑖𝑜𝑛) +
𝑓𝑟𝑎𝑐𝑡𝑖𝑜𝑛
5
] 
 
5
3
= [5 − 4 ∗ 𝑓𝑟𝑎𝑐𝑡𝑖𝑜𝑛] 
 
𝑓𝑟𝑎𝑐𝑡𝑖𝑜𝑛 =
10
12
= 83% 
 
4ª Questão) Apresente os valores dos sinais de controle ALUSrc, ALUOp, MemRead, MemWrite, RegWrite, MemtoReg e RegDst, na 
implementação da instrução addi no MIPS pipeline, indicando em que estágio cada um desses sinais são usados. 
UNIVERSIDADE DE SÃO PAULO 
SEGUNDO SEMESTRE LETIVO DE 2020 
PROVA P1 
 
3 
 
 
 
Addi $5, $6, 10 Add $5, $6, $7 
 
ALUSrc ALUOp MemRead, MemWrite RegWrite, MemtoReg RegDst 
1 00 0 0 1 0 0 0,25 
EX EX MEM MEM WB WB WB 0,25 
Cada item incorreto 0,07 
 
5ª Questão) Por que a instrução addi não pode ser considerada uma instrução de formato R, com opcode igual 000000? 
 6 5 5 5 5 6 
 OP Rs Rt const 
 OP RS RT RD Shamt function 
 
 
6ª Questão) Descreva detalhadamente o que cada código faz 
a) 0,5 
b) 0,5 
a) .text 
main: 
li $v0, 5 
syscall 
move $t0, $v0 
li $v0, 5 
syscall 
move $t1, $v0 
bgt $t0, $t1, t0_bigger 
move $t2, $t1 
b endif 
t0_bigger: 
move $t2, $t0 
endif: 
move $a0, $t2 
li $v0, 1 
syscall 
li $v0, 10 
syscall 
b) .text 
 .globl main 
main: 
li $a0, 5 
jal Funcao 
move $s0, $v0 
li $v0, 10 
syscall 
Funcao: 
sub $sp,$sp,4 
sw $ra, 0($sp) 
li $t1, 1 
slti $t0, $a0, 2 
beq $t0, $zero, Calcula 
add $v0, $zero, $zero 
beq $a0, $zero, Sai 
add $v0, $t1, $zero 
Sai: 
lw $ra, 0($sp) 
add $sp, $sp, 4 
jr $ra 
Calcula: 
UNIVERSIDADE DE SÃO PAULO 
SEGUNDO SEMESTRE LETIVO DE 2020 
PROVA P1 
 
4 
 
add $a1, $a0, $zero 
Loop: 
sub $a1, $a1, $t1 
jal Multiplica 
add $a0, $v0, $zero 
bne $a1, $t1, Loop 
j Sai 
Multiplica: 
mult $a0, $a1 
mflo $v0 
 jr $ra 
 
 
main: 
li $v0, 5 
 syscall 
Realiza a leitura de um valor inteiro 
 move $t0, $v0 Copia o valor lido para $t0 
li $v0, 5 
 syscall 
Realiza a leitura de um valor inteiro 
 move $t1, $v0 
 bgt $t0, $t1, t0_bigger Se $t0 > $t1 vá para t0_bigger 
 move $t2, $t1 Copia o valor $t1 para $t2 
b endif Instrução branch 
t0_bigger: 
 move $t2, $t0 Copia o valor $t0 para $t2 
endif: 
 move $a0, $t2 Copia o valor $a0 para $t2 
li $v0, 1 
 syscall 
li $v0, 10 Realiza EXIT 
 syscall 
 
Faz a leitura de 02 valores e imprime o maior valor na tela 0.2 
 
Comentários sobre o código 0.3 
 
 
 
.text 
.globl main 
 
main: # Programa Principal 
li $a0, 5 # Parametro = 5 
jal funcao # Chama a função fatorial, 
# armazenando o endereco da proxima instrucao em $ra 
move $s0, $v0 # Registrador $s0 recebe o valor resultado 
li $v0, 10 # Serviço do sistema no. 10 : Exit 
Syscall # Chamada de serviço do sistema 
# Obs. Isto é necessário para encerrar aqui o programa 
funcao: # Função Fatorial. Retorna o fatorial de n ($a0) 
sub $sp,$sp,4 # Abre espaço para armazenar 1 item na pilha 
sw $ra, 0($sp) # Armazena o conteúdo do registrador $ra 
# Obs: Caso os registradores $s0 - $s9 fossem alterados, 
seria necessário guardá-los na pilha também, e restaurá-los 
ao fim do procedimento. Por convenção, os registradores 
temporários $t* não precisam ser guardados. 
li $t1, 1 # $t1 = 1 
slti $t0, $a0, 2 # Seta $t0 se $a0 < 2 
UNIVERSIDADE DE SÃO PAULO 
SEGUNDO SEMESTRE LETIVO DE 2020 
PROVA P1 
 
5 
 
beq $t0, $zero, Calcula # Se $t0 não setado, $a0 > 1, portanto Calcula 
add $v0, $zero, $zero # Se não, $v0 = 0 
beq $a0, $zero, Sai # Se $a0 = 0, Sai 
add $v0,$t1, $zero # Se não, $v0 = 1 
Sai: 
lw $ra, 0($sp) # Carrega o registrador $ra da pilha 
add $sp, $sp, 4 # Elimina 1 item da pilha 
jr $ra # Retorna ao programa principal 
Calcula: 
add $a1, $a0, $zero # $a1 = $a0 
Loop: 
sub $a1, $a1, $t1 # $a1 = $a1 - 1 
jal Multiplica # Multiplica $a0 por $a1 
add $a0, $v0, $zero # $a0 = resultado da multiplicação 
bne $a1, $t1, Loop # Enquanto $a1 for diferente de 1, Loop 
j Sai 
Multiplica: 
mult $a0, $a1 # Multiplica $a0 por $a1 
mflo $v0 # resultado em $v0 
# Obs:. O resultado da instrução mult fica armazenado nos 
registradores # $hi e $lo. Para buscar os seus valores, 
utiliza-se mflo e mfhi. Para # podermos trabalhar com 
valores maiores em nosso programa bastaria retornar o $lo em 
$v0 e o $hi em $v1. 
jr $ra # Retorna 
 
 
 
Implementar um procedimento para o cálculo do fatorial de n. Tal procedimento deverá ser feito de tal maneira a chamar um 
segundo procedimento. 
 
 
 
 
 
 
 
7ª Questão) Considere o seguinte loop em MIPS 
LOOP: slt $t2, $0, $t1  $t1 > 0 
beq $t2, $0, DONE 
subi $t1, $t1, 1 
addi $s2, $s2, 2 
j LOOP 
DONE: 
a)Assuma que o registrador $t1 é inicializado com o valor 0. Qual é o valor no registrador $S2 assumindo que $S2 inicialmente 
possui valor zero. 
while (t1>0){ 
t1=t1-1; 
s2=s2+2; 
} 
S2 será igual a 0 
b)Para o código escrito em assembly MIPS, escreva a rotina equivalente em C. Assuma que os registradores $s1, $s2, $t1 e $t2 são 
inteiros A, B, i e temp, respectivamente. 
UNIVERSIDADE DE SÃO PAULO 
SEGUNDO SEMESTRE LETIVO DE 2020 
PROVA P1 
 
6 
 
int A,B,i, temp; 
while (i>0){ 
i=i-1; 
B=B+2; 
} 
 
8ª Questão) Traduza o seguinte código em C para assembly MIPS. Use o número mínimo de instruções. Assuma que os valores de 
a, b, i e j estão armazenados nos registradores $s0, $s1, $t0 e $t1 respectivamente. Também, assuma que registrador $s2 armazene o 
endereço base da vetor D 
for(i=0; i<a; i++) 
for(j=0; j<b; j++) 
D[4*j] = i + j; 
 
addi $t0, $zero, 0 # i = 0 
FOR1: slt $t2, $t0, $s0 # $t2 = 1 se i < a 
beq $t2, $zero, SAIDAe # se i >= a sai do for externo 
addi $t1, $zero, 0 # j = 0 
FOR2: slt $t3, $t1, $s1 # $t3 = 1 se j < b 
beq $t3, $zero, SAIDAi # se j >= b sai do for interno 
sll $t4, $t1, 4 # $t4 = 4*j (como cada palavra tem 4B, pula 16B) 
add $t5, $s2, $t4 # $t5 = &D[4*j] 
add $t6, $t0, $t1 # $t6 = i + j 
sw $t6, 0($t5) # D[4*j] = i + j 
addi $t1, $t1, 1 # j++ j FOR2 # de volta ao la¸co interno 
SAIDAi: addi $t0, $t0, 1 # i++ 
j FOR1 # de volta ao la¸co externo 
 SAIDAe: 
 
9ª Questão) Traduza o seguinte loop para C. Assuma que o inteiro i é armazenado no registrador $t1, $s2 armazena o inteiro 
chamado result, e $s0 armazena o endereço base do inteiro MemArray 
add $t1, $0, $0 
LOOP: lw $s1, 0($s0) 
add $s2, $s2, $s1 
addi $s0, $s0, 4 
addi $t1, $t1, 1 
slti $t2, $t1, 100 
bne $t2, $0, LOOP 
 
int result; 
int i =0; 
do{ 
 result = result + MemArray[i]; 
 i=i+1; 
while{i<100} 
 
 
UNIVERSIDADE DE SÃO PAULO 
SEGUNDO SEMESTRE LETIVO DE 2020 
PROVA P1 
 
7 
 
10ª Questão) Os problemas neste exercício referem-se a seguinte sequência de instruções, e suponha que seja executada em um 
pipeline de 5 estágios: 
add $5,$2,$1 
lw $3,4($5) 
lw $2,0($2) 
or $3,$5,$3 
sw $3,0($5) 
a)Se não houver encaminhamento ou detecção de conflito, insira nops para garantir a execução correta. 
add $5,$2,$1 
NOP 
NOP 
lw $3,4($5) 
lw $2,0($2) 
NOP 
or $3,$5,$3 
NOP 
NOP 
sw $3,0($5) 
 C1 C2 C3 C4 C5 
add 
$5,$2,$1 
BI DI EX Mem WB 
NOP BI DI EX MEM WB 
NOP BI DI EX MEM WB 
lw 
$3,4($5) 
 BI DI EX MEM WB 
lw 
$2,0($2) 
 BI DI EX MEM WB 
NOP BI DI EX MEM 
or 
$3,$5,$3 
 BI DI EX MEM WB 
NOP BI DI EX MEM WB 
NOP BI DI EX MEM 
sw 
$3,0($5) 
 BI DI 
 
 
 
 
 
b)Use nops apenas quando um conflito não puder ser evitado alterando ou reorganizando essas instruções. Você pode assumir o 
registro $7 pode ser usado para manter valores temporários em seu código modificado. 
add $5,$2,$1 
lw $3,4($5) 
lw $2,0($2) 
or $3,$5,$3 
UNIVERSIDADE DE SÃO PAULO 
SEGUNDO SEMESTRE LETIVO DE 2020 
PROVA P1 
 
8 
 
sw $3,0($5) 
 
c)Se o processador tem encaminhamento, mas esquecemos de implementar a unidade de detecção de conflito, o que acontece 
quando este código é executado? 
Add $5,$2,$1 BI DI EX MEM WB 
lw $3,4($5) BI DI EX MEM WB 
lw $2,0($2) BI DI EX MEM WB 
or $3,$5,$3 BI DI EX MEM WB 
sw $3,0($5) BI DI EX MEM WB 
 
Não haveria nenhum problema na execução do programa. 
 
11ª Questão) Os problemas neste exercício referem-se a seguinte sequência de instruções, e suponha que seja executada em um 
pipeline de 5 estágios: 
add $5,$2,$1 
lw $7,4($5) 
or $3,$5,$3 
lw $2,0($2) 
sw $7,0($5) 
a)Se não houver encaminhamento ou detecção de conflito, insira nops para garantir a execução correta. 
add $5,$2,$1 
NOP 
NOP 
lw $7,4($5) 
or $3,$5,$3 
lw $2,0($2) 
NOP 
sw $7,0($5) 
 
add 
$5,$2,$1 
BI DI EX MEM WB 
NOP BI DI EX MEM WB 
NOP BI DI EX MEM WB 
lw 
$7,4($5) 
 
 BI DI EX MEM WB 
or 
$3,$5,$3 
 
 BI DI EX MEM WB 
lw 
$2,0($2) 
 BI DI EX MEM WB 
sw 
$7,0($5) 
 
 BI EX 
UNIVERSIDADE DE SÃO PAULO 
SEGUNDO SEMESTRE LETIVO DE 2020 
PROVA P1 
 
9 
 
 
 
 
 
 
 
b)Use nops apenas quando um conflito não puder ser evitado alterando ou reorganizando essas instruções. Você pode assumir o 
registro $7 pode ser usado para manter valores temporários em seu código modificado. 
add $5,$2,$1 
NOP 
NOP 
lw $7,4($5) 
lw $2,0($2) 
or $3,$5,$3 
sw $7,0($5) 
 
c)Se o processador tem encaminhamento, mas esquecemos de implementar a unidade de detecção de conflito, o que acontece 
quando este código é executado? 
Add $5,$2,$1 BI DI EX 
$5 
MEM 
$5 
WB 
or $3,$5,$3 BI DI EX MEM WB 
lw $3,4($5) BI DI EX MEM 
$3 
WB 
lw $2,0($2) BI DI EX MEM WB 
sw $3,0($5) BI DI EX MEM WB 
 
Não haveria nenhum problema na execução do programa. 
 
 
12ª Questão) Assuma que o seguinte código é executado sobre um processador pipeline com 5 estágio, com adiantamento e um 
preditor de desvio (o qual assume que todo desvio para trás é tomado) 
 
a)Desenhe o diagrama de execução para este código, assumindo que não há slots de atraso e o que desvio executa no estágio MEM 
Sem preditor 
UNIVERSIDADE DE SÃO PAULO 
SEGUNDO SEMESTRE LETIVO DE 2020 
PROVA P1 
 
10 
 
 1 2 3 4 5 6 7 8 9 10 11 12 
lw $1,40 ($6) BI DI EX Mem WAR 
beq $2,$3, Label2 BI DI EX MEM WAR 
Add $1, $6, $4 BI DI EX X X 
beq $1, $2, Labe1 BI DI X X X 
sw $2, 20($4) BI X X X X 
beq $1, $2, Labe1 BI DI EX MEM WAR 
sw $2, 20($4) BI DI EX MEM WAR 
and $1, $1, $4 BI DI EX MEM WAR 
 
 
Com preditor (atua no estagio DI tomando decisão) 
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
lw $1,40 ($6) BI DI EX MEM WAR 
beq $2,$3, Label2 BI DI EX MEM WAR Preditor assume que desvio não deve ser tomado 
no clock igual a 3. Instrução em verde é carregada 
baseada na decisão do preditor 
 
Add $1, $6, $4 BI DI EX X X 
beq $1, $2, Labe1 BI DI X X X 
sw $2, 20($4) BI X X X X 
beq $1, $2, Labe1 BI DI EX MEM WB 
sw $2, 20($4) BI X X X X Instrução descartada pelo preditor 
lw $1,40 ($6) BI DI X X X 
beq $2,$3, Label2 BI X X X X 
sw $2, 20($4) BI DI EX MEM WB 
and $1, $1, $4 BI DI EX MEM WB 
 
 
b)Qual é o speed-up alcançado ao mover a execução de desvio para o estagio DI. Assuma que a comparação no estágio DI não afeta 
o tempo de ciclo de clock. 
 1 2 3 4 5 6 7 8 9 10 
lw $1,40 ($6) BI DI EX MEM WAR 
beq $2,$3, Label2 BI DI EXMEM WAR 
Add $1, $6, $4 BI X X X X 
beq $1, $2, Labe1 BI DI EX MEM WAR 
sw $2, 20($4) BI DI EX MEM WAR 
and $1, $1, $4 BI DI EX MEM WAR 
 
Speed_up =12/10 = 1.2 em relação a arquitetura sem preditor 
Speed_up =15/10 = 1.5 em relação a arquitetura com preditor 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
UNIVERSIDADE DE SÃO PAULO 
SEGUNDO SEMESTRE LETIVO DE 2020 
PROVA P1 
 
11

Continue navegando