6.若机器M1和M2具有相同的指令集,其时钟频率辨别为1GHz和1.5GHz。
在指令集中有五种不合类型的指令A~E。
下表给出了在M1和M2上每类指令的平均时钟周期数CPI。
机器
A
B
C
D
E
M1
1
2
2
3
4
M2
2
2
4
5
6
请回答下列问题:
(1)M1和M2的峰值MIPS各是几多?
(2)假定某法度P的指令序列中,五类指令具有完全相同的指令条数,则法度P在M1和M2上运行时,哪台机器更快?
快几多?
在M1和M2上执行法度P时的平均时钟周期数CPI各是几多?
参考谜底:
(1)M1上可以选择一段都是A类指令组成的法度,其峰值MIPS为1000MIPS。
M2上可以选择一段A和B类指令组成的法度,其峰值MIPS为1500/2=750MIPS。
(2)5类指令具有完全相同的指令条数,所以各占20%。
在M1和M2上执行法度P时的平均时钟周期数CPI辨别为:
M1:
20%×(1+2+2+3+4)=0.2×12=2.4
M2:
20%×(2+2+4+5+6)=0.2×19=3.8
假设法度P的指令条数为N,则在M1和M2上的执行时间辨别为:
M1:
2.4×N×1/1G=2.4N(ns)
M2:
3.8×N×1/1.5G=2.53N(ns)
M1执行P的速度更快,每条指令平均快0.13ns,也即M1比M2快0.13/2.53×100%≈5%。
(思考:
如果说法度P在M1上执行比M2上快(3.8–2.4)/3.8×100%=36.8%,那么,这个结论显然是毛病的。
请问错在什么处所?
)
7.假设同一套指令集用不合的办法设计了两种机器M1和M2。
机器M1的时钟周期为0.8ns,机器M2的时钟周期为1.2ns。
某个法度P在机器M1上运行时的CPI为4,在M2上的CPI为2。
对法度P来说,哪台机器的执行速度更快?
快几多?
参考谜底:
假设法度P的指令条数为N,则在M1和M2上的执行时间辨别为:
M1:
4N×0.8=3.2N(ns)
M2:
2N×1.2=2.4N(ns)
所以,M2执行P的速度更快,每条指令平均快0.8ns,比M1快0.8/3.2×100%=25%。
8.假设某机器M的时钟频率为4GHz,用户法度P在M上的指令条数为8×109,其CPI为1.25,则P在M上的执行时间是几多?
若在机器M上从法度P开始启动到执行结束所需的时间是4秒,则P占用的CPU时间的百分比是几多?
参考谜底:
法度P在M上的执行时间为:
1.25×8×109×1/4G=2.5s,从启动P执行开始到执行结束的总时间为4秒,其中2.5秒是P在CPU上真正的执行时间,其他时间可能执行操纵系统法度或其他用户法度。
法度P占用的CPU时间的百分比为:
2.5/4=62.5%。
9.假定某编译器对某段高级语言法度编译生成两种不合的指令序列S1和S2,在时钟频率为500MHz的机器M上运行,目标指令序列中用到的指令类型有A、B、C和D四类。
四类指令在M上的CPI和两个指令序列所用的各类指令条数如下表所示。
A
B
C
D
各指令的CPI
1
2
3
4
S1的指令条数
5
2
2
1
S2的指令条数
1
1
1
5
请问:
S1和S2各有几多条指令?
CPI各为几多?
所含的时钟周期数各为几多?
执行时间各为几多?
参考谜底:
S1有10条指令,CPI为(5×1+2×2+2×3+1×4)/10=1.9,所含的时钟周期数为10×1.9=19,执行时间为19/500M=38ns。
S2有8条指令,CPI为(1×1+1×2+1×3+5×4)/8=3.25,所含的时钟周期数为8×3.25=26,执行时间为26/500M=52ns。
(注:
从上述结果来看,对同一个高级语言源法度,在同一台机器上所生成的目标法度不合,其执行时间可能不合,并且,其实不是指令条数少的目标法度执行时间就一定少。
)
10.假定机器M的时钟频率为1.2GHz,某法度P在机器M上的执行时间为12秒钟。
对P优化时,将其所有的乘4指令都换成了一条左移2位的指令,获得优化后的法度P’。
已知在M上乘法指令的CPI为5,左移指令的CPI为2,P的执行时间是P’执行时间的1.2倍,则P中有几多条乘法指令被替换成了左移指令被执行?
参考谜底:
显然,P’的执行时间为10秒,因此,P比P’多花了2秒钟,因此,执行时被换成左移指令的乘法指令的条数为1.2G×2/(5–2)=800M。
第二章习题答案
3.实现下列各数的转换。
(1)(25.8125)10=(?
)2=(?
)8=(?
)16
(2)(101101.011)2=(?
)10=(?
)8=(?
)16=(?
)8421
(3)(010110010110.0011)8421=(?
)10=(?
)2=(?
)16
(4)(4E.C)16=(?
)10=(?
)2
参考谜底:
(1)(25.8125)10=(11001.1101)2=(31.64)8=(19.D)16
(2)(101101.011)2=(45.375)10=(55.3)8=(2D.6)16=(01000101.001101110101)8421
(3)(010110010110.0011)8421=(596.3)10=(1001010100.01001100110011…)2=(254.4CCC…)16
(4)(4E.C)16=(78.75)10=(01001110.11)2
4.假定机器数为8位(1位符号,7位数值),写出下列各二进制数的原码和补码暗示。
+0.1001,–0.1001,+1.0,–1.0,+0.010100,–0.010100,+0,–0
参考谜底:
原码补码
+0.1001:
0.10010000.1001000
–0.1001:
1.10010001.0111000
+1.0:
溢出溢出
–1.0:
溢出1.0000000
+0.010100:
0.01010000.0101000
–0.010100:
1.01010001.1011000
+0:
0.00000000.0000000
–0:
1.00000000.0000000
5.假定机器数为8位(1位符号,7位数值),写出下列各二进制数的补码和移码暗示。
+1001,–1001,+1,–1,+10100,–10100,+0,–0
参考谜底:
移码补码
+1001:
1000100100001001
–1001:
0111011111110111
+1:
1000000100000001
–1:
01111111111111111
+10100:
1001010000010100
–10100:
0110110011101100
+0:
1000000000000000
–0:
1000000000000000
6.已知[x]补,求x
(1)[x]补=1.1100111
(2)[x]补=10000000
(3)[x]补=0.1010010(4)[x]补=11010011
参考谜底:
(1)[x]补=1.1100111x=–0.0011001B
(2)[x]补=10000000x=–10000000B=–128
(3)[x]补=0.1010010x=+0.101001B
(4)[x]补=11010011x=–101101B=–45
7.假定一台32位字长的机器中带符号整数用补码暗示,浮点数用IEEE754标准暗示,寄存器R1和R2的内容辨别为R1:
0000108BH,R2:
8080108BH。
不合指令对寄存器进行不合的操纵,因而,不合指令执行时寄存器内容对应的真值不合。
假定执行下列运算指令时,操纵数为寄存器R1和R2的内容,则R1和R2中操纵数的真值辨别为几多?
(1)无符号数加法指令
(2)带符号整数乘法指令
(3)单精度浮点数减法指令
参考谜底:
R1=0000108BH=00000000000000000001000010001011b
R2=8080108BH=10000000100000000001000010001011b
(1)对无符号数加法指令,R1和R2中是操纵数的无符号数暗示,因此,其真值辨别为R1:
108BH,R2: