Você está na página 1de 8

LU1

Carlos Srro Maio de 2007

Enunciado
Admita um processador em pipeline semelhante ao MIPS, mas com 4
andares de execuo, como se indica na figura a seguir.

IF

24 de jul de 201
6

ID
BR

EX1

EX2
ME1

EX3
ME2

Arquitectura de Computadores 2004/05

EX4

WB

Exerccio LU1 - 1

LU1

Carlos Srro Maio de 2007

Enunciado (cont.)
Admita ainda que existe forwarding total para as instrues que no
necessitam de 4 ciclos de execuo, e que as instrues que nos vo
interessar neste problema exigem os seguinte nmero de ciclos de
execuo:
Multiplicao em vrgula flutuante 4 ciclos
Adio em vrgula flutuante 2 ciclos
Operao com inteiros 1 ciclo
Admita ainda que existe um branch delay slot, que no existe latncia
entre as operaes com inteiros e as operaes de branch que delas
dependem, e que a latncia para os pares de instrues (LoadUtilizador do Load) de 2 ciclos --- por outras palavras, o nmero de
delay slots para os Loads igual a 2.
Pretende-se fazer correr o seguinte cdigo neste pipeline, que calcula o
produto interno de dois arrays de nmeros em vrgula flutuante com 32
bits.

24 de jul de 201
6

Arquitectura de Computadores 2004/05

Exerccio MI1 - 2

LU1

Enunciado (cont.)

Carlos Srro Maio de 2007

Prod:

L.D
L.D
MUL.S
ADD.S
ADDI
ADDI
ADDI
BNE
NOP

F5,0(R1)
F6,0(R2)
F7,F5,F6
F4,F4,F7
R1,R1,4
R2,R2,4
R3,R3,-1
R3,R0,Prod

;
;
;
;
;
;

carrega elem. do primeiro array


carrega elem. do segundo array
multiplica os elementos
acumula resultado em F4
incrementa ponteiro
incrementa ponteiro

; fecha o ciclo
; branch delay slot

Admita que R1 e R2 contm os endereos iniciais dos arrays, e que F4


foi inicializado a 0.
1. Quantos ciclos dura a execuo de uma iterao, se no alterar o
cdigo?

24 de jul de 201
6

Arquitectura de Computadores 2004/05

Exerccio LU1 - 3

LU1

Enunciado (cont.)
2. Modifique o cdigo, por forma a obter o menor nmero possvel
de ciclos de execuo. No desdobre os ciclos (isto , no faa
loop unrolling). Mostre o cdigo que resulta desse escalonamento.
Quantos ciclos dura agora a execuo de uma iterao?
3. Faa agora um nico desdobramento do ciclo. Faa o escalonamento
por forma a eliminar completamente os stalls. Escreva o cdigo
resultante. Quantos ciclos dura agora a execuo de uma iterao?
4. Se desdobrar o ciclo 8 vezes, quantos ciclos por iterao se
conseguem? Nota: no precisa de escrever o cdigo que resulta do
desdobramento, nas precisa de justificar a sua resposta.

Carlos Srro Maio de 2007

24 de jul de 201
6

Arquitectura de Computadores 2004/05

Exerccio MI1 - 4

MI1 [adaptado de AQA3e 3.16, pg. 294]

Resoluo

Carlos Srro Maio de 2007

1. 14 ciclos: 9 das instrues, mais 2 stalls antes dos MUL.S, e


ainda 3 stalls antes do ADD.S
Prod:

24 de jul de 201
6

L.D
L.D
NOP
NOP
MUL.S
NOP
NOP
NOP
ADD.S
ADDI
ADDI
ADDI
BNE
NOP

F5,0(R1)
F6,0(R2)

; carrega elem. do primeiro array


; carrega elem. do segundo array

RAW - 2 ciclos L.D-Utilizador

F7,F5,F6RAW ;-multiplica
4 ciclososdeelementos
execuo do MUL.S

WB no 4 ciclo
leitura de F7 no mesmo ciclo pelo ADD.S

F4,F4,F7
R1,R1,4
R2,R2,4
R3,R3,-1
R3,R0,Prod

; acumula resultado em F4
; incrementa ponteiro
; incrementa ponteiro
; fecha o ciclo
; branch delay slot

Arquitectura de Computadores 2004/05

Exerccio MI1 - 5

LU1

Resoluo (cont.)

Carlos Srro Maio de 2007

2. 9 ciclos/iterao: 8 das instrues, mais 1 stall antes do BNE.


ADD.S no branch delay slot
Prod:

24 de jul de 201
6

L.D
L.D
ADDI
ADDI
MUL.S
ADDI
NOP
BNE
ADD.S

F5,0(R1)
; carrega elem. do primeiro array
F6,0(R2)
; carrega elem. do segundo array
R1,R1,4
; incrementa ponteiro
R2,R2,4
; incrementa ponteiro
2 ciclos
L.D-Utilizador
F7,F5,F6
R3,R3,-1 4 ciclos de execuo do MUL.S
R3,R0,Prod
F4,F4,F7

L.D
F5,0(R1)slot
; noProd:
branch
delay
L:D
F6,0(R2)
NOP
NOP
MUL.S
NOP
NOP
NOP
ADD.S
ADDI
ADDI
ADDI
BNE
NOP

Arquitectura de Computadores 2004/05

F7,F5,F6

F4,F4,F7
R1,R1,4
R2,R2,4
R3,R3,-1
R3,R0,Prod

Exerccio LU1 - 6

LU1

Resoluo (cont.)

Carlos Srro Maio de 2007

3. 12 instrues, sem stalls em 2 iteraes 6 ciclos/iterao


Prod:

24 de jul de 201
6

L.D
L.D
L.D
L.D
MUL.S
ADDI
MUL.S
ADDI
ADD.S
ADDI
BNE

F5,0(R1)
F6,0(R2)
F8,4(R1)
F9,4(R2)
F7,F5,F6
R1,R1,8
F10,F8,F9
R2,R2,8
F4,F4,F7
R3,R3,-2
R3,R0,Prod

;
;
;
;

carrega
carrega
carrega
carrega

elem.
elem.
outro
outro

do primeiro array
do segundo array
elem. do prim. array
elem. do segundo array

; fecha o ciclo

ADD.S

F4,F4,F10

; acumula resultado em F4

; incrementa ponteiro
; incrementa ponteiro
; acumula resultado em F4

Arquitectura de Computadores 2004/05

Exerccio
Exerccio LU1
MI1 - 7

LU1

Resoluo

Carlos Srro Maio de 2007

4. Uma iterao possui 4 instrues efectivas (no contando com o


overhead do ciclo): duas L.D, uma MUL.S e uma ADD.S. O
overhead constitudo por 4 instrues (trs ADDI e um BNE), que
se podem distribuir pelas 8 iteraes. Temos, portanto, 4*8+4 =
36 ciclos/8 iteraes ou 4,5 ciclos/iterao.

24 de jul de 201
6

Arquitectura de Computadores 2004/05

Exerccio LU1 - 8