2022年2022年计算机系统结构 2.pdf
4.6 下面一段 DLX的汇编程序称为SAXPY ,用于完成下面公式的计算:Y = aX + Y其浮点指令延迟如表4.2 所示,整数指令均为1 个时钟周期完成, 浮点和整数部件均为流水。整数操作之间以及与其它所有浮点操作之间的延迟为0,转移指令的延迟为0。FOO:LD f2, 0(r1) ;MULTD f4, f2, f0 ;LD f6, 0(r2) ;ADDD f6, f4, f6 ;SD 0(r2), f6 ;ADDI r1, r1, #8 ;ADDI r2, r2, #8 ;SGTI r3, r1, done ;BEQZ r3, FOO ;(1) 对于标准的DLX 单流水线, SAXPY 循环计算一个Y 值需要多少时间?其中有多少空转周期?解: 1 FOO: LD f2, 0(r1) ;Stall ; 从浮点取到浮点运算间的空转2 MULTD f4, f2, f0 ;3 LD f6, 0(r2) ;Stall ; 从浮点取到浮点运算间的空转Stall ; MULTD和 ADDD 两个浮点运算间共延迟3 个时钟4 ADDD f6, f4, f6 ;Stall ; 从浮点运算到浮点存0 间的空转Stall ;5 SD 0(r2), f6 ;6 ADDI r1, r1, #8 ;7 ADDI r2, r2, #8 ;8 SGTI r3, r1, done ;由题设,这之后没有空转9 BEQZ r3, FOO ;由题设,这之后没有空转所以,共有14 个时钟周期,其中有5 个空转周期。(2) 对于标准的DLX 单流水线,将SAXPY 循环顺序展开4 次,不进行任何指令调度,计算一个 Y 值平均需要多少时间?加速比是多少?其加速是如何获得的?解: 1 FOO: LD f2, 0(r1) ;2Stall ; 从浮点取到浮点运算间的空转3MULTD f4, f2, f0 ;4 LD f6, 0(r2) ;5Stall ; 从浮点取到浮点运算间的空转6Stall ; MULTD和 ADDD 两个浮点运算间共延迟3 个时钟7ADDD f6, f4, f6 ;8Stall ; 从浮点运算到浮点存之间的空转9Stall ;10SD 0(r2), f6 ;11 LD f8, 8 (r1) ;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 12Stall ;13MULTD f10, f8, f0 ;14LD f12, 8 (r2) ;15Stall ;16Stall ;17ADDD f12, f10, f12 ;18Stall ;19Stall ;20SD 8 (r2), f12;21 LD f14, 16 (r1) ;22Stall ;23MULTD f16, f14, f0 ;24LD f18, 16 (r2) ;25Stall ;26Stall ;27ADDD f18, f16, f18 ;28Stall ;29Stall ;30SD 16 (r2), f18 ;31 LD f20, 24 (r1) ;32Stall ;33MULTD f22, f20, f0 ;34LD f24, 24 (r2) ;35Stall ;36Stall ;37ADDD f24, f22, f24 ;38Stall ;39Stall ;40SD 24 (r2), f24;41ADDI r1, r1, #8 ;42ADDI r2, r2, #8 ;43SGTI r3, r1, done ;由题设,这之后没有空转44 BEQZ r3, FOO ;由题设,这之后没有空转循环顺序展开4 次,不进行任何指令调度,则指令15 及其间的stall都是必要的,只是指令69 只需执行一次, 因此共有 104444 个时钟周期, 计算出 4 个 Y值,所以计算一个Y值需要 11 个时钟周期,加速比为:14/11 = 1.27 。加速主要是来自减少控制开销,即减少对r1 、r2 的整数操作以及比较、分支指令而来的。(3) 对于标准的DLX 单流水线, 将 SAXPY 循环顺序展开4 次,优化和调度指令,使 SAXPY循环处理时间达到最优,计算一个Y值平均需要多少时间?加速比是多少?解:循环顺序展开4 次,优化和调度指令,如下:FOO:1.LD f2, 0(r1) 2.LD f8, 8 (r1) 3.LD f14, 16 (r1) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 4.LD f20, 24 (r1) 5.MULTD f4, f2, f0 6.MULTD f10, f8, f0 7.MULTD f16, f14, f0 8.MULTD f22, f20, f0 9.LD f6, 0(r2) 10.LD f12, 8 (r2) 11.LD f18, 16 (r2) 12.LD f24, 24 (r2) 13.ADDD f6, f4, f6 14.ADDD f12, f10, f12 15.ADDD f18, f16, f18 16.ADDD f24, f22, f24 17.SD 0(r2), f6 18.SD 8 (r2), f12 19.SD 16 (r2), f18 20.SD 24 (r2), f24 21.ADDI r1, r1, #32 22.ADDI r2, r2, #32 23.SGTI r3, r1, done 24.BEQZ r3, FOO 共用了 24 个时钟周期,则计算一个Y值平均需要24/4=6 个时钟周期,加速比:14/6=2.33 (4) 对于采用如图4.14 推断执行机制的DLX 处理器, 处理其中只有一个整数部件。当循环第二次执行到BEQZ r3, FOO 时,写出前面所有指令的状态,包括指令使用的保留站、指令起始节拍、执行节拍和写结果节拍,并写出处理器当前的状态。解:令再定序缓冲、浮点操作部件数量不限,只有一个整数部件。整数操作单周期完成,不进入再定序缓冲,无需确认。指令保留站流出执行写结果确认LD f2, 0(r1) 再定序缓冲 1# 1 2 3 4 MULTD f4, f2, f0 浮点乘法部件(再定序缓冲2#)2 4-13 14 15 LD f6, 0(r2) 再定序缓冲 3# 3 4 5 16 ADDD f6, f4, f6 浮点加法部件(再定序缓冲4#)4 15-16 17 18 SD 0(r2), f6 再定序缓冲 5# 5 18 19 20 ADDI r1, r1, #8 整数加法部件6 ADDI r2, r2, #8 整数加法部件7 SGTI r3, r1, done 整数加法部件8 BEQZ r3, FOO 整数加法部件9 LD f2, 0(r1) 再定序缓冲 6# 10 11 12 21 MULTD f4, f2, f0 浮点乘法部件(再定序缓冲7#)11 13-22 23 24 LD f6, 0(r2) 再定序缓冲 8# 12 13 15 25 ADDD f6, f4, f6 浮点加法部件(再定序缓冲9#)13 24-25 26 27 SD 0(r2), f6 再定序缓冲 10# 14 27 28 29 ADDI r1, r1, #8 整数加法部件15 ADDI r2, r2, #8 整数加法部件16 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - SGTI r3, r1, done 整数加法部件17 BEQZ r3, FOO 整数加法部件18 第 18 个时钟周期CPU的状态为:浮点加保留站浮点乘保留站浮点寄存器状态F0 F2 F4 F6 再定序缓冲序号4# 忙N N N Y 注:浮点功能部件数量不限。(5) 对于两路超标量的DLX 流水线,设有两个指令流出部件,可以流出任意组合的指令,系统中的功能部件数量不受限制。将 SAXPY 循环展开 4 次,优化和调度指令,使 SAZPY循环处理时间达到最优。计算一个Y值平均需要多少时间?加速比是多少?解:解法 1:整数指令浮点指令时钟周期数F00: LD f2, 0(r 1) 1 LD f8, 8 (r 1) 2 LD f14, 16 (r1) MULTD f4, f2, f0 3 LD f20, 24 (r1) MULTD f 10, f8, f0 4 LD f6, 0(r2) MULTD f16, f14, f0 5 LD f12, 8 (r2) MULTD f22, f20, f0 6 LD f18, 16 (r2) ADDD f6, f4, f6 7 LD f24, 24 (r2) ADDD f12, f10, f12 8 ADDI r1, r1, #32 ADDD f18, f16, f18 9 SD 0(r2), f6 ADDD f24, f22, f24 10 SD 8 (r2), f12 11 SD 16 (r2), f18 12 SD 24 (r2), f24 13 ADDI r2, r2, #32 14 SGTI r3, r1, done 15 BEQZ r3, F00 16 计算一个 Y 值需要 16/4 = 4 个时钟周期,加速比= 14/4 = 3.5 忙操作Vj Vk Qj Qk 目的N 2 N 1 Y ADDD MemRegsr2 7# f6 忙操作Vj Vk Qj Qk 目的N 2 N 1 Y MULTD MemRegsr1 RegsF0 f4 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 解法 2:整数指令浮点指令时钟周期数F00: LD f2, 0(r 1) LD f8, 8 (r 1) 1 LD f14, 16 (r1) LD f20, 24 (r1) 2 LD f6, 0(r2) MULTD f4, f2, f0 3 LD f12, 8 (r2) MULTD f 10, f8, f0 4 LD f18, 16 (r2) MULTD f16, f14, f0 5 LD f24, 24 (r2) MULTD f22, f20, f0 6 ADDI r1, r1, #32 ADDD f6, f4, f6 7 ADDI r2, r2, #32 ADDD f12, f10, f12 8 SGTI r3, r1, done ADDD f18, f16, f18 9 SD -32(r2), f6 ADDD f24, f22, f24 10 SD -24 (r2), 11 SD -16 (r2), f18 12 SD -8 (r2), f24 13 BEQZ r3, F00 14 计算一个 Y 值需要 14/4 = 3.5 个时钟周期,加速比= 14/3.5 = 4(6) 对于如图 4.19 结构的超长指令字DLX 处理器,将SAXPY 循环展开 4 次,优化和调度指令,使SAXPY 循环处理时间达到最优。计算一个Y 值平均需要多少时间?加速比是多少?解:访存 1 访存 2 浮点操作 1 浮点操作 2 整数操作时钟周期LD f2, 0(r1) LD f8, 8 (r1) 1 LD f14, 16 (r1) LD f20, 24 (r1) 2 LD f6, 0(r2) LD f12, 8 (r2) MULTD f4,f2, f0 MULTD f10,f8,f0 3 LD f18, 16 (r2) LD f24, 24 (r2) MULTD f16,f14,f0 MULTD f22,f20,f0 4 5 6 ADDD f6, f4, f6 ADDD f12,f10,f12 7 ADDD f18,f16,f18 ADDD f24,f22,f24 ADDI r1,r1,#32 8 ADDI r2,r2,#32 9 SD -32 (r2), f6 SD -24 (r2), f12 SGTI r3,r1,done 10 SD -16 (r2), f18 SD -8 (r2), f24 BEQZ r3, F00 11 计算一个 Y 值需要11/4 =2.75 个时钟周期,加速比= 14/(11/4) = 56/11=5.09名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -