Você está na página 1de 25

Arquitetura e Organização de Computadores

Prova 2 - TECAD 2021_1


Háida Lorencini - 2019021352
Jourdan Henrique Martins - 2018019850
Thiago de Mello Leivas - 2017098226

1) Caminho de Dados e Sinais de controle do MIPS Ciclo Único. (8 pontos).


Considere a arquitetura MIPS Ciclo Único mostrada abaixo, onde são
identificados com “números em balões” alguns dos sinais que se
propagam pela via de dados. Para a sequência de instruções e os valores
iniciais dados a seguir, preencha a tabela com os valores solicitados
(escreva em hexadecimal o valor pedido).

A tabela a seguir foi preenchida de acordo com a sequência de instruções


iniciais, para a arquitetura Single cycle:

Instrução 1 2 3 4 5 6

lb $t0, 3($s0) 0x00A21008 0x00000008 0x10010000 0x00000080 0x00000003 0x00000003


(Big Endian)

lw $t4, 0($s1) 0x00A2100C 0x0000000C 0x1001000F 0x10010008 0x00000000 0x00000000

lb $t5, 0($t4) 0x00A21010 0x0000000D 0x10010008 0x0000009D 0x00000000 0x00000000


(Little Endian)

add $t2, $t0, $t5 0x00A21014 0x0000000A 0x00000080 0x0000011D 0x00005020 0x0000009D

addi $t2, $t2, 0x00A21018 0x0000000A 0x0000011D 0x0000012C 0x0000000F 0x0000000F


0xF

beq $t2, $t3, 0x00A2101C 0x0000000B 0x0000012C 0xFFD2BB68 0x00021720 0x002D45C4


enlace

A seguir são mostrados os resultados obtidos para a arquitetura Single cycle


com Pipeline:
Instrução 1 2 3 4 5 6

lb $t0, 3($s0) 0x00A21008 0x00000008 0x10010000 0x00000080 0x00000003 0x00000003


(Big Endian)

lw $t4, 0($s1) 0x00A2100C 0x0000000C 0x1001000F 0x10010008 0x00000000 0x00000000

lb $t5, 0($t4) 0x00A21010 0x0000000D 0x10010008 0x0000009D 0x00000000 0x00000000


(Little Endian)

add $t2, $t0, $t5 0x00A21017 0x0000000A 0x00000080 0x0000011D 0x00005020 0x0000009D

addi $t2, $t2, 0x00A21018 0x0000000A 0x0000011D 0x0000012C 0x0000000F 0x0000000F


0xF

beq $t2, $t3, 0x00A2101C 0x0000000B 0x0000012C 0xFFD2BB68 0x00021720 0x002D45C4


enlace

É possível perceber que os valores da tabela não se alteraram. Isso se deve


ao fato de que, com a implementação do Pipeline, as alterações ocorrem na análise
temporal, sendo possível executar mais de uma instrução em um mesmo período,
mas não havendo alterações no formato das instruções.
O diagrama reorganizado para a arquitetura single cycle com pipeline é
mostrado a seguir:
2) MIPS Pipeline, Multiciclo e Ciclo Único. (22 pontos). Considere somente as
informações abaixo que forem relevantes para a sua solução. Programa que
será executado:
1: lw $t1, 0($t0)
2: lw $t2, 4($t0)
3: add $t3, $t1, $t2
4: beq $t1, $t2, 0xC
5: lw $t4, 8($t0)
6: sw $t3, 12($t0)
7: add $t1, $t1, $t3
8: sw $t5, 16($t0)

2.1) Single cycle (3 pontos): Responda os questionamentos a seguir para 3, 5 e


8 ciclos de clock:

a) Considere que a CPU seja implementada na modalidade Ciclo Único. Em


quantos períodos de clock o programa dado seria executado. Justifique
sua resposta

Uma vez que a arquitetura é de ciclo único, cada instrução leva um ciclo de
clock para ser executada. Portanto, o programa completo levaria 8 ciclos de clock
para ser executado. Para 3 ciclos de clock, o programa seria executado até a terceira
instrução e para 5 ciclos, até a quinta instrução.

b) Apresente os sinais de controle para cada uma das instruções acima.

Os sinais de controle são mostrados na tabela a seguir:

Instrução opcode RegWrit RegDs ALUSr Branc MemWrit MemtoRe ALUop


e t c h e g

lw $t1, o($t0) 100011 1 0 1 0 0 1 00

lw $t2, 4($t0) 100011 1 0 1 0 0 1 00

add $t3, $t1 000000 1 1 0 0 0 0 10


,$t2

beq $t1, $t2, 000100 0 X 0 1 0 X 01


0xC

lw $t4, 8($t0) 100011 1 0 1 0 0 1 00

sw $t3, 12($t0) 101011 0 X 1 0 1 X 00


add $t1, $t1, 000000 1 1 0 0 0 0 10
$t3

sw $t5, 16($t0) 101011 1 X 1 0 1 X 00

c) Apresente a análise de desempenho para os três casos citados tendo em


consideração a repetição das instruções acima 100 bilhões de vezes. Para
a análise de desempenho, por favor usar as informações disponibilizadas
nas tabelas do slide do tópico 7.

Por meio dos valores da tabela, primeiro calculou-se o tempo de ciclo (um
período de clock):

100 ∗ 109 ∗ (1 𝑐𝑖𝑐𝑙𝑜 / 𝑖𝑛𝑠𝑡𝑟𝑢çã𝑜) ∗ 925 ∗ 10−12 = 925 𝑝 𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠

Assim, para cada um dos casos o tempo total de execução será de:

- 3 ciclos: 100 ∗ 109 ∗ 3 ∗ 925 ∗ 10−12 = 277,5 𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠


- 5 ciclos: 100 ∗ 109 ∗ 5 ∗ 925 ∗ 10−12 = 462,5 𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠
- 8 ciclos: 100 ∗ 109 ∗ 8 ∗ 925 ∗ 10−12 = 740 𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠

2.2) Multicycle (3 pontos): Responda os questionamentos a seguir para 3, 5 e 8


ciclos de clock:
a) Considere que a CPU seja implementada na modalidade Multiciclo. Em
quantos períodos de clock o programa dado seria executado. Justifique
sua resposta.

A quantidade de ciclos de cada uma das instruções contidas no programa e a


quantidade total de ciclos é mostrada a seguir, para cada um dos casos:

3 ciclos

Instrução Ciclos demandados para


execução

lw 3

sw 3

add 3

beq 2
Total: 3 ∗ 3 + 3 ∗ 2 + 3 ∗ 2 + 2 ∗ 1 = 23 𝑐𝑖𝑐𝑙𝑜𝑠

5 ciclos

Instrução Ciclos demandados para


execução

lw 5

sw 4

add 4

beq 3

Total: 5 ∗ 3 + 4 ∗ 2 + 4 ∗ 2 + 3 ∗ 1 = 34 𝑐𝑖𝑐𝑙𝑜𝑠

8 ciclos

Instrução Ciclos demandados para


execução

lw 5

sw 4

add 4

beq 3

Total: 5 ∗ 3 + 4 ∗ 2 + 4 ∗ 2 + 3 ∗ 1 = 34 𝑐𝑖𝑐𝑙𝑜𝑠

O programa seria executado em 34 períodos de clock. Uma vez que para


cada add são 4 períodos, para cada sw são 4 períodos, para cada lw são 5 períodos
e para cada beq são 3 períodos de clock.
b) Apresente o diagrama de fluxo de dados para o conjunto de instruções
solicitadas. Adicionalmente, apresente os sinais de controle para cada
instrução acima.

Sublinhado de amarelo o caminho de lw.

Sublinhado de vermelho o caminho de sw.


Sublinhado de azul o caminho de add.

Sublinhado de verde o caminho de beq

Para 3 ciclos

Na operação beq, a operação PCBranch deve ser feita no segundo ciclo, assim
é necessário acrescentar um somador que recebe a PC+4 do ciclo anterior, além do
valor de SingExtend com o label para o deslocamento de 2 bits do Branch informado.
Sinais de Controle:

op 1º ciclo 2º ciclo 3º ciclo

lw IorD = 0 ALUControl = 10 IorD = 1


IRWrite = 1 ALUSrcA = 1 MemtoReg = 1
RegDst = 0 ALUSrcB = 00 RegWrite = 1
PCWrite = 1
Branch = 0
PCSrc = 0
ALUControl = 10
ALUSrcA = 0
ALUSrcB = 01
RegWrite = 0

sw IorD = 0 ALUControl = 01 IorD =1


MemWrite = 0 ALUSrcA = 1 MemWrite = 1
IRWrite = 1 ALUSrcB = 00
RegDst = x
PCWrite = 1
Branch = 0
PCSrc = 0
ALUControl = 10
ALUSrcA = 0
ALUSrcB = 01
RegWrite = 0

add IorD = 0 ALUControl = 10 MemtoReg = 0


MemWrite = 0 ALUSrcA = 1 RegWrite = 1
IRWrite = 1 ALUSrcB = 00
RegDst = 1
PCWrite = 1
Branch = 0
PCSrc = 0
ALUControl = 10
ALUSrcA = 0
ALUSrcB = 01
RegWrite = 0

beq IorD = 0 ALUControl = 01


MemWrite = 0 ALUSrcA = 1
IRWrite = 1 ALUSrcB = 00
RegDst = x
PCWrite = 1
Branch = 1
PCSrc = 0
ALUControl = 10
ALUSrcA = 0
ALUSrcB = 01
RegWrite = 0

Para 5 ou 8 ciclos

O caminho de dados da arquitetura multiciclo é mostrado a seguir:

No caminho há linhas representando: de vermelho alterações para os


comandos lw e sw; de azul alterações para o comando add; de verde alterações para
o comando beq.
Sinais de Controle:

op 1º ciclo 2º ciclo 3º ciclo 4º ciclo 5º ciclo

lw IorD = 0 ALUSrcA = 0 ALUSrcA = 1 IorD = 1 RegDst = 0


AluSrcA = 0 ALUSrcB = 11 ALUSrcB = 10 MemtoReg = 1
AluSrcB = 01 ALUOp = 00 ALUOp = 00 RegWrite = 1
ALUOp =00
PCSrc =0
IRWrite = 1
PCWrite = 1

sw IorD = 0 ALUSrcA = 0 ALUSrcA = 1 IorD =1


AluSrcA = 0 ALUSrcB = 11 ALUSrcB = 10 MenWrite = 1
AluSrcB = 01 ALUOp = 00 ALUOp = 00
ALUOp =00
PCSrc =0 I
RWrite = 1
PCWrite = 1

add IorD = 0 AluSrcA = ALUSrcA = 0 ALUSrcA = 1 RegDst = 1


0 AluSrcB = 01 ALUSrcB = 11 ALUSrcB = 00 MentoReg = 0
ALUOp =00 PCSrc ALUOp = 00 ALUOp = 10 RegWrite = 1
=0 IRWrite = 1
PCWrite = 1

beq IorD = 0 AluSrcA = ALUSrcA = 0 ALUSrcA = 1


0 AluSrcB = 01 ALUSrcB = 11 ALUSrcB = 00
ALUOp =00 PCSrc ALUOp = 00 ALUOp = 01
=0 IRWrite = 1 PCSrc = 1
PCWrite = 1 Branch

c) Junto com o caminho de dados para o conjunto de instruções acima,


por favor apresente o diagrama do sistema de controle
3 ciclos
5 e 8 ciclos
d) Apresente a análise de desempenho para os três casos citados tendo em
consideração a repetição das instruções acima 100 bilhões de vezes. Para
a análise de desempenho, por favor usar as informações disponibilizadas
nas tabelas do slide do tópico 7.

Para 3 ciclos

O tempo de ciclo será: Tc = Tpcq + Tmux + max(Talu + Tmux’Tmem) + Tsetup


Analisando a tabela e utilizando os dados temos que o tempo de ciclo é de 325
ps. 13.1
CPI = ((3*3) + (3*4) + (2*1)) / (3+4+1) = 2,875
Texec = (100 * 10^9) * (8) * (2,875) * (325 * 10^-12) = 747,5 segundos.

Para 5 e 8 ciclos

O tempo de ciclo será: Tc = Tpcq + Tmux + max(Talu + Tmux’Tmem) + Tsetup


Analisando a tabela e utilizando os dados temos que o tempo de ciclo é de 325
ps.
CPI = ((3*5) + (4*4) + (3*1)) / (3+4+1) = 4,25
Texec = (100 * 10^9) * (8) * (4,25) * (325 * 10^-12) = 1105 segundos.

2.3) Single-cycle com Pipeline (10 pontos): Responda os questionamentos a


seguir para 3, 5 e 8 ciclos de clock:
a. Considere que a CPU seja implementada na modalidade Pipeline sem
forwarding, considerando a existência de Hazards no caminho de dados
e de controle, só teremos Stalls como elemento disponível para retardar
o pipeline. Em quantos períodos de clock o programa dado seria
executado. Justifique onde você precisou incluir stalls, flush, etc. Ex.:
Entre a instrução 2 e a instrução 3. Apresentar diagrama.

3 ciclos
𝐶𝑙𝑜𝑐𝑘𝑠 = [3 + (𝑛 − 1)]

Dado que n é quantidade de linhas de instrução, ou seja, n=8. O número de


clocks será igual a 10.
Além disso, foi preciso incluir um stall entre as instruções 2 e 3. Portanto,
temos que 10 + 1 = 11 ciclos de clock.

5 ciclos
𝐶𝑙𝑜𝑐𝑘𝑠 = [5 + (𝑛 − 1)]

Dado n=8, o número de clocks será igual a 12.


Entretanto, foi necessário incluir dois stall entre as instruções 2 e 3. Dessa
forma, temos que 12 + 2 = 14 ciclos de clock.

8 ciclos
14 ciclos de clocks.

b. Considere que a CPU seja implementada na modalidade Pipeline com


forwarding, considerando a existência de Hazards no caminho de dados
e de controle, além de Stalls como elemento disponível para retardar o
pipeline. Em quantos períodos de clock o programa dado seria
executado. Justifique onde você precisou incluir stalls, flush, etc. Ex.:
Entre a instrução 2 e a instrução 3. Apresentar diagrama.

3 ciclos

𝐶𝑙𝑜𝑐𝑘𝑠 = [3 + (𝑛 − 1)]
Como não foi necessário a inclusão de stalls, o número de clocks será igual a 10.

5 ciclos
𝐶𝑙𝑜𝑐𝑘𝑠 = [5 + (𝑛 − 1)]
Inicialmente o número de clocks seria igual a 12. Entretanto, foi necessário
incluir um stall entre as instruções 2 e 3. Dessa forma, temos que 12 + 1 = 13 ciclos
de clock.
8 ciclos
Também será constituído de 13 ciclos de clock.

c. Reordene o código e implemente renomeação de registros de forma que


seja reduzido o número de stalls, RAW, WAR e WAW na sequência de
instruções, sem mudar a lógica do programa.

A função beq $t1, $t2, 0xC, torna-se um loop que retorna para a
posição de memória 0xc (linha 4), caso $t1 for igual a $t2. Dessa forma, as opções
para a reordenação do código, sem que a sua lógica seja alterada, são limitadas.
Entretanto, é possível subir o comando lw $t4, 8($t0) para a linha 3, de
maneira que o stall necessário entre o lw de lw $t1, 0($t0) , lw $t2, 4($t0)
e add $t3, $t1, $t2, possa ser substituído por somente um forwarding. Tal
modificação não altera a lógica do programa, já que caso $t1 for igual a $t2, o loop
irá repetir apenas a soma infinitas vezes. E caso $t1 for diferente a $t2, a lógica não
será modificada sem a linha lw $t4, 8($t0), já que os registradores
continuaram contendo os mesmos resultados de antes.

d. Apresente os sinais de controle para cada uma das instruções acima.


Pipeline 3 ciclos

Instrução opcode RegWrite RegDst ALUSr Branch MemWrite MemtoReg


c

lw $t1, o($t0) 100011 1 0 1 0 0 1

lw $t2, 4($t0) 100011 1 0 1 0 0 1

add $t3, $t1 ,$t2 000000 1 1 0 0 0 0

beq $t1, $t2, 0xC 000100 0 X 0 1 0 X

lw $t4, 8($t0) 100011 1 0 1 0 0 1

sw $t3, 12($t0) 101011 0 X 1 0 1 X

add $t1, $t1, $t3 000000 1 1 0 0 0 0

sw $t5, 16($t0) 101011 1 X 1 0 1 X

Pipeline 5 e 8 ciclos

Instrução opcode RegWrite RegDst ALUSr Branch MemWrite MemtoReg


c

lw $t1, o($t0) 100011 1 0 1 0 0 1


lw $t2, 4($t0) 100011 1 0 1 0 0 1

add $t3, $t1 ,$t2 000000 1 1 0 0 0 0

beq $t1, $t2, 0xC 000100 0 X 0 1 0 X

lw $t4, 8($t0) 100011 1 0 1 0 0 1

sw $t3, 12($t0) 101011 0 X 1 0 1 X

add $t1, $t1, $t3 000000 1 1 0 0 0 0

sw $t5, 16($t0) 101011 1 X 1 0 1 X

Código reordenado

Instrução opcode RegWrite RegDst ALUSr Branch MemWrite MemtoReg


c

lw $t1, o($t0) 100011 1 0 1 0 0 1

lw $t2, 4($t0) 100011 1 0 1 0 0 1

lw $t4, 8($t0) 100011 1 0 1 0 0 1

add $t3, $t1 ,$t2 000000 1 1 0 0 0 0

beq $t1, $t2, 0xC 000100 0 X 0 1 0 X

sw $t3, 12($t0) 101011 0 X 1 0 1 X

add $t1, $t1, $t3 000000 1 1 0 0 0 0

sw $t5, 16($t0) 101011 1 X 1 0 1 X

e. Junto com o caminho de dados para o conjunto de instruções acima,


por favor apresente o diagrama do sistema de controle e o sistema de
controle de hazards.
A função lógica de encaminhamento do estágio de decodificação forwaward é
dada abaixo.

Já a função lógica de detecção de stall para um branck é descrita da seguinte forma.

f. Apresente a análise de desempenho para os três casos citados tendo


em consideração a repetição das instruções acima 100 bilhões de vezes.
Para a análise de desempenho, por favor usar as informações
disponibilizadas nas tabelas do slide do tópico 7.

3 ciclos sem forwarding


5 e 8 ciclos sem forwarding

3 ciclos com forwarding

5 e 8 ciclos com forwarding


Código reordenado

2.4) Multicycle com Pipeline (6 pontos):


Propor um caminho de dados, controle de hazards e sistema de controle para
uma microarquitetura multicycle com pipeline.

O diagrama a seguir é um exemplo de Multicycle com Pipeline. Podemos


observar que a instrução e a memória de dados ocupam vários ciclos, entretanto, o
diagrama continua se constituindo de um pipeline, de modo que as instruções são
processadas de forma concorrente e que uma nova instrução pode ser iniciada a
cada clock.
O caminho de dados seria conforme a figura a seguir.

Powered by TCPDF (www.tcpdf.org)


Índice de comentários

13.1 A equação de calculo do Tc muda, devido que vocês mudaram a configuração dos clocks!!!!

Powered by TCPDF (www.tcpdf.org)

Você também pode gostar