6.下面一段MIPS的汇编程序称为SAXPY,是计算高斯消去法中的关键一步,用于完成下面公式的计算; y=a * X + Y 其浮点指令延迟如表4.2所示,整数指令均为1个时钟周期完成,浮点和整数部件均为流水。整数操作之间以及与其他所有浮点操作之间的延迟为0,转移指令的延退为0. foo: ld f2, 0(r1) ; load x[i] multd f4, f2, f0 ; multiply ax[i] ld f6, 0 (r2) ;load Y[i] addd f6, f4, f6 ; add aX[i]+Y[i] sd 0[r2], f6 ;store Y[i] addi r1, r1,#8 ;increment x index addi r2,12,48 ;increment Y index sgti r3, r1, done ;test if done beqz r3, foo ; loop if not done (1)对于标准的MIPS单流水线, SAXPY循环计算一个Y值需要多少时间?其中有多少空转周期? (2)对于标准的MIPS单流水线,将SAXPY循环顺序展开4次,不进行任何指令调度,计算一个Y值平均需要多少时间?加速比是多少?其加速是如何获得的? (3)对于标准的MIPS单流水线,将SAXPY循环顺序展开4次,优化和调度指令,使SAXPY循环处理时间达到最优,计算一个Y值平均需要多少时间?加速比是多少?
时间: 2024-02-23 19:55:59 浏览: 179
(1) 对于标准的MIPS单流水线,SAXPY循环计算一个Y值需要5个时钟周期。其中,ld、multd、ld、addd、sd、addi和beqz指令各需要1个时钟周期,sgti指令需要0个空转周期。
(2) 将SAXPY循环顺序展开4次,不进行任何指令调度,计算一个Y值平均需要20个时钟周期。加速比为1/5=0.2。加速比的计算公式为:
加速比 = 顺序执行循环处理时间 / 展开4次不进行调度的循环处理时间
加速比的获得是因为展开循环后,可以重复利用部分指令的结果,避免了一些重复计算,从而提高了执行效率。
(3) 将SAXPY循环顺序展开4次,并进行指令调度,可以得到以下优化后的代码:
ld f2, 0(r1)
ld f6, 0(r2)
multd f4, f2, f0
addd f6, f4, f6
sd 0(r2), f6
ld f2, 8(r1)
ld f6, 8(r2)
multd f4, f2, f0
addd f6, f4, f6
sd 8(r2), f6
ld f2, 16(r1)
ld f6, 16(r2)
multd f4, f2, f0
addd f6, f4, f6
sd 16(r2), f6
ld f2, 24(r1)
ld f6, 24(r2)
multd f4, f2, f0
addd f6, f4, f6
sd 24(r2), f6
addi r1, r1, #32
addi r2, r2, #32
sgti r3, r1, done
beqz r3, LOOP
其中,LOOP表示循环的起始标志,done表示循环结束的标志。这个优化后的代码可以在12个时钟周期内计算一个Y值,加速比为1/5=0.2。
这个优化后的代码的加速比获得是因为我们将多个指令之间的相关性和优先级考虑在内,通过指令调度,将一些指令的执行顺序调整到更合适的位置,避免了一些指令之间的等待时间,从而提高了执行效率。
阅读全文