五、下面一段MIPS汇编程序是计算高斯消去法中的关键一步,用于完成下面公式的计算:
Y = a X + Y
其浮点指令延迟如下表所示:
整数指令均为1个时钟周期完成,浮点和整数部件均采用流水。整数操作之间以及与其它所有浮点操作之间的延迟为0,转移指令的延迟为0。
X中的最后一个元素存放在存储器中的地址为DONE。
FOO: L.D F2, 0(R1)
MUT.D F4, F2, F0
L.D F6, 0(R2)
ADD.D F6, F4, F6
S.D F6, 0[R2]
DADDIU R1, R1, #8
DADDIU R2, R2, #8
DSUBIU R3, R1, #DONE
BNEZ R3, FOO
(1)对于标准的MIPS单流水线,上述循环计算一个Y值需要多少时间?其中有多少空转周期?
(2)对于标准的MIPS单流水线,将上述循环顺序展开4次,不进行任何指令调度,计算一个Y值平均需要多少时间?加速比是多少?其加速是如何获得的?
(3)对于标准的MIPS单流水线,将上述循环顺序展开4次,优化和调度指令,使循环处理时间达到最优,计算一个Y值平均需要多少时间?加速比是多少?

答案
答:
(1)
L.D F2, 0(R1) 1
Stall
MUT.D F4, F2, F0 2
L.D F6, 0(R2) 3
Stall
Stall
ADD.D F6, F4, F6 4
Stall
Stall
S.D F6, 0[R2] 5
DADDIU R1, R1, #8 6
DADDIU R2, R2, #8 7
DSUBIU R3, R1, #DONE 8
BNEZ R3, FOO 9
所以,共有14 个时钟周期,其中有5 个空转周期。
(2)循环顺序展开4 次,不进行任何指令调度,则指令1~5 及其间的stall 都是必要的,只是指令6~9 只需执行一次,因此,共有 10 × 4 + 4 = 44 个时钟周期,计算出4 个Y 值,所以计算一个Y 值需要11 个时钟周期,加速比为:14/11 = 1.27 。加速主要是来自减少控制开销,即减少对R1、R2 的整数操作以及比较、分支指令而来的。
(3)循环顺序展开4 次,优化和调度指令,如下:
L.D F2, 0(R1)
L.D F8, 8(R1)
L.D F14, 16(R1)
L.D F20, 24(R1)
MUT.D F4, F2, F0
MUT.D F10, F8, F0
MUT.D F16, F14, F0
MUT.D F22, F20, F0
L.D F6, 0(R2)
L.D F12, 8(R2)
L.D F18, 16(R2)
L.D F24, 24(R2)
ADD.D F6, F4, F6
ADD.D F12, F10, F12
ADD.D F18, F16, F18
ADD.D F24, F22, F24
S.D F6, 0[R2]
S.D F12, 8[R2]
S.D F18, 16[R2]
S.D F24, 24[R2]
DADDIU R1, R1, #32
DADDIU R2, R2, #32
DSUBIU R3, R1, #DONE
BNEZ R3, FOO
共用了24 个时钟周期,则计算一个Y 值平均需要 24/4 = 6 个时钟周期,
加速比:14/6 = 2.33