3.12 有一指令流水线如下所示

发布时间:2020-06-15 07:15:28   来源:文档文库   
字号:

3.12 有一指令流水线如下所示

(1) 求连续输入10条指令,该流水线的实际吞吐率和效率;

(2) 该流水线的瓶颈在哪一段?请采取种不同的措施消除此瓶颈。对于你所给出的种新的流水线,连续输入10条指令时,其实际吞吐率和效率各是多少?

解:(1

2)瓶颈在34段。

变成八级流水线(细分)

重复设置部件

3.13有一个流水线由4段组成,其中每当流经第3段时,总要在该段循环一次,然后才能流到第4段。如果每段经过一次所需要的时间都是,问:

(1) 当在流水线的输入端连续地每时间输入任务时,该流水线会发生什么情况?

(2) 此流水线的最大吞吐率为多少?如果每输入一个任务,连续处理10个任务时的实际吞吐率和效率是多少?

(3) 当每段时间不变时,如何提高该流水线的吞吐率?仍连续处理10个任务时,其吞吐率提高多少?

解:1)会发生流水线阻塞情况。

1个任务

S1

S2

S3

S3

S4

2个任务

S1

S2

stall

S3

S3

S4

3个任务

S1

stall

S2

stall

S3

S3

S4

4个任务

S1

stall

S2

stall

S3

S3

S4

2

3)重复设置部件

吞吐率提高倍数=1.64

3.14 有一条静态多功能流水线由5段组成,加法用1345段,乘法用125段,第3段的时间为2t,其余各段的时间均为△t,而且流水线的输出可以直接返回输入端或

暂存于相应的流水寄存器中。现要在该流水线上计算 ,画出其时空图,并计算其吞吐率、速比和效率。

解:首先,应选择适合于流水线工作的算法。对于本题,应先计算A1B1A2B2A3B3A4B4;再计算(A1B1) ×(A2B2)(A3B3) ×(A4B4);然后求总的结果。

其次,画出完成该计算的时空图,如所示,图中阴影部分表示该段在工作。

由图可见,它在18t时间,给出7个结果。所以吞吐率为:

如果不用流水线,由于一次求3t一次求5t,则产生上述7个结果共需(5+3×3t =29t。所以加速比为

该流水线的效率可由阴影区的面积5个段总时空区的面积的比值求得

3.15 动态多功能流水线由6个功能段组成,如下图:

其中,S1S4S5S6组成乘法流水线,S1S2S3S6组成加法流水线,各个功能段时间均为50ns,假设该流水线的输出结果可以直接返回输入端,而且设置有足够的缓冲寄存器,若以最快的方式用该流水计算:

(1) 画出时空图;

(2) 计算实际的吞吐率、加速比和效率。

解:机器一共要做10次乘法,4次加法。

3.16 MIPS流水线上运行如下代码序列:

LOOP LW R10R2

DADDIU R1R1#1

SW R1 0R2

DADDIU R2R2#4

DSUB R4R3R2

BNEZ R4LOOP

其中R3的初值是R2+396。假设:在整个代码序列的运行过程中,所有的存储器访问都是命中的,并且在一个时钟周期中对同一个寄存器的读操作和写操作可以通过寄存器文件定向。问:

(1) 在没有任何其它定向(或旁路)硬件的支持下,画出该指令序列执行的流水线时空图。假设采用排空流水线的策略处理分支指令,且所有的存储器访问都命中Cache,那么执行上述循环需要多少个时钟周期?

(2) 假设该流水线有正常的定向路径,请画出该指令序列执行的流水线时空图。假设采用预测分支失败的策略处理分支指令,且所有的存储器访问都命中Cache,那么执行上述循环需要多少个时钟周期?

(3) 假设该流水线有正常的定向路径和一个单周期延迟分支,请对该循环中的指令进行调度,你可以重新组织指令的顺序,也可以修改指令的操作数,但是注意不能增加指令的条数。请画出该指令序列执行的流水线时空图,并计算执行上述循环所需要的时钟周期数。

解:

寄存器读写可以定向,无其他旁路硬件支持。排空流水线。

i次迭代(i0..98)开始周期:1+(i×17

总的时钟周期数:(98×17)+181684

有正常定向路径,预测分支失败。

i次迭代(i0..98)开始周期:1+(i×10

总的时钟周期数:(98×10)+11991

有正常定向路径。单周期延迟分支。

LOOP: LW R10(R2)

DADDIU R2R2#4

DADDIU R1R1#1

DSUB R4R3R2

BNEZ R4LOOP

SW R1-4(R2)

i次迭代i 0..98开始周期1+(i ×6

总的时钟周期数:(98×6)+10598

3.17 假设各种分支指令数占所有指令数的百分比如下:

条件分支

20%(其中的60%是分支成功的)

跳转和调用

5%

现有一条段数4的流水线,无条件分支在第二个时钟周期结束时就被解析出来,而条件分支要到第三个时钟周期结束时才能够被解析出来。第一个流水段是完全独立于指令类型的,即所有类型的指令都必须经过第一个流水段的处理。请问在没有任何控制相关的情况下,该流水线相对于存在上述控制相关情况下的加速比是多少?

解:没有控制相关时流水线的平均CPI1

存在控制相关时:由于无条件分支在第二个时钟周期结束时就被解析出来,而条件分支

要到第3个时钟周期结束时才能被解析出来。所以:

1)若使用排空流水线的策略,则对于条件分支,有两个额外的stall,对无条件分支,有一个额外的stall

CPI = 1+20%*2+5%*1 = 1.45

加速比S=CPI/1 = 1.45

2 若使用预测分支成功策略,则对于不成功的条件分支,有两个额外的stall,对无条件分支和成功的条件分支,有一个额外的stall 1

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

5.10 假设对指令Cache的访问占全部访问的75%;而对数据Cache的访问占全部访问的25%Cache的命中时间为1个时钟周期,失效开销为50 个时钟周期,在混合Cache中一次loadstore操作访问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%×(10.15%×50)+25%×(13.77%×50

=(75%×1.075)+(25%×2.885)=1.5275

混合Cache的平均访存时间=75%×(10.95%×50)+25%×(110.95%×50

=(75%×1.475)+(25%×2.475)=1.725

因此,尽管分离Cache的实际失效率比混合Cache的高,但其平均访存时间反而较低。分离Cache提供了两个端口,消除了结构相关。

5.11 给定以下的假设,试计算直接映象Cache和两路组相联Cache的平均访问时间以及CPU的性能。由计算结果能得出什么结论?

(1) 理想Cache情况下的CPI2.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执行+存储等待周期)*时钟周期

CPU time=ICCPI执行+总失效次数/指令总数*失效开销) *时钟周期

=IC((CPI执行*时钟周期)+(每条指令的访存次数*失效率*失效开销*时钟周期))

CPU time 1-way=IC(2.0*2+1.2*0.014*80)5.344IC

CPU time 2-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%

0

Y

95%*25%=23.8%

1

N

5%*75%=3.8%

2

N

5%*25%=1.3%

3

一次访存请求最后真正的平均访存次数=(71.3%*0)+(23.8%*1)+(3.8%*2)+(1.3%*3)0.35

已用带宽=0.35×109/10 9 =35.0%

2)写回法cache访问命中,有两种情况:

读命中,不访问主存;

写命中,不访问主存。采用写回法,只有当修改的cache块被换出时,才写入主存;

访问失效,有一个块将被换出,这也有两种情况:

如果被替换的块没有修改过,将主存中的块调入cache块中,访问主存两次;

如果被替换的块修改过,则首先将修改的块写入主存,需要访问主存两次;然后将主存中的块调入cache块中,需要访问主存两次,共四次访问主存。

访问命中

块为脏

频率

访存次数

Y

N

95%*70%=66.5%

0

Y

Y

95%*30%=28.5%

0

N

N

5%*70%=3.5%

2

N

Y

5%*30%=1.5%

4

所以:

一次访存请求最后真正的平均访存次数=66.5*028.5%*0+3.5%*2+1.5%*4=0.13

已用带宽=0.13×10 9/10 913%

5.13 在伪相联中,假设在直接映象位置没有发现匹配,而在另一个位置才找到数据(伪命中)时,不对这两个位置的数据进行交换。这时只需要1个额外的周期。假设失效开销为50个时钟周期,2KB直接映象Cache的失效率为9.8%2路组相联的失效率为7.6%128KB直接映象Cache的失效率为1.0%2路组相联的失效率为0.7%

(1) 推导出平均访存时间的公式。

(2) 利用(1)中得到的公式,对于2KBCache128KBCache,计算伪相联的平均访存时间。

解:

不管作了何种改进,失效开销相同。不管是否交换内容,在同一“伪相联”组中的两块都是用同一个索引得到的,因此失效率相同,即:失效率伪相联=失效率2

伪相联cache的命中时间等于直接映象cache的命中时间加上伪相联查找过程中的命中时间*该命中所需的额外开销。

命中时间伪相联=命中时间1+伪命中率伪相联×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 假设采用理想存储器系统时的基本CPI1.5,主存延迟是40个时钟周期;传输速率4字节/时钟周期,且Cache50%的块是修改过的。每个块中有32字节,20%的指令是数据传送指令。并假设没有写缓存,在TLB失效的情况下需要20时钟周期,TLB不会降低Cache命中率。CPU产生指令地址或Cache失效时产生的地址有0.2%没有在TLB中找到。

(1) 在理想TLB情况下,计算均采用写回法16KB直接映象统一Cache16KB两路组相联统一Cache32KB直接映象统一Cache机器的实际CPI

(2) 在实际TLB情况下,用(1)的结果,计算均采用写回法16KB直接映象统一Cache16KB两路组相联统一Cache32KB直接映象统一Cache机器的实际CPI

其中假设16KB直接映象统一Cache16KB两路组相联统一Cache32KB直接映象统一Cache的失效率分别为2.9%2.2%2.0%25%的访存为写访问。

解: CPI=CPI 执行+存储停顿周期数/指令数

存储停顿由下列原因引起:

从主存中取指令

loadstore指令访问数据

TLB引起

1)对于理想TLBTLB失效开销为0。而对于统一CacheR指令=R数据

P指令=主存延迟+传输一个块需要使用的时间=4032/448(拍)

若为读失效,P数据=主存延迟+传输一个块需要使用的时间=4032/448(拍)

若为写失效,且块是干净的,

P数据=主存延迟+传输一个块需要使用的时间=4032/448(拍)

若为写失效,且块是脏的,

P数据=主存延迟+传输两个块需要使用的时间=4064/456(拍)

CPI=1.5+[RP+(RP*20%)+0 ]

指令访存全是读,而数据传输指令LoadStore指令,

f数据*P数据=读百分比*f数据*P数据)+写百分比*f数据*P干净数据*其对应的百分比

f数据*P脏数据*其对应的百分比)

20%*75%×4825*50*48+50*4816)))=50(拍)

代入上述公式计算出结果为:

配置

失效率

CPI

16KB 直接统一映象

0.029

4.4

16KB两路统一映象

0.022

3.4

32KB直接统一映象

0.020

3.2

(2)

f数据(数据访问指令频率),RtPt(分别是TLB的失效率和失效开销),RcPw(分别是Cache的失效率和写回的频率)代入公式得:

TLB停顿/指令数={[1+f数据]*[Rc(1+Rw)]}RtPt

其中,1+f数据:每条指令的访问内存次数;Rc(1+Rw):每次内存访问需要的TLB访问次数。

由条件得:TLB停顿/指令数={[1+20%]*[Rc(1+25%)]}0.2%×20

配置

失效率

理想TLBCPI

16KB 直接统一映象

0.029

4.0

16KB两路统一映象

0.022

3.4

32KB直接统一映象

0.020

3.2

8.2 一个具有32台处理机的系统,对远程存储器访问时间是2000ns。除了通信以外,假设计算中的访问均命中局部存储器。当发出一个远程请求时,本地处理机挂起。处理机的时钟周期时间是10ns,假设指令基本的CPI1.0(设所有访存均命中Cache)。对于下述两种情况:

(1) 没有远程访问;

(2) 0.5%的指令需要远程访问。

试问前者比后者快多少?

解:已知远程访问率 p = 0.5%,远程访问时间 t = 2000ns,时钟周期 T = 10ns

远程访问开销 C = t/T = 2000ns/10ns = 200(时钟周期数)

0.5%远程访问的机器的实际 CPI2 为:

CPI2 = CPI1 + p×C = 1.0 + 0.5%×200 = 2.0

只有局部访问的机器的基本 CPI1 = 1.0

CPI2/ CPI1 = 2.0/1.0 = 2(倍)

因此,没有远程访问状态下的机器速度是有0.5% 远程访问的机器速度的2 倍。

本文来源:https://www.2haoxitong.net/k/doc/11ce555c14fc700abb68a98271fe910ef02dae02.html

《3.12 有一指令流水线如下所示.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式