CH1 习题课
教材习题
1.3 简述程序执行过程
问题:
讲述C等高级语言转化为计算机能够执行的指令的步骤。
#card
解答:
程序从高级语言(如C)到计算机可执行指令的转换过程主要包括以下几个步骤:
- 编译:高级语言代码被编译器转换为汇编语言代码。
- 汇编:汇编语言代码被汇编器转换为机器语言代码(目标文件)。
- 链接:目标文件与所需的库文件(如动态链接库或静态链接库)被链接器合并成一个可执行文件。
- 加载与执行:可执行文件被加载器加载到内存中,由CPU执行。
1.6 性能公式
问题:
一个指令集体系结构由两种不同实现。共有A、B、C、D四类指令,对实现P1(2.5GHz)来说,CPI分别为1、2、3、3;对实现P2(3GHz)来说,CPI分别为2、2、2、2。
一程序有1x10^6条指令,四类指令比例分别为10%,20%,50%,20%。
- (1) 每种实现的总CPI分别是?
- (2) 每种实现的时钟周期数为?
#card
解答:
(1) 每种实现的总CPI
计算加权平均CPI:
CPIP1=(0.1×1)+(0.2×2)+(0.5×3)+(0.2×3)=0.1+0.4+1.5+0.6=2.6
CPIP2=(0.1×2)+(0.2×2)+(0.5×2)+(0.2×2)=0.2+0.4+1.0+0.4=2.0
(2) 每种实现的时钟周期数
时钟周期数P1=指令数×CPIP1=1×106×2.6=2.6×106 周期
时钟周期数P2=指令数×CPIP2=1×106×2.0=2.0×106 周期
1.7 性能公式与加速比
问题:
对同一个程序,编译器A产生1x109条指令,执行时间为1.1s;编译器B产生1.2x109条指令,执行时间为1.5s。
- (1) 若处理器时钟周期长度为1ns,求两个编译器产生程序的CPI。
- (2) 假设两个程序在不同处理器上运行,且执行时间相同,求:运行编译器A的处理器比运行B的快多少?
- (3) 有种新的编译器,只产生6x10^8条指令,CPI平均为1.1,求:这种新编译器相对于编译器A、B的加速比各是多少?
#card
解答:
(1) 求两个编译器产生程序的CPI
CPIA=指令数执行时间×时钟频率=1×109 条1.1×109 ns=1.1
CPIB=指令数执行时间×时钟频率=1.2×109 条1.5×109 ns=1.25
(2) 假设两个程序在不同处理器上运行,且执行时间相同,求:运行编译器A的处理器比运行B的快多少?
假设两个程序的执行时间相同为 T 秒,那么:
fA=T指令数×CPIA
fB=T指令数×CPIB
因此,运行编译器A的处理器比运行B的快:
fBfA=指令数B×CPIB指令数A×CPIA=1.2×1.251×1.1=1.51.1=0.733
即运行编译器A的处理器比运行B的处理器慢约26.7%。
(3) 新编译器的加速比
T新=f指令数×CPI新=1×1096×108×1.1=0.66 秒
加速比A=T新TA=0.661.1≈1.67
加速比B=T新TB=0.661.5≈2.27
1.11.4 性能公式的方程思想
问题:
一台计算机运行SPEC基准测试程序用时750秒。
- (1) 如果SPEC指令数增加10%,CPI增加5%,则执行时间变为原来的多少倍?
- (2) 指令数不变,如果要在CPI降低15%的情况下,让CPU时间减少20%,时钟频率应该变为原来的多少倍?
#card
解答:
(1) 执行时间变为原来的多少倍?
假设原来的指令数为 I,CPI为 c,时钟频率为 f。原来的执行时间为:
T=fI×c=750 秒
- 指令数增加10%:新的指令数为 I′=1.1I
- CPI增加5%:新的CPI为 c′=1.05c
新的执行时间为:
T′=fI′×c′=f1.1I×1.05c=1.155×fI×c=1.155×750=866.25 秒
因此,执行时间变为原来的:
TT′=750866.25=1.155 倍
(2) 时钟频率应该变为原来的多少倍?
假设原来的CPI为 c,新的CPI为 c′=0.85c。
假设原来的执行时间为 T=750 秒,新的执行时间为 T′=0.8T=600 秒。
原来的执行时间为:
T=fI×c=750 秒
新的执行时间为:
T′=f′I×c′=600 秒
将 c′=0.85c 代入:
600=f′I×0.85c
解得:
f′=600I×0.85c
原来的时钟频率为:
f=750I×c
因此,新的时钟频率应该是原来的:
ff′=750I×c600I×0.85c=6000.85×750=1.0625
即时钟频率应该变为原来的 1.0625 倍。
1.14 Amdahl定律
问题:
一个程序有50x106条浮点指令、110x106条整数指令、80x106条L/S指令和16x106条分支指令,4种指令的CPI分别是1、1、4、2,CPU时钟频率为2GHz。
- (1) 要让程序运行速度提高到两倍,浮点指令的CPI应该变为多少?
- (2) L/S指令的CPI应该变为多少?
- (3) 如果整数、浮点指令的CPI降低40%,L/S指令和分支指令的CPI减少30%,程序的执行时间改进多少?
解答:
(1) 浮点指令的CPI应该变为多少?
首先计算原始的总CPI:
总CPI=50+110+80+16(50×1)+(110×1)+(80×4)+(16×2)=25650+110+320+32=256512=2
假设浮点指令的CPI变为 x,总CPI变为1:
256(50×x)+(110×1)+(80×4)+(16×2)=1
解得:
50x+110+320+32=256
50x+462=256
50x=−206
x=−4.12
这显然是不可能的,因为CPI不能为负。因此,仅通过改变浮点指令的CPI无法将程序运行速度提高到两倍 。
(2) L/S指令的CPI应该变为多少?
假设L/S指令的CPI变为 y,总CPI变为1:
256(50×1)+(110×1)+(80×y)+(16×2)=1
解得:
50+110+80y+32=256
80y+192=256
80y=64
y=0.8
因此,L/S指令的CPI应该变为 0.8。
(3) 程序的执行时间改进多少?
新的CPI:
- 整数指令CPI:1×0.6=0.6
- 浮点指令CPI:1×0.6=0.6
- L/S指令CPI:4×0.7=2.8
- 分支指令CPI:2×0.7=1.4
新的总CPI:
总CPI新=256(50×0.6)+(110×0.6)+(80×2.8)+(16×1.4)=25630+66+224+22.4=256342.4=1.3375
原来的总CPI为2,新的总CPI为1.3375。因此,执行时间改进为:
1.33752≈1.495
即执行时间减少了约 49.5%。
1.8 功耗
问题:
奔腾4主频为3.6GHz,工作电压为1.25V,平均静态功耗为10W,动态功耗90W;酷睿i5主频为3.4GHz,工作电压为0.9V,平均静态功耗为30W,动态功耗40W。
解答:
根据公式:
动态功耗=21×C×V2×f
奔腾4的平均负载电容 CP4:
CP4=2×V2×f动态功耗=2×(1.25)2×3.6×10990=2×1.5625×3.6×10990≈15.55×10−9 F=32 pF
酷睿i5的平均负载电容 Ci5:
Ci5=2×V2×f动态功耗=2×(0.9)2×3.4×10940=2×0.81×3.4×10940≈14.43×10−9 F=29 pF
川大期末真题
1. 下面哪种处理器不是采用RISC指令系统?
- A. 华为麒麟处理器
- B. 高通845处理器
- C. mips处理器
- D. Intel酷睿I7处理器
#card
答案:
CISC指令集主要是x86,以AMD和Intel为主
D. Intel酷睿I7处理器(采用CISC指令集)
2. 八位四选一多路选择器控制线位数是?
答案:
B. 2(因为 22=4,表示4个选择)
3. 下面关于CPI的说法,错误的是?
- A. 多周期CPU比单周期CPU的CPI大,因此单周期CPU更快
- B. 同一台机器中运行不同的程序CPI不一定相同
- C. mips单周期CPU各种指令的CPI是相同的
- D. mips多周期CPU访存指令CPI比R-type型指令CPI大
#card
答案:
A. 多周期CPU比单周期CPU的CPI大,因此单周期CPU更快(CPI大不一定意味着CPU更快,还需要考虑时钟频率等因素)
4. 下列哪一项和CPU的运算速度关系不大?
- A. CPU主频
- B. MIPS
- C. CPI
- D. 主存频率
#card
答案:
MIPS只考虑IC和CPI
D. 主存频率(主存频率主要影响数据传输速度,而不是CPU的运算速度)
5. 将指令从符号码翻译成二进制码的程序?
- A. 汇编器
- B. 编译器
- C. 链接器
- D. 加载器
#card
答案:
符号码就是汇编语言
A. 汇编器
6. 同一个程序,在同一台计算机的CPU超频前和超频后运行,假设内存的访问速度不变,超频前和超频后CPI对比应该是?
注:CPU超频是指增大CPU的时钟频率
- A. 超频前的CPI大
- B. 超频后的CPI大
#card
答案:
B
CPU的速度远远快于内存,所以CPU有很长的时间都是在等待内存的操作。
现在我们增大时钟频率f,但是我们所需要执行的程序操作数cycle是不会改变的。
同时等待的时间也不会变化,但是f降低,等待的时钟周期变长了
总的时钟周期变长了。CPI = cycles/IC会变得更大
7. 某处理器执行某一段程序,该程序包含三类指令,其中运算指令120条,访存指令60条,分支指令20条,各类指令的CPI分别为5、10和2。请计算执行这段程序的平均CPI。
#card
解答:
总CPI=120+60+20(120×5)+(60×10)+(20×2)=200600+600+40=2001240=6.2
平均CPI为 6.2。
8. 编译程序对一个应用在给定的处理器上的性能有极深的影响。假定一个程序,如果采用编译程序A,则动态指令数为1.0×109,执行时间为1.5s;如果采用编译程序B,则动态指令数为1.5×109,执行时间为2.1s。若该处理器的时钟周期为1ns,请分别求出每种编译程序下的平均CPI。
#card
解答:
编译器A的CPI:
CPIA=指令数执行时间×时钟频率=1.0×109 条1.5×109 ns=1.5
编译器B的CPI:
CPIB=指令数执行时间×时钟频率=1.5×109 条2.1×109 ns=1.4