计算机体系结构张晨曦版本第四章解答-new
4.1
指令序列中存在的潜在的并行性称为指令级并行。
指令调度是一种用以避免冲突的方法,但并不改变相关。通过改
变指令在程序中的位置,将相关指令间的距离加大到不小于指令执行延迟的时钟
数,以此消除相关指令造成的流水线冲突。
在程序执行过程中,依靠专门的硬件对代码进行调度,重
新安排指令的执行顺序,来调整相关指令实际执行时的关系,减少可能的冲突。
在程序的编译期间,由编译器进行代码调度和优化,重新
安排指令的执行顺序,把相关的指令拉开距离,以减少可能产生的冲突。
在Tomasulo算法实现结构中,保留站设置在运算部件的入口,每
个保留站中保存一条已经流出并等待到本功能部件执行的指令的相关信息,包括
操作码、操作数以及用于检测和解决冲突的信息。在一条指令流出到保留站的时
候,如果该指令的操作数已经在寄存器中就绪,则将之取到该保留站中。如果操
作数还没有计算出来,则在该保留站中记录将产生这个操作数的保留站的标识。
CDB公共数据总线,是Tomasulo算法实现结构中的一条重要的数据通路,
所有功能部件的计算结果都要送到CDB上,由它把这些结果直接送到各个需要
该结果的地方。
用硬件动态地进行分支处理的方法。这些方法是在程序
运行时,根据分支指令过去的
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
现来预测其将来的行为。如果分支行为发生了变
化,预测结果也随之改变。其目的有两个:预测分支是否成功和尽快找到分支目
标地址(或指令),从而避免控制相关造成流水线停顿。
BHT分支历史表,也称之为分支预测缓冲器,用来记录分支指令最近一
次或几次的执行情况(成功或不成功),并根据此进行预测。
将分支成功的分支指令的地址和它的分支目标地址都放到一
个缓冲区中保存起来,缓冲区以分支指令的地址作为标识,取指令阶段,所有指
令地址都与保存的标示作比较,一旦相同,就认为本指令是分支指令,且认为它
转移成功,并且它的分支目标地址就是保存在缓冲区的分支目标地址。
基于硬件的前瞻执行结合了以下三种思想:
(1) 动态分支预测。用来选择后续执行的指令。
(2) 在控制相关的结果尚未出来之前,前瞻地执行后续指令。
(3) 用动态调度方法对基本块的各种组合进行跨基本块的调度。
ROB再定序缓冲,前瞻执行允许指令乱序执行,但要求按程序顺序确认,
为此设置ROB,用以保存指令执行完毕到指令得到确认间的所有指令及其结果。
超标量处理机的典型结构是有多个操作部件,每个时钟周期流出的
指令数不定,但有上限。可通过多个独立的操作部件实现多指令的并行,使CPI的值小于1。
将流水段进一步化,在一个时钟周期内能够分时流出多条指令,使
CPI的值小于1。
这种指令字很长,被分割成多个字段,每个字段称为一个指令
槽,直接独立控制一个功能部件。每个时钟周期流出的指令数是固定的,它们构
成一条长指令,或说是一个混合指令包,只能通过编译静态调度。
通过多次复制循环体并改变结束条件来相对增加有效操作时间,
用于指令调度的一种方式。
4.2 Tomasulo
(1)记录和检测指令相关,操作数一旦就绪就立即执行,把发生RAW冲突的可能性减少到最小;
(2)通过寄存器换名来消除WAR和WAW冲突。 4.3
4.3
表4.3 本章使用的浮点流水线的延迟
3 浮点计算 另外的浮点计算
2 浮点计算 浮点存操作(SD)
1 浮点取操作(LD) 浮点计算
0 浮点取操作(LD) 浮点存操作(SD)
LOOP: L.D F0, 0(R1) (一次空转)
MULT.D F0, F0, F2
L.D F4, 0(R2) (二次空转)
ADD.D F0, F0, F4 (二次空转)
S.D 0(R2), F0
DSUBI R1, R1, #8
DSUBI R2, R2, #8
BNEQZ R1, LOOP (一次空转)
循环展开三次:
LOOP: LD F0, 0(R1)
LD F3, -8(R1)
LD F6, -16(R1)
MULTD F0, F0, F2
MULTD F3, F3, F2
MULTD F6, F6, F2
LD F4, 0(R2)
LD F5, -8(R2)
LD F7, -16(R2)
ADDD F0, F0, F4
ADDD F3, F3, F5
ADDD F6, F6, F7
SD 0(R2), F0
SD -8(R2), F3
SD -16(R2), F6
SUBI R1, R1, #24
BNEQZ R1, LOOP
SUBI R2, R2, #24 展开二次也可。
4.4
43
90%90%15%CPI1 1CPI
22
解答:(1) CPI=1+[命中率,预测错误率,4+不命中率,3] ,分支频率
=1+[0.9,0.1,4+0.1,3] ,0.15
=1+[0.36+0.3] ,0.15
=1+0.66,0.15
=1.099
(2) 采用固定2时钟延迟
CPI=1+15%,2=1.3
由CPI比较可知前一种方式更快
4.5 90%5%
CPI1
CPI 解答:CPI=1+5%,(1-90%),3=1.0015
4 6 MIPS
Y=a X +Y
4.31
0
0XDONE
FOO: L.D F2 , 0(R1)
MULT.D F4 , F2 , F0
L.D F6 , 0(R2)
ADD.D F6 , F4 , F6
S.D 0(R2), F6
DADDIU R1 , R1, #8
DADDIU R2 , R2, #8
DSUBIU R3 , R1 , DONE
BEQZ R3 , FOO
(1) 对于
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
的MIPS单流水线,上述循环计算一个Y值需要多少时间?其中有多少空转周期?
(2) 对于标准的MIPS单流水线,将上述循环顺序展开4次,不进行任何指令调度,计算一个Y值需要多少时间?加速比是多少?其加速是如何获得的?
(3) 对于标准的MIPS单流水线,将上述循环顺序展开4次,优化和调度指令,使循环处理时间达到最优,计算一个Y值平均需要多少时间,加速比是多少?
解答:(1)易知循环计算一个Y值需要15个时钟周期,其中有6个空转周期。
FOO: L.D F2 , 0(R1) ; load X[i]
(一次空转)
MULT.D F4 , F2 , F0 ; mutliply a* X[i]
L.D F6 , 0(R2) ; load Y[i]
(二次空转)
ADD.D F6 , F4 , F6 ; add a* X[i]+ Y[i]
(二次空转)
S.D 0(R2), F6 ; store Y[i]
DADDIU R1 , R1, #8 ;increment X index
DADDIU R2 , R2, #8 ; increment Y index
DSUBIU R3 , R1 , DONE ; test if done
BEQZ R3 , FOO ; loop if not done
(一次空转)
(2)
FOO: L.D F2 , 0(R1) ; load X[i]
(一次空转)
MULT.D F4 , F2 , F0 ; mutliply a* X[i]
L.D F6 , 0(R2) ; load Y[i]
(二次空转)
ADD.D F6 , F4 , F6 ; add a* X[i]+ Y[i]
(二次空转)
S.D 0(R2), F6 ; store Y[i]
DADDIU R1 , R1, #8 ;increment X index
DADDIU R2 , R2, #8 ; increment Y index
DSUBIU R3 , R1 , DONE ; test if done
BEQZ R3 , FOO ; loop if not done
(一次空转)
FOO: L.D F2 , 8(R1) ; load X[i] (一次空转)
MULT.D F4 , F2 , F0 ; mutliply a* X[i]
L.D F6 , 8(R2) ; load Y[i] (二次空转)
ADD.D F6 , F4 , F6 ; add a* X[i]+ Y[i]
(二次空转)
S.D 8(R2), F6 ; store Y[i]
DADDIU R1 , R1, #8 ;increment X index
DADDIU R2 , R2, #8 ; increment Y index
DSUBIU R3 , R1 , DONE ; test if done
BEQZ R3 , FOO ; loop if not done
(一次空转)
FOO: L.D F2 , 16(R1) ; load X[i] (一次空转)
MULT.D F4 , F2 , F0 ; mutliply a* X[i]
L.D F6 , 16(R2) ; load Y[i] (二次空转)
ADD.D F6 , F4 , F6 ; add a* X[i]+ Y[i]
(二次空转)
S.D 16(R2), F6 ; store Y[i]
DADDIU R1 , R1, #8 ;increment X index
DADDIU R2 , R2, #8 ; increment Y index
DSUBIU R3 , R1 , DONE ; test if done
BEQZ R3 , FOO ; loop if not done
(一次空转)
FOO: L.D F2 , 24(R1) ; load X[i]
(一次空转)
MULT.D F4 , F2 , F0 ; mutliply a* X[i]
L.D F6 , 24(R2) ; load Y[i]
(二次空转)
ADD.D F6 , F4 , F6 ; add a* X[i]+ Y[i]
(二次空转)
S.D 24(R2), F6 ; store Y[i]
DADDIU R1 , R1, #32 ;increment X index
DADDIU R2 , R2, #32 ; increment Y index
DSUBIU R3 , R1 , DONE ; test if done
BEQZ R3 , FOO ; loop if not done
(一次空转)
计算一个Y值平均需要:45/4=11.25个时钟周期
加速比:15/11.25=1.33
通过循环展开使得指令减少、分支减少。
(3) FOO: LD F2 , 0(R1)
LD F1, 0(R1)
LD F7, 0(R1)
LD F8, 0(R1)
MULTD F4 , F2 , F0
MULTD F3, F1, F0
MULTD F9 F7, F0
MULTD F10 F8 F0
LD F6 , 0(R2)
LD F5, 0(R2)
LD F11 0(R2)
LD F12 0(R2)
ADDD F6 , F4 , F6
ADDD F5, F3 F5
ADDD F11 F9, F11
ADDD F12 F10 F12
SD 0(R2), F6
SD 0(R2), F5
SD 0(R2), F11
SD 0(R2), F12
ADDI R1 , R1 , #32
SGTI R3 , R1 , DONE
BEQZ R3 , FOO
ADDI R2 , R2 , #32 此时计算一个Y值需要:24/4=6个时钟周期
加速比:15/6=2.5