1、1. 假设有一条长流水线,仅仅对条件转移指令使用分支目标缓冲。假设分支预测错误的开销为 4 个时钟周期,缓冲不命中的开销为3 个时钟周期。假设:命中率为 90%,预测精度为 90%,分支频率为 15%,没有分支的基本 CPI 为 1。求程序执行的 CPI。相对于采用固定的 2 个时钟周期延迟的分支处理,哪种方法程序执行速度更快?参考答案:解:(1)程序执行的 CPI = 没有分支的基本 CPI(1) + 分支带来的额外开销分支带来的额外开销是指在分支指令中,缓冲命中但预测错误带来的开销与缓冲没有命中带来的开销之和。分支带来的额外开销= 15% * (90%命中10%预测错误4 + 10没命中3
2、)= 0.099所以,程序执行的 CPI 1 0.099 = 1.099(2)采用固定的 2 个时钟周期延迟的分支处理 CPI = 1 + 15%2 = 1.3由(1) (2)可知分支目标缓冲方法执行速度快。2. 计算机系统中有三个部件可以改进,这三个部件的部件加速比为:部件加速比 1=30; 部件加速比 2=20 部件加速比 3=10 如果部件 2 和部件 3 的可改进比例均为 30%,那么当部件 1 的可改进比例为多少时,系统加速比才可以达到 10?如果三个部件的可改进比例分别为 20%、10% 和 30%,三个部件同时改进,那么系统中不可加速部分的执行时间在总执行时间中占的比例是多少?
3、参考答案:解:(1)在多个部件可改进情况下,Amdahl 定理的扩展:iinSFS)1(已知 S130,S 215,S 315 ,S n10,F 10.3,F 20.3 ,得: )()( 10/0.3/.0.-13得 F30.36,即部件 3 的可改进比例为 36%。(2)设系统改进前的执行时间为 T,则 3 个部件改进前的执行时间为:(0.3+0.3+0.2) T = 0.8T,不可改进部分的执行时间为 0.2T。已知 3 个部件改进后的加速比分别为 S130,S 220,S 310,因此 3 个部件改进后的执行时间为: TTTn04503 改进后整个系统的执行时间为:Tn = 0.045T
4、+0.2T = 0.245T那么系统中不可改进部分的执行时间在总执行时间中占的比例是:82.045.T3. 设指令流水线由取指令、分析指令和执行指令 3 个部件构成,每个部件经过的时间为t,连续流入 12 条指令。分别画出标量流水处理机以及 ILP 均为 4 的超标量处理机、超长指令字处理机、超流水处理机的时空图,并分别计算它们相对于标量流水处理机的加速比。参考答案:解:标量流水处理机的时空图:执行完 12 条指令需 T114t 。超标量流水处理机与超长指令字处理机的时空图:超标量流水处理机中,每一个时钟周期同时启动 4 条指令。执行完 12 条指令需T25 t,相对于标量流水处理机的加速比为
5、: 8.25142tTS超长指令字处理机中,每 4 条指令组成一条长指令,共形成 3 条长指令。执行完 12 条指令需 T35t,相对于标量流水处理机的加速比为: 8.5143tTS超流水处理机的时空图:取 指 分 析 执 行 时 间 14 取 指 分 析 执 行 时 间 5 超 标 量 处 理 机 时 空 图 时 间 5 超 长 指 令 字 处 理 机 时 空 图 取 指 分 析 执 行 超流水处理机中,每 1/4 个时钟周期启动一条指令。执行完 12 条指令需 T45.75t,相对于标量流水处理机的加速比为: 435.2.7514tTS4. 设一条指令的执行过程分成取指令、分析指令和执行指
6、令三个阶段,每个阶段所需的时间分别为t、t 和 2t 。分别求出下列各种情况下,连续执行 N 条指令所需的时间。 只有“取指令”与“执行指令”重叠; “取指令” 、 “分析指令”与“执行指令”重叠。参考答案: 连续执行 N 条指令所需的时间为: 4t3(N-1) t(3N1)t 连续执行 N 条指令所需的时间为: 4t2(N-1) t(2N2)t5.有一指令流水线如下所示 求连续输入 10 条指令,该流水线的实际吞吐率和效率; 该流水线的“瓶颈” 在哪一段?请采取两种不同的措施消除此“ 瓶颈”。对于你所给出的两种新的流水线,连续输入 10 条指令时,其实际吞吐率和效率各是多少? 参考答案:(1
7、)取 指 时 间 分 析 执 行 4 5.7 20(ns)209)15t(tTmaxmiipieln)(nsP1piel 45.%10TPmtE1ii (2)瓶颈在 3、4 段。 变成八级流水线(细分) 850(ns)9t1)(tTmaxm1iipielnns85Ppel 58.2%704TPEi 重复 设置部件)(s1piel58.2%17085140E6. 动态多功能流水线由 6 个功能段组成,如下图:1 23-13-24-14-24-34-4 耲 弳 1 弳 耲 弴 耱 弴 4 獮 獮 獮 獮 獮 獮 1 23_1 24_1 24_3 1 1 1 22233 3 4 4455 5 6 6
8、677 7 8 910 89 1089 10850ns 时 间 段 其中,S1、 S4、S5、S6 组成乘法流水线, S1、S2、S3、S6 组成加法流水线,各个功能段时间均为 50ns,假设该流水线的输出结果可以直接返回输入端,而且设置有足够的缓冲寄存器,若以最快的方式用该流水计算: 51iiizyx 画出时空图; 计算实际的吞吐率、加速比和效率。参考答案:7. 某向量处理机有 16 个向量寄存器,其中 V0V5 中分别放有向量A、B、C 、 D、E 、F ,向量长度均为 8,向量各元素均为浮点数;处理部件采用两条单功能流水线,加法功能部件时间为 2 拍,乘法功能部件时间为 3 拍。采用类似
9、于 CARY-1 的链接技术,先计算(A+B)*C,在流水线不停流的情况下,接着计算(D+E )*F。求此链接流水线的通过时间?(设寄存器入、出各需 1 拍)假如每拍时间为 50ns,完成这些计算并把结果存进相应寄存器,此处理部件的实际吞吐率为多少 MFLOPS?S1 S2 S3 S4 S5 乘 法 加 法 S6 参考答案:解:(1)在这里假设 AB 的中间结果放在 V6 中, (A B)C 地最后结果放在 V7中,DE 地中间结果放在 V8 中, (DE)F 的最后结果放在 V9 中。具体实现参考下图:V0A V1BV3D V4E V5FV6 V7V2CV9V8向 量 加 向 量 乘通过时间
10、应该为前者(A B)C)通过的时间:T 通过 = (1+2+1)+(1+3+1) =9(拍)(2)在做完(AB)C 之后,作( CD )E 就不需要通过时间了。V6AB V7V6C V8DE V9V8F8. 假设分支目标缓冲的命中率为 90%,程序中无条件转移指令的比例为 5%,没有无条件转移指令的程序 CPI 值为 1。假设分支目标缓冲中包含分支目标指令,允许无条件转移指令进入分支目标缓冲,则程序的 CPI 值为多少? 参考答案:解:设每条无条件转移指令的延迟为 x,则有:15%x1.1 x2当分支目标缓冲命中时,无条件转移指令的延迟为 0。所以 程序的 CPI 1 2 5% (1 90%)
11、 1.019. 一台 32 个处理器的计算机,对远程存储器访问时间为 400ns。除了通信以外,假设计算中的访问均命中局部存储器。当发出一个远程请求时,本处理器挂起。处理器时钟时间为 1GHz,如果指令基本的 IPC 为 2(设所有访存均命中 Cache),求在没有远程访问的状态下与有 0.2%的指令需要远程访问的状态下,前者比后者快多少?S26.7MFLOPT3P120(ns)481( 拍 ) (通 过参考答案:解:没有远程访问时,机器的 CPI 为 1/基本 IPC=1/2=0.5有 0.2%远程访问的机器的实际 CPI 为 CPI基本 CPI远程访问率远程访问开销0.50.2%远程访问开
12、销远程访问开销为 :远程访问时间/时钟周期时间 400 ns/1 ns400 个时钟周期 CPI0.50.2%4001.3因此在没有远程访问的情况下的计算机速度是有 0.2%远程访问的计算机速度的 1.3/0.5=2.6 倍。10. 简述 Tomasulo 算法的基本思想。参考答案:答:核心思想是: 记录和检测指令相关,操作数一旦就绪就立即执行,把发生RAW 冲突的可能性减小到最少; 通过寄存器换名来消除 WAR 冲突和 WAW 冲突。寄存器换名是通过保留站来实现,它保存等待流出和正在流出指令所需要的操作数。基本思想:只要操作数有效,就将其取到保留站,避免指令流出时才到寄存器中取数据,这就使得
13、即将执行的指令从相应的保留站中取得操作数,而不是从寄存器中。指令的执行结果也是直接送到等待数据的其它保留站中去。因而,对于连续的寄存器写,只有最后一个才真正更新寄存器中的内容。一条指令流出时,存放操作数的寄存器名被换成为对应于该寄存器保留站的名称(编号) 。11. 假定有一个处理机台数为 p 的共享存储器多处理机系统。设 m为典型处理机每条指令执行时对全局存储器进行访问的平均次数。设 t 为共享存储器的平均存取时间,x 为使用本地存储器的单处理机 MIPS 速率。再假定在多处理机的每台处理机上执行 n 条指令。根据参数 m,t,x,n 和 p,确定多处理机的有效 MIPS 速率。假设一台多处理
14、机有 p=32 台 RISC 处理机, m=0.4,t=1us,要使多处理机的有效性能达到 56MIPS,需要每台处理机的 MIPS 速率是多少(即 x=?)?假设有 p=32 台 CISC 处理机用在上述多处理机系统中,每台处理机的 x=2MIPS、m=1.6、t=1us ,试问多处理机系统的有效MIPS 速率是多少?参考答案:解:(1)有效 MIPS 速率=p*x/(1+m*x*t)(2)32*x/(10.4*x*1)=56,得 x=5.83(3)有效 MIPS 速率=p*x/(1+m*x*t)=32*2/(1+1.6*2*1)=15.2412. 假设对指令 Cache 的访问占全部访问的
15、 75%;而对数据 Cache的访问占全部访问的 25%。Cache 的命中时间为 1 个时钟周期,失效开销为 50 个时钟周期,在混合 Cache 中一次 load 或 store 操作访问 Cache 的命中时间都要增加一个时钟周期,32KB 的指令 Cache 的失效率为 0.15%,32KB 的数据 Cache 的失效率为 3.77%,64KB 的混合 Cache 的失效率为 0.95%。又假设采用写直达策略,且有一个写缓冲器,并且忽略写缓冲器引起的等待。试问指令 Cache 和数据Cache 容量均为 32KB 的分离 Cache 和容量为 64KB 的混合 Cache 相比,哪种
16、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.
17、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 提供了两个端口,消除了结构相关。13. 给定以下的假设,试计算直接映象 Cache 和两路组相联 Cache的平均访问时间以及 CPU 的性能。由计算结果能得出什么结论?(1) 理想 Cache 情况下的 CPI 为 2.0,时钟周期为 2ns,平均每条指令访存 1.2 次;(2) 两者 Cache 容量均
18、为 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
19、 time=IC(CPI 执行 +总失效次数/指令总数*失效开销) *时钟周期=IC(CPI 执行 *时钟周期)+ (每条指令的访存次数*失效率 *失效开销*时钟周期) )CPU time 1-way=IC(2.0*2+1.2*0.014*80)5.344ICCPU time 2-way=IC(2.2*2+1.2*0.01*80)5.36IC相对性能比: 5.36/5.344=1.0031waytime2CPU直接映象 cache 的访问速度比两路组相联 cache 要快 1.04 倍,而两路组相联 Cache 的平均性能比直接映象 cache 要高 1.003 倍。因此这里选择两路组相联。1
20、4. 假设一台计算机具有以下特性:(1) 95的访存在 Cache 中命中;(2) 块大小为两个字,且失效时整个块被调入;(3) CPU 发出访存请求的速率为 109 字/s;(4) 25的访存为写访问;(5) 存储器的最大流量为 109 字/s(包括读和写) ;(6) 主存每次只能读或写一个字;(7) 在任何时候,Cache 中有 30的块被修改过;(8) 写失效时,Cache 采用按写分配法。现欲给该计算机增添一台外设,为此首先想知道主存的频带已用了多少。试对于以下两种情况计算主存频带的平均使用比例。(1) 写直达 Cache;(2) 写回法 Cache。参考答案:解:采用按写分配(1)写
21、直达 cache 访问命中,有两种情况:读命中,不访问主存;写命中,更新 cache 和主存,访问主存一次。访问失效,有两种情况:读失效,将主存中的块调入 cache 中,访问主存两次;写失效,将要写的块调入 cache,访问主存两次,再将修改的数据写入cache 和主存,访问主存一次,共三次。上述分析如下表所示。访问命中 访问类型 频率 访存次数Y 读 95%*75%=71.3% 0Y 写 95%*25%=23.8% 1N 读 5%*75%=3.8% 2N 写 5%*25%=1.3% 3一次访存请求最后真正的平均访存次数=(71.3%*0)+(23.8%*1)+(3.8%*2)+(1.3%*
22、3)0.35已用带宽=0.3510 9/10 9 =35.0%(2)写回法 cache 访问命中,有两种情况:读命中,不访问主存;写命中,不访问主存。采用写回法,只有当修改的 cache 块被换出时,才写入主存;访问失效,有一个块将被换出,这也有两种情况:如果被替换的块没有修改过,将主存中的块调入 cache 块中,访问主存两次;如果被替换的块修改过,则首先将修改的块写入主存,需要访问主存两次;然后将主存中的块调入 cache 块中,需要访问主存两次,共四次访问主存。访问命中 块为脏 频率 访存次数Y N 95%*70%=66.5% 0Y Y 95%*30%=28.5% 0N N 5%*70%
23、=3.5% 2N Y 5%*30%=1.5% 4所以:一次访存请求最后真正的平均访存次数=66.5*028.5%*0+3.5%*2+1.5%*4=0.13已用带宽0.1310 9/10 913%15. 降低 Cache 失效率有哪几种方法?简述其基本思想。参考答案:答:常用的降低 Cache 失效率的方法有下面几种:(1) 增加 Cache 块大小。增加块大小利用了程序的空间局部性。(2) 增加 Cache 的容量。(3) 提高相联度,降低冲突失效。(4) 伪相联 Cache,降低冲突失效。 当对伪相联 Cache 进行访问时,首先是按与直接映象相同的方式进行访问。如果命中,则从相应的块中取出
24、所访问的数据,送给 CPU,访问结束。如果不命中,就将索引字段的最高位取反,然后按照新索引去寻找“伪相联组”中的对应块。如果这一块的标识匹配,则称发生了“伪命中”。否则,就访问下一级存储器。(5) 硬件预取技术。在处理器提出访问请求前预取指令和数据。(6) 由编译器控制的预取,硬件预取的替代方法,在编译时加入预取的指令,在数据被用到之前发出预取请求。(7) 编译器优化,通过对软件的优化来降低失效率。(8) “牺牲”Cache。在 Cache 和其下一级存储器的数据通路之间增设一个全相联的小 Cache,存放因冲突而被替换出去的那些块。每当发生不命中时,在访问下一级存储器之前,先检查“牺牲”Ca
25、che 中是否含有所需的块。如果有,就将该块与 Cache 中某个块做交换,把所需的块从“牺牲”Cache 调入 Cache。16.假设 Cache 失效开销为 50 个时钟周期,当不考虑存储器停顿时,所有指令的执行时间都是 2.0 个时钟周期, Cache 的失效率为 2%,平均每条指令访存 1.33 次。试分析 Cache对性能的影响。解:CPU 时间也增加为原来的 1.67 倍。但若不采用 Cache,则:CPI2.0+501.3368.517. 考虑两种不同组织结构的 Cache:直接映象 Cache 和两路组相联 Cache,试问它们对CPU 的性能有何影响?先求平均访存时间,然后再
26、计算 CPU 性能。分析时请用以下假设: 理想 Cache(命中率为 100)情况下的 CPI 为 2.0,时钟周期为 2ns,平均每条指令访存 1.3 次。 两种 Cache 容量均为 64KB,块大小都是 32 字节。 图 5.10 说明,在组相联 Cache 中,我们必须增加一个多路选择器,用于根据标识匹配结果从相应组的块中选择所需的数据。因为 CPU 的速度直接与 Cache 命中的速度紧密相关,所以对于组相联 Cache,由于多路选择器的存在而使 CPU 的时钟周期增加到原来的 1.10 倍。 这两种结构 Cache 的失效开销都是 70ns。在实际应用中,应取整为整数个时钟周期。
27、命中时间为 1 个时钟周期, 64KB 直接映象 Cache 的失效率为 1.4%,相同容量的两路组相联 Cache 的失效率为 1.0%。18. 假设一台计算机的 I/O 处理占 10,当其 CPU 性能改进,而 I/O 性能保持不变时,系统总体性能会出现什么变化? 如果 CPU 的性能提高 10 倍 如果 CPU 的性能提高 100 倍解:假设原来的程序执行时间为 1 个单位时间。如果 CPU 的性能提高 10 倍,程序的计算(包含 I/O 处理)时间为:(1 - 10%)/10 + 10% = 0.19即整机性能只能提高约 5 倍,差不多有 50的 CPU 性能浪费在 I/O 上。如果 CPU 性能提高 100 倍,程序的计算时间为:(1 - 10%)/100 + 10% = 0.109而整机性能只能提高约 10 倍,表示有 90的性能浪费在没有改进的 I/O 上了。