计算机系统结构复习资料文档格式.docx
《计算机系统结构复习资料文档格式.docx》由会员分享,可在线阅读,更多相关《计算机系统结构复习资料文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
输出相关:
无
反相关:
真相关:
S1&
S2
由于循环引入的相关:
S4&
S4’(真相关)、S1’&
S4(真相关)、S3’&
S4(真相关)、S1&
S3’(输出相关、反相关)、S2&
S3’(反相关)。
3.12有一指令流水线如下所示
(1)求连续输入10条指令,该流水线的实际吞吐率和效率;
(2)该流水线的“瓶颈”在哪一段?
请采取两种不同的措施消除此“瓶颈”。
对于你所给出的两种新的流水线,连续输入10条指令时,其实际吞吐率和效率各是多少?
(1)
(2)瓶颈在3、4段。
⏹变成八级流水线(细分)
⏹重复设置部件
1
2
3-1
3-2
4-1
4-2
4-3
4-4
3.13有一个流水线由4段组成,其中每当流经第3段时,总要在该段循环一次,然后才能流到第4段。
如果每段经过一次所需要的时间都是
,问:
(1)当在流水线的输入端连续地每
时间输入任务时,该流水线会发生什么情况?
(2)此流水线的最大吞吐率为多少?
如果每
输入一个任务,连续处理10个任务时的实际吞吐率和效率是多少?
(3)当每段时间不变时,如何提高该流水线的吞吐率?
仍连续处理10个任务时,其吞吐率提高多少?
(1)会发生流水线阻塞情况。
第1个任务
S1
S3
S4
第2个任务
stall
第3个任务
第4个任务
(2)
(3)重复设置部件
吞吐率提高倍数=
=1.64
3.14有一条静态多功能流水线由5段组成,加法用1、3、4、5段,乘法用1、2、5段,第3段的时间为2△t,其余各段的时间均为△t,而且流水线的输出可以直接返回输入端或
暂存于相应的流水寄存器中。
现要在该流水线上计算,画出其时空图,并计算其吞吐率、加速比和效率。
首先,应选择适合于流水线工作的算法。
对于本题,应先计算A1+B1、A2+B2、A3+B3和A4+B4;
再计算(A1+B1)×
(A2+B2)和(A3+B3)×
(A4+B4);
然后求总的结果。
其次,画出完成该计算的时空图,如图所示,图中阴影部分表示该段在工作。
由图可见,它在18个△t时间中,给出了7个结果。
所以吞吐率为:
如果不用流水线,由于一次求积需3△t,一次求和需5△t,则产生上述7个结果共需(4×
5+3×
3)△t=29△t。
所以加速比为:
该流水线的效率可由阴影区的面积和5个段总时空区的面积的比值求得:
3.15动态多功能流水线由6个功能段组成,如下图:
其中,S1、S4、S5、S6组成乘法流水线,S1、S2、S3、S6组成加法流水线,各个功能段时间均为50ns,假设该流水线的输出结果可以直接返回输入端,而且设置有足够的缓冲寄存器,若以最快的方式用该流水计算:
(1)画出时空图;
(2)计算实际的吞吐率、加速比和效率。
机器一共要做10次乘法,4次加法。
3.16在MIPS流水线上运行如下代码序列:
LOOP:
LWR1,0(R2)
DADDIUR1,R1,#1
SWR1,0(R2)
DADDIUR2,R2,#4
DSUBR4,R3,R2
BNEZR4,LOOP
其中:
R3的初值是R2+396。
假设:
在整个代码序列的运行过程中,所有的存储器访问都是命中的,并且在一个时钟周期中对同一个寄存器的读操作和写操作可以通过寄存器文件“定向”。
问:
(1)在没有任何其它定向(或旁路)硬件的支持下,请画出该指令序列执行的流水线时空图。
假设采用排空流水线的策略处理分支指令,且所有的存储器访问都命中Cache,那么执行上述循环需要多少个时钟周期?
(2)假设该流水线有正常的定向路径,请画出该指令序列执行的流水线时空图。
假设采用预测分支失败的策略处理分支指令,且所有的存储器访问都命中Cache,那么执行上述循环需要多少个时钟周期?
(3)假设该流水线有正常的定向路径和一个单周期延迟分支,请对该循环中的指令进行调度,你可以重新组织指令的顺序,也可以修改指令的操作数,但是注意不能增加指令的条数。
请画出该指令序列执行的流水线时空图,并计算执行上述循环所需要的时钟周期数。
寄存器读写可以定向,无其他旁路硬件支持。
排空流水线。
第i次迭代(i=0..98)开始周期:
1+(i×
17)
总的时钟周期数:
(98×
17)+18=1684
有正常定向路径,预测分支失败。
10)
10)+11=991
有正常定向路径。
单周期延迟分支。
LOOP:
LWR1,0(R2)
DADDIUR2,R2,#4
DADDIUR1,R1,#1
BNEZR4,LOOP
SWR1,-4(R2)
第i次迭代(i=0..98)开始周期:
1+(i×
6)
6)+10=598
3.17假设各种分支指令数占所有指令数的百分比如下:
条件分支
20%(其中的60%是分支成功的)
跳转和调用
5%
现有一条段数为4的流水线,无条件分支在第二个时钟周期结束时就被解析出来,而条件分支要到第三个时钟周期结束时才能够被解析出来。
第一个流水段是完全独立于指令类型的,即所有类型的指令都必须经过第一个流水段的处理。
请问在没有任何控制相关的情况下,该流水线相对于存在上述控制相关情况下的加速比是多少?
没有控制相关时流水线的平均CPI=1
存在控制相关时:
由于无条件分支在第二个时钟周期结束时就被解析出来,而条件分支
要到第3个时钟周期结束时才能被解析出来。
所以:
(1)若使用排空流水线的策略,则对于条件分支,有两个额外的stall,对无条件分支,有一个额外的stall:
CPI=1+20%*2+5%*1=1.45
加速比S=CPI/1=1.45
(2)若使用预测分支成功策略,则对于不成功的条件分支,有两个额外的stall,对无条件分支和成功的条件分支,有一个额外的stall1:
CPI=1+20%*(60%*1+40%*2)+5%*1=1.33
加速比S=CPI/1=1.33
(3)若使用预测分支失败策略,则对于成功的条件分支,有两个额外的stall;
对无条件分支,有一个额外的stall;
对不成功的条件分支,其目标地址已经由PC值给出,不必等待,所以无延迟:
CPI=1+20%*(60%*2+40%*0)+5%*1=1.29
加速比S=CPI/1=1.29
3.18在CRAY-1机器上,按照链接方式执行下述4条向量指令(括号中给出了相应功能部件的执行时间),如果向量寄存器和功能部件之间的数据传送需要1拍,试求此链接流水线的通过时间是多少拍?
如果向量长度为64,则需多少拍才能得到全部结果?
V0←存储器(从存储器中取数:
7拍)
V2←V0+V1(向量加:
3拍)
V3←V2<
A3(按(A3)左移:
4拍)
V5←V3∧V4(向量逻辑乘:
2拍)
通过时间就是每条向量指令的第一个操作数执行完毕需要的时间,也就是各功能流水线由空到满的时间,具体过程如下图所示。
要得到全部结果,在流水线充满之后,向量中后继操作数继续以流水方式执行,直到整组向量执行完毕。
3.19某向量处理机有16个向量寄存器,其中V0~V5中分别放有向量A、B、C、D、E、F,向量长度均为8,向量各元素均为浮点数;
处理部件采用两条单功能流水线,加法功能部件时间为2拍,乘法功能部件时间为3拍。
采用类似于CARY-1的链接技术,先计算(A+B)*C,在流水线不停流的情况下,接着计算(D+E)*F。
(1)求此链接流水线的通过时间?
(设寄存器入、出各需1拍)
(2)假如每拍时间为50ns,完成这些计算并把结果存进相应寄存器,此处理部件的实际吞吐率为多少MFLOPS?
(1)我们在这里假设A+B的中间结果放在V6中,(A+B)×
C地最后结果放在V7中,D+E地中间结果放在V8中,(D+E)×
F的最后结果放在V9中。
具体实现参考下图:
通过时间应该为前者((A+B)×
C)通过的时间:
T通过=(1+2+1)+(1+3+1)=9(拍)
(2)在做完(A+B)×
C之后,作(C+D)×
E就不需要通过时间了。
V6←A+B
V7←V6×
C
V8←D+E
V9←V8×
F
5.8组相联Cache的失效率比相同容量直接映象Cache的失效率低。
由此能否得出结论:
采用组相联一定能带来性能上的提高?
为什么?
答:
不一定。
因为组相联命中率的提高是以增加命中时间为代价的,组相联需要增加多路选择开关。
5.9写出三级Cache的平均访问时间的公式。
平均访存时间=命中时间+失效率×
失效开销
只有第I层失效时才会访问第I+1。
设三级Cache的命中率分别为HL1、Hl2、HL3,失效率分别为Ml1、Ml2、ML3,第三级Cache的失效开销为PL3。
平均访问时间TA=HL1+Ml1{Hl2+Ml2(HL3+ML3×
PL3)}
5.10假设对指令Cache的访问占全部访问的75%;
而对数据Cache的访问占全部访问的25%。
Cache的命中时间为1个时钟周期,失效开销为50个时钟周期,在混合Cache中一次load或store操作访问Cache的命中时间都要增加一个时钟周期,32KB的指令Cache的失效率为0.39%,32KB的数据Cache的失效率为4.82%,64KB的混合Cache的失效率为1.35%。
又假设采用写直达策略,且有一个写缓冲器,并且忽略写缓冲器引起的等待。
试问指令Cache和数据Cache容量均为32KB的分离Cache和容量为64KB的混合Cache相比,哪种Cache的失效率更低?
两种情况下平均访存时间各是多少?
(1)根据题意,约75%的访存为取指令。
因此,分离Cache的总体失效率为:
(75%×
0.15%)+(25%×
3.77%)=1.055%;
容量为128KB的混合Cache的失效率略低一些,只有0.95%。
(2)平均访存时间公式可以分为指令访问和数据访问两部分:
平均访存时间=指令所占的百分比×
(读命中时间+读失效率×
失效开销)+数据所占的百分比×
(数据命中时间+数据失效率×
失效开销)
所以,两种结构的平均访存时间分别为:
分离Cache的平均访存时间=75%×
(1+0.15%×
50)+25%×
(1+3.77%×
50)
=(75%×
1.075)+(25%×
2.885)=1.5275
混合Cache的平均访存时间=75%×
(1+0.95%×
(1+1+0.95%×
1.475)+(25%×
2.475)=1.725
因此,尽管分离Cache的实际失效率比混合Cache的高,但其平均访存时间反而较低。
分离Cache提供了两个端口,消除了结构相关。
5.11给定以下的假设,试计算直接映象Cache和两路组相联Cache的平均访问时间以及CPU的性能。
由计算结果能得出什么结论?
(1)理想Cache情况下的CPI为2.0,时钟周期为2ns,平均每条指令访存1.2次;
(2)两者Cache容量均为64KB,块大小都是32字节;
(3)组相联Cache中的多路选择器使CPU的时钟周期增加了10%;
(4)这两种Cache的失效开销都是80ns;
(5)命中时间为1个时钟周期;
(6)64KB直接映象Cache的失效率为1.4%,64KB两路组相联Cache的失效率为1.0%。
平均访问时间=命中时间+失效率×
平均访问时间1-路=2.0+1.4%*80=3.12ns
平均访问时间2-路=2.0*(1+10%)+1.0%*80=3.0ns
两路组相联的平均访问时间比较低
CPUtime=(CPU执行+存储等待周期)*时钟周期
CPUtime=IC(CPI执行+总失效次数/指令总数*失效开销)*时钟周期
=IC((CPI执行*时钟周期)+(每条指令的访存次数*失效率*失效开销*时钟周期))
CPUtime1-way=IC(2.0*2+1.2*0.014*80)=5.344IC
CPUtime2-way=IC(2.2*2+1.2*0.01*80)=5.36IC
相对性能比:
5.36/5.344=1.003
直接映象cache的访问速度比两路组相联cache要快1.04倍,而两路组相联Cache的平均性能比直接映象cache要高1.003倍。
因此这里选择两路组相联。
5.12假设一台计算机具有以下特性:
(1)95%的访存在Cache中命中;
(2)块大小为两个字,且失效时整个块被调入;
(3)CPU发出访存请求的速率为109字/s;
(4)25%的访存为写访问;
(5)存储器的最大流量为109字/s(包括读和写);
(6)主存每次只能读或写一个字;
(7)在任何时候,Cache中有30%的块被修改过;
(8)写失效时,Cache采用按写分配法。
现欲给该计算机增添一台外设,为此首先想知道主存的频带已用了多少。
试对于以下两种情况计算主存频带的平均使用比例。
(1)写直达Cache;
(2)写回法Cache。
采用按写分配
(1)写直达cache访问命中,有两种情况:
读命中,不访问主存;
写命中,更新cache和主存,访问主存一次。
访问失效,有两种情况:
读失效,将主存中的块调入cache中,访问主存两次;
写失效,将要写的块调入cache,访问主存两次,再将修改的数据写入cache和主存,访问主存一次,共三次。
上述分析如下表所示。
访问命中
访问类型
频率
访存次数
Y
读
95%*75%=71.3%
写
95%*25%=23.8%
N
5%*75%=3.8%
5%*25%=1.3%
3
一次访存请求最后真正的平均访存次数
=(71.3%*0)+(23.8%*1)+(3.8%*2)+(1.3%*3)=0.35
已用带宽=0.35×
109/109=35.0%
(2)写回法cache访问命中,有两种情况:
写命中,不访问主存。
采用写回法,只有当修改的cache块被换出时,才写入主存;
访问失效,有一个块将被换出,这也有两种情况:
如果被替换的块没有修改过,将主存中的块调入cache块中,访问主存两次;
如果被替换的块修改过,则首先将修改的块写入主存,需要访问主存两次;
然后将主存中的块调入cache块中,需要访问主存两次,共四次访问主存。
块为脏
95%*70%=66.5%
95%*30%=28.5%
5%*70%=3.5%
5%*30%=1.5%
4
一次访存请求最后真正的平均访存次数=66.5%*0+28.5%*0+3.5%*2+1.5%*4=0.13
已用带宽=0.13×
109/109=13%
5.13在伪相联中,假设在直接映象位置没有发现匹配,而在另一个位置才找到数据(伪命中)时,不对这两个位置的数据进行交换。
这时只需要1个额外的周期。
假设失效开销为50个时钟周期,2KB直接映象Cache的失效率为9.8%,2路组相联的失效率为7.6%;
128KB直接映象Cache的失效率为1.0%,2路组相联的失效率为0.7%。
(1)推导出平均访存时间的公式。
(2)利用
(1)中得到的公式,对于2KBCache和128KBCache,计算伪相联的平均访存时间。
不管作了何种改进,失效开销相同。
不管是否交换内容,在同一“伪相联”组中的两块都是用同一个索引得到的,因此失效率相同,即:
失效率伪相联=失效率2路。
伪相联cache的命中时间等于直接映象cache的命中时间加上伪相联查找过程中的命中时间*该命中所需的额外开销。
命中时间伪相联=命中时间1路+伪命中率伪相联×
交换或不交换内容,伪相联的命中率都是由于在第一次失效时,将地址取反,再在第二次查找带来的。
因此伪命中率伪相联=命中率2路-命中率1路=(1-失效率2路)-(1-失效率1路)
=失效率1路-失效率2路。
交换内容需要增加伪相联的额外开销。
平均访存时间伪相联=命中时间1路+(失效率1路-失效率2路)×
1+失效率2路×
失效开销1路
将题设中的数据带入计算,得到:
平均访存时间2Kb=1+(0.098-0.076)*1+(0.076*50)=4.822
平均访存时间128Kb=1+(0.010-0.007)*1+(0.007*50)=1.353
显然是128KB的伪相联Cache要快一些。
5.14假设采用理想存储器系统时的基本CPI是1.5,主存延迟是40个时钟周期;
传输速率为4字节/时钟周期,且Cache中50%的块是修改过的。
每个块中有32字节,20%的指令是数据传送指令。
并假设没有写缓存,在TLB失效的情况下需要20时钟周期,TLB不会降低Cache命中率。
CPU产生指令地址或Cache失效时产生的地址有0.2%没有在TLB中找到。
(1)在理想TLB情况下,计算均采用写回法16KB直接映象统一Cache、16KB两路组相联统一Cache和32KB直接映象统一Cache机器的实际CPI;
(2)在实际TLB情况下,用
(1)的结果,计算均采用写回法16KB直接映象统一Cache、16KB两路组相联统一Cache和32KB直接映象统一Cache机器的实际CPI;
其中假设16KB直接映象统一Cache、16KB两路组相联统一Cache和32KB直接映象统一Cache的失效率分别为2.9%、2.2%和2.0%;
25%的访存为写访问。
CPI=CPI执行+存储停顿周期数/指令数
存储停顿由下列原因引起:
●从主存中取指令
●load和store指令访问数据
●由TLB引起
(1)对于理想TLB,TLB失效开销为0。
而对于统一Cache,R指令=R数据
P指令=主存延迟+传输一个块需要使用的时间=40+32/4=48(拍)
若为读失效,P数据=主存延迟+传输一个块需要使用的时间=40+32/4=48(拍)
若为写失效,且块是干净的,
P数据=主存延迟+传输一个块需要使用的时间=40+32/4=48(拍)
若为写失效,且块是脏的,
P数据=主存延迟+传输两个块需要使用的时间=40+64/4=56(拍)
CPI=1.5+[RP+(RP*20%)+0]
指令访存全是读,而数据传输指令Load或Store指令,
f数据*P数据=读百分比*(f数据*P数据)+写百分比*(f数据*P干净数据*其对应的百分比
+f数据*P脏数据*其对应的百分比)
=20%*(75%×
48+25%*(50%*48+50%*(48+16)))=50(拍)
代入上述公式计算出结果为:
配置
失效率
CPI
16KB直接统一映象
0.029
4.4
16KB两路统一映象
0.022
3.4
32KB直接统一映象
0.020
3.2
将f数据(数据访问指令频率),Rt和Pt(分别是TLB的失效率和失效开销),Rc和Pw(分别是Cache的失效率和写回的频率)代入公式得:
TLB停顿/指令数={[1+f数据]*[Rc(1+Rw)]}RtPt
其中,1+f数据:
每条指令的访问内存次数;
Rc(1+Rw):
每次内存访问需要的TLB访问次数。
由条件得:
TLB停顿/指令数={[1+20%]*[Rc(1+25%)]}0.2%×
20
理想TLB的CPI
4.0