Você está na página 1de 6

Universidade Metodista de Angola

Faculdade de Engenharia e Arquitetura


Curso Engenharia Informatica

TRABALHO DE ARQUITETURA DE SISTEMAS DE COMPUTADORES

Tema: Resolução do Exercício 6


Universidade Metodista de Angola
Faculdade de Engenharia e Arquitetura
Curso Engenharia Informatica

TRABALHO DE ARQUITERURA DE SISTEMAS DE COMPUTADORES

Tema: Resolução do Exercício 6

Grupo nº 16

Integrantes do Grupo:

44251 – Eduardo Lucas Zino Difuila

46516 – Geovany Ramos

45079 – Simão Pedro

____________________________

Docente
Índice
Enunciado.........................................................................................................................................1

Primeira pergunta.............................................................................................................................2

Segunda pergunta.............................................................................................................................3
Enunciado

Considere um processador MIPS com pipeline de cinco estágios e tempo de ciclo de 10ns asuma
que você está executando um programa, com uma fracção f, onde todas intruções imediatamente
após um load, dependem do resultado a instruções load.

A) Com o fowarding habilitado, qual o tempo total de execução de N intruções, em termos de


f?
B) Considere agora um cenário onde o estágio MEM e os registradores do pipeline do
estágio precisam de 12ns. Há duas possibilidades: dividir o estágio em dois (MEM1 e
MEM2) ou aumentar o tempo de ciclo para 12ns. Definindo um novo tempo de ciclo mas
mantendo a mesma quantidade de estágios. Para um programa que possuí as
características do enunciado acima, quando a primeira opção é melhor que a segunda?
Sua resposta deve ser baseada no valor de f.

1
Primeira pergunta

1). Com o fowarding habilitado, qual o tempo total de execução de N instruções, em termos de f?

R: Com o forwarding habilitado, as instruções que dependem do resultado de uma instrução


anterior podem ser executadas antes de a instrução anterior gravar seu resultado na memória ou
no registrador. Isso reduz a necessidade de esperar por dados armazenados em registradores ou na
memória e, portanto, pode reduzir o tempo total de execução do programa.

Para calcular o tempo total de execução de N instruções com uma fração f, podemos usar a
seguinte fórmula:

Tempo total de execução = (N * (5 - f) + (N - 1) * f) * Ciclo de relógio

N * (5 - f) representa o número de ciclos de clock necessários para executar instruções que não
dependem do resultado de um load e N - 1 representa o número de ciclos de clock necessários
para executar instruções que dependem do resultado de um load.

O tempo total de execução, portanto, é a soma dos ciclos de clock necessários para executar todas
as instruções, multiplicados pelo tempo de ciclo de clock.

Lembre-se de que essa fórmula assume que não há estouros de pipeline e que todas as instruções
podem ser executadas em um único ciclo de clock. Em outras palavras, estamos assumindo que
todas as instruções são do tipo mais rápido e não exigem mais de um ciclo de clock para serem
concluídas.

2
Segunda pergunta

2). Considere agora um cenário onde o estágio MEM e os registradores do pipeline do estágio
precisam de 12ns. Há duas possibilidades: dividir o estágio em dois (MEM1 e MEM2) ou
aumentar o tempo de ciclo para 12ns. Definindo um novo tempo de ciclo mas mantendo a mesma
quantidade de estágios. Para um programa que possuí as características do enunciado acima,
quando a primeira opção é melhor que a segunda? Sua resposta deve ser baseada no valor de f.

R: Se as instruções imediatamente após um load dependem do resultado da instrução load,


aumentar o tempo de ciclo para 12ns não afetaria o desempenho, já que o gargalo é o estágio
MEM, que agora leva 12ns. Como resultado, a escolha entre dividir o estágio MEM em dois
(MEM1 e MEM2) ou aumentar o tempo de ciclo para 12ns depende principalmente da fração f.

Se f for pequeno, a primeira opção (dividir o estágio MEM em dois) pode ser melhor. Isso ocorre
porque, quando f é pequeno, muitas instruções não dependem do resultado de um load e,
portanto, podem ser executadas mais rapidamente. Com a primeira opção, instruções que não
dependem do resultado de um load podem ser executadas mais rapidamente, reduzindo o número
total de ciclos de clock necessários para executar o programa.

Por outro lado, se f for grande, a segunda opção (aumentar o tempo de ciclo para 12ns) pode ser
melhor. Isso ocorre porque, quando f é grande, muitas instruções dependem do resultado de um
load e, portanto, levam mais tempo para serem executadas. Com a segunda opção, todos os
estágios de pipeline têm a mesma duração e, portanto, as instruções que dependem do resultado
de um load podem ser executadas mais rapidamente, reduzindo o número total de ciclos de clock
necessários para executar o programa.

Em resumo, a primeira opção (dividir o estágio MEM em dois) é melhor quando f é pequeno, e a
segunda opção (aumentar o tempo de ciclo para 12ns) é melhor quando f é grande. O valor exato
de f que define o limite entre as duas opções dependerá do projeto específico do pipeline e do
conjunto de instruções do programa.
3

Você também pode gostar