CHAP5-存储层次.ppt_第1页
CHAP5-存储层次.ppt_第2页
CHAP5-存储层次.ppt_第3页
CHAP5-存储层次.ppt_第4页
CHAP5-存储层次.ppt_第5页
已阅读5页,还剩168页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、5.2Cache基本知识,5.3 降低Cache失效率的方法,5.4减少Cache失效开销,5.1存储器的层次结构,5.5减少命中时间,5.6主存,5.7虚拟存储器,5.8进程保护和虚存实例,5.9Alpha AXP 21064存储层次,第五章 存储层次,5.1.1 从单级存储器到多级存储器,1. 从用户的角度来看,存储器的三个主要指标是: 容量,速度,价格(每位价格) 2. 人们对这三个指标的期望 3. 这三个指标相互矛盾 4. 解决方法 采用多种存储器技术,构成存储层次。 演示 演示 (局部性原理),5.1 存储器的层次结构,第五章 存储层次,5.1.2 存储层次的性能参数,C,H,TA

2、假设:S 容量 TA 访问时间 C 每位价格 下面仅考虑由M1和M2构成的两级存储层次: M1的参数:S1,TA1,C1 M2的参数:S2,TA2,C2,1. 每位价格C C ,C1S1C2S2,S1S2,5.1 存储器的层次结构,2. 命中率 H 和失效率 F HN1/(N1N2) N1 访问M1的次数 N2 访问M2的次数 失效率 F1H,5.1 存储器的层次结构,3. 平均访问时间 TA TATA1(1H )TM 或 TATA1F TM TA1 命中时间 TM 失效开销,5.1.3 “Cache主存”和“主存辅存”层次,1. 从主存的角度来看 “Cache主存”层次:弥补主存速度的不足

3、“主存辅存”层次: 弥补主存容量的不足,2. “Cache主存”层次 主存与CPU的速度差距,5.1 存储器的层次结构, “Cache - 主存”层次,3. “主存辅存”层次,存储层次,CPU对第二级的访问方式,比较项目,目的,存储管理实现,访问速度的比值(第一级和第二级),典型的块(页)大小,失效时CPU是否切换,“Cache 主存”层次,“主存辅存”层次,为了弥补主存速度的不足,为了弥补主存容量的不足,主要由专用硬件实现,主要由软件实现,几比一,几百比一,几十个字节,几百到几千个字节,可直接访问,均通过第一级,不切换,切换到其他进程,“Cache主存”与“主存辅存”层次的区别,5.1 存储

4、器的层次结构,5.1.4 存储层次的四个问题,当把一个块调入高一层(靠近CPU)存储器时,可以放在哪些位置上? (映象规则),当所要访问的块在高一层存储器中时,如何找到该块? (查找算法),3. 当发生失效时,应替换哪一块? (替换算法),4. 当进行写访问时,应进行哪些操作? (写策略),1.,2.,5.1 存储器的层次结构,5.2 Cache基本知识,1存储空间分割与地址计算,5.2.1 映象规则,1. 全相联映象 全相联:主存中的任一块可以被放置到 Cache中的任意一个位置。 举例 对比: 阅览室位置 随便坐 特点: 空间利用率最高,冲突概率最低, 实现最复杂。,2Cache和主存分块

5、,5.2 Cache 基本知识,2. 直接映象, 直接映象:主存中的每一块只能被放置到 Cache中唯一的一个位置。 举例 (循环分配) 对比:阅览室位置 只有一个位置可 以坐 特点:空间利用率最低,冲突概率最高, 实现最简单。 对于主存的第i 块,若它映象到Cache的第 j 块,则: ji mod (M ) (M为Cache的块数),5.2 Cache 基本知识, 组相联:主存中的每一块可以被放置到Cache 中唯一的一个组中的任何一个位置。 举例 组相联是直接映象和全相联的一种折衷, 设M2m,则当表示为二进制数时,j 实际 上就是i 的低m 位:,3. 组相联映象,m位,j,i:,5.

6、2 Cache 基本知识, 上述的j 和k 通常称为索引, 组的选择常采用位选择算法 若主存第i 块映象到第k 组,则: ki mod(G) (G为Cache的组数) 设G2g,则当表示为二进制数时,k 实 际上就是i 的低 g 位:,g 位,k,i:,5.2 Cache 基本知识, 绝大多数计算机的Cache: n 4 想一想:相联度一定是越大越好?, n 路组相联:每组中有n 个块(nM/G ) n 称为相联度。 相联度越高,Cache空间的利用率就越高, 块冲突概率就越低,失效率也就越低。,全相联,直接映象,组相联,n (路数),G (组数),M,M,1,1,1nM,1GM,5.2 Ca

7、che 基本知识,5.2.2 查找方法,1. 如何确定Cache中是否有所要访问的块? 若有的话如何确定其位置? 答案,5.2 Cache 基本知识, 目录表的结构, 只需查找候选位置所对应的目录表项, 并行查找与顺序查找, 提高性能的重要思想:主候选位置(MRU块) 前瞻执行, 并行查找的实现方法:,5.2 Cache 基本知识,举例: 路组相联并行标识比较 (比较器的个数及位数),相联存储器 单体多字存储器比较器, 路组相联Cache的查找过程, 直接映象Cache的查找过程,5.2.3 替换算法,所要解决的问题:当新调入一块,而Cache又已被占满时,替换哪一块?,2. FIFO 3.

8、LRU 优点:失效率低 LRU和随机法的失效率的比较,1. 随机法 优点:实现简单,5.2 Cache 基本知识,5.2.4 写策略,1. “写”操作所占的比例 Load指令:26 Store指令:9 “写”在所有访存操作中所占的比例: 9/(100269)7 “写”在访问Cache操作中所占的比例: 9/(269)25,3“写”访问有可能导致Cache和主存内容的不一致,2. “写”操作必须在确认是命中后才可进行,5.2 Cache 基本知识,4两种写策略 写直达法 执行“写”操作时,不仅写入Cache,而且 也写入下一级存储器。 写回法 执行“写”操作时,只写入Cache。仅当 Cache

9、中相应的块被替换时,才写回主存。 (设置“污染位”),5.2 Cache 基本知识,5两种写策略的比较 写回法的优点:速度快,所使用的存储器频 带较低; 写直达法的优点:易于实现,一致性好。,6. 写缓冲器,8. 写策略与调块 写回法 按写分配 写直达法 不按写分配,7. “写”操作时的调块 按写分配(写时取) 写失效时,先把所写单元所在的块调入 Cache,再行写入。 不按写分配(绕写法) 写失效时,直接写入下一级存储器而不调块。,5.2 Cache 基本知识,5.2.5 Cache的结构,例子:DEC的Alpha AXP21064中的内部数据 Cache。,1. 简介 容量:8KB 块大小

10、:32B 块数:256 采用不按写分配 映象方法:直接映象 “写”策略:写直达 写缓冲器大小:4个块,5.2 Cache 基本知识,2. 结构图,3. 工作过程 “读”访问命中, “写”访问命中,5. 混合Cache与分离Cache (1) 优缺点 (2) 失效率的比较,5.2 Cache 基本知识, 失效情况下的操作,16 KB,容量,1 KB,2 KB,4 KB,8 KB,32 KB,指令 Cache,3.06%,失 效 率 的 比 较,64 KB,128 KB,数据 Cache,混合 Cache,2.26%,1.78%,1.10%,0.64%,0.39%,0.15%,0.02%,24.6

11、1%,20.57%,15.94%,10.19%,6.47%,4.82%,3.77%,2.88%,13.34%,9.78%,7.24%,4.57%,2.87%,1.99%,1.36%,0.95%,(3) 分离Cache平均失效率的计算:,访问指令Cache的百分比指令Cache的失效率 访问数据Cache的百分比数据Cache的失效率,5.2.6 Cache性能分析,2. 平均访问时间 平均访问时间命中时间失效率失效开销,1. 失效率,例5.1 假设Cache的命中时间为1个时钟周期,失效开销为50 个时钟周期,在混合Cache中一次load或store操作访问Cache的命中时间都要增加一个时

12、钟周期(因为混合Cache只有一个端口,无法同时满足两个请求。按照前一章中有关流水线的术语,混合Cache会导致结构冲突),根据表54所列的失效率,试问指令Cache和数据Cache容量均 为16KB的分离Cache和容量为32KB的混合Cache相,5.2 Cache 基本知识,解: 如前所述,约75%的访存为取指令。因此,分离Cache的总体失效率为: (75%0.64%)(25%6.47%)2.10% 根据表54,容量为32KB的混合Cache的失效率略低一些,只有1.99%.,比,哪种Cache的失效率更低?又假设采用写直达策略,且有一个写缓冲器,并且忽略写缓冲器引起的等待。请问上述两

13、种情况下平均访存时间各是多少?,5.2 Cache 基本知识,平均访存时间公式可以分为指令访问和数据访问两部分: 平均访存时间指令所占的百分比 (指令命中时间指令失效率失效开销) 数据所占的百分比 (数据命中时间数据失效率失效开销) 所以,两种结构的平均访存时间分别为: 平均访存时间分离75%(10.64%50) 25%(16.47%50) (75%1.32)(25%4.325) 0.9901.0592.05,5.2 Cache 基本知识,平均访存时间混合75%(11.99%50) 25%(111.99%50) (75%1.995)(25%2.995) 1.4960.7492.24,3. 程序

14、执行时间 CPU时间(CPU执行周期数存储器停顿周期数) 时钟周期时间 其中, 存储器停顿周期数访存次数失效率 失效开销,5.2 Cache 基本知识,CPU时间ICCPIexe每条指令的平均存储 器停顿周期数时钟周期时间,CPU时间ICCPIexe访存次数/指令数 失效率失效开销时钟周期时间,5.2 Cache 基本知识,例5.2 我们用一个和Alpha AXP类似的机器作为第一个例子。假设Cache失效开销为50个时钟周期,当不考虑存储器停顿时,所有指令的执行时间都是2.0个时钟周期, Cache的失效率为2%,平均每条指令访存1.33次。试分析Cache对性能的影响。,考虑Cache的失

15、效后,性能为: CPU 时间有cacheIC(2.0(1.332%50) 时钟周期时间 IC3.33时钟周期时间,CPU 时间IC(CPIexe ) 时钟周期时间,存储器停顿周期数,指令数,解:,5.2 Cache 基本知识,实际CPI :3.33 3.33/2.0 = 1.67(倍),CPU时间也增加为原来的1.67倍。但若不采用Cache,则: CPI2.0+501.3368.5,5.2 Cache 基本知识,考虑两种不同组织结构的Cache:直接映象Cache和两路组相联Cache,试问它们对CPU的性能有何影响?先求平均访存时间,然后再计算CPU性能。分析时请用以下假设: 理想Cach

16、e(命中率为100)情况下的CPI 为2.0,时钟周期为2ns,平均每条指令 访存1.3次。 两种Cache容量均为64KB,块大小都是32 字节。,例5.3,5.2 Cache 基本知识, 图5.10说明,在组相联Cache中,我们必须增 加一个多路选择器,用于根据标识匹配结果 从相应组的块中选择所需的数据。因为CPU 的速度直接与Cache命中的速度紧密相关,所 以对于组相联Cache,由于多路选择器的存 在而使CPU的时钟周期增加到原来的1.10倍。 这两种结构Cache的失效开销都是70ns。在 实际应用中,应取整为整数个时钟周期。 命中时间为1个时钟周期,64KB直接映象 Cache

17、的失效率为1.4%,相同容量的两路组 相联Cache的失效率为1.0%。,5.2 Cache 基本知识,由:平均访存时间命中时间失效率失效开销 得:平均访存时间1路2.0(0.01470)2.98ns平均访存时间2路2.01.10(0.01070)2.90ns,由:CPU 时间IC(CPIexe每条指令的平均存储器 停顿周期数)时钟周期时间 IC (CPIexe时钟周期时间 每条指令的平均存储器停顿时间),解:,5.2 Cache 基本知识,CPU时间1路IC(2.02(1.30.01470) 5.27IC CPU时间2路IC(2.021.10 (1.30.01070) 5.31IC,得:,5

18、.31IC,CPU时间1路, 1.01,5.27IC,CPU时间2路,5.2 Cache 基本知识,平均访存时间命中时间失效率失效开销 可以从三个方面改进Cache的性能: (1) 降低失效率 (2) 减少失效开销(3) 减少Cache命中时间 下面介绍15种Cache优化技术,5.2.7 改进Cache性能,5.2 Cache 基本知识,(1) 强制性失效(Compulsory miss) 当第一次访问一个块时,该块不在 Cache中,需从下一级存储器中调入Cache, 这就是强制性失效。 (冷启动失效,首次访问失效。) (2) 容量失效(Capacity miss ) 如果程序执行时所需的

19、块不能全部调 入Cache中,则当某些块被替换后,若又,5.3 降低Cache失效率的方法,1. 三种失效(3C),第五章 存储层次,重新被访问,就会发生失效。这种失效称 为容量失效。,(3) 冲突失效(Conflict miss) 在组相联或直接映象Cache中,若太多 的块映象到同一组(块)中,则会出现该组 中某个块被别的块替换(即使别的组或块有 空闲位置),然后又被重新访问的情况。这 就是发生了冲突失效。 (碰撞失效,干扰失效),5.3 降低Cache 失效率的方法,2. 三种失效所占的比例,(SPEC92)表5.5,5.3 降低Cache 失效率的方法,图示I(绝对值),图示(相对值)

20、,可以看出: (1) 相联度越高,冲突失效就越少; (2) 强制性失效和容量失效不受相联度的影响; (3) 强制性失效不受Cache容量的影响,但容 量失效却随着容量的增加而减少; (4) 表中的数据符合2:1的Cache经验规则,即 大小为N 的直接映象Cache的失效率约等于 大小为N/2 的两路组相联Cache的失效率。,强制性失效:增加块大小,预取 (本身很少) 容量失效:增加容量 (抖动现象) 冲突失效:提高相联度 (理想情况:全相联),3. 减少三种失效的方法,4. 许多降低失效率的方法会增加命中时间或 失效开销,5.3 降低Cache 失效率的方法,5.3.1 增加Cache块大

21、小,1. 失效率与块大小的关系 (1) 对于给定的Cache容量,当块大小增加 失效率开始是下降,后来反而上升了; (2) Cache容量越大,使失效率达到最低的 块大小就越大。,5.3 降低Cache 失效率的方法,2. 增加块大小会增加失效开销,3. 例题,例 5.4,假定存储系统在延迟40个时钟周期后,每2个时钟周期能送出16个字节。即:经过42个时钟周期,它可提供16个字节;经过44个时钟周期,可提供32个字节;依此类推。试问对于表5-6中列出的各种容量的Cache,在块大小分别为多少时,平均访存时间最小?,解: 解题过程 1KB、4KB、16KB Cache: 块大小32字节 64K

22、B、256KB Cache: 块大小64字节,5.3 降低Cache 失效率的方法,5.3.2 提高相联度,1. 采用相联度超过8的方法实际意义不大,2. 2:1 Cache经验规则 容量为N 的直接映象Cache 容量为N/2的两路组相联Cache,3. 提高相联度是以增加命中时间为代价 例如: TTL或ECL板级Cache,两路组相联: 增加10 定制的CMOS Cache, 两路组相联: 增加2,5.3 降低Cache 失效率的方法,4. 例题,假定提高相联度会按下列比例增大处理器时钟周期: 时钟周期2路 1.10时钟周期1路 时钟周期4路 1.12时钟周期1路 时钟周期8路 1.14时

23、钟周期1路 假定命中时间为1个时钟,直接映象情况下失效开销为50个时钟周期,而且假设不必将失效开销取整。使用表55中的失效率,试问当Cache为多大时,以下不等式成立?,例 5.5,5.3 降低Cache 失效率的方法,平均访存时间8路 平均访存时间4路 平均访存时间4路 平均访存时间2路 平均访存时间2路 平均访存时间1路,解:,在各种相联度的情况下,平均访存时间分别为: 平均访存时间8路 = 命中时间8路 + 失效率8路 失效开销8路 = 1.14失效率8路50 平均访存时间4路 = 1.12 失效率4路50 平均访存时间2路 = 1.10 失效率2路50 平均访存时间1路 = 1.00

24、失效率1路50,5.3 降低Cache 失效率的方法,在每种情况下的失效开销相同,都是50个时钟周期。把相应的失效率代入上式, 即可得平均访存时间。 例如,1KB的直接映象Cache的平均访存时间为: 平均访存时间1路 1.00(0.13350) 7.65 容量为128KB的8路组相联Cache的平均访存时间为: 平均访存时间8路 1.14(0.00650) 1.44,表5-8,5.3 降低Cache 失效率的方法,1. 基本思想 在Cache和它从下一级存储器调数据 的通路之间设置一个全相联的小Cache, 用于存放被替换出去的块(称为Victim), 以备重用。 工作过程,5.3.3 Vi

25、ctim Cache,5.3 降低Cache 失效率的方法,对于减小冲突失效很有效,特别是对于小容量的直接映象数据Cache,作用尤其明显。 例如,项数为4的Victim Cache: 使4KB Cache的冲突失效减少20%90%,2. 作用,5.3 降低Cache 失效率的方法,1. 直接映象 vs组相联,5.3.4 伪相联Cache,2. 伪相联Cache,优点,缺点,直接映象,组相联,命中时间小,命中时间大,失效率高,失效率低,取直接映象及组相联两者的优点: 命中时间小,失效率低,5.3 降低Cache 失效率的方法,(1) 基本思想及工作原理 (动画演示) 在逻辑上把直接映象Cach

26、e的空间上下 平分为两个区。对于任何一次访问,伪相联 Cache先按直接映象Cache的方式去处理。若 命中,则其访问过程与直接映象Cache的情 况一样。若不命中,则再到另一区相应的位 置去查找。若找到,则发生了伪命中,否则 就只好访问下一级存储器。,(2) 快速命中与慢速命中 要保证绝大多数命中都是快速命中。,5.3 降低Cache 失效率的方法,3. 例题,例5.6 假设当在按直接映象找到的位置处没有发现匹配、而在另一个位置才找到数据(伪命中)需要2个额外的周期。仍用上个例子中的数据,问:当Cache容量分别为2KB和128KB时,直接映象、两路组相联和伪相联这三种组织结构中,哪一种速度

27、最快?,5.3 降低Cache 失效率的方法,首先考虑标准的平均访存时间公式: 平均访存时间伪相联 命中时间伪相联失效率伪相联失效开销伪相联 由于: 失效率伪相联失效率2路 命中时间伪相联命中时间1路伪命中率伪相联2; 伪命中率伪相联命中率2路命中率1路 (1失效率2路)(1失效率1路) 失效率1路失效率2路,解:,5.3 降低Cache 失效率的方法,故: 平均访存时间伪相联 命中时间1路(失效率1路失效率2路)2 失效率2路失效开销1路,将表55中的数据代入上面的公式,得: 平均访存时间伪相联,2KB 1(0.0980.076)2(0.07650) 4.844 平均访存时间伪相联,128K

28、B 1(0.0100.007)2(0.00750) 1.356,5.3 降低Cache 失效率的方法,根据上一个例子中的表58,对于2KB Cache,可得: 平均访存时间1路 5.90 个时钟 平均访存时间2路 4.90 个时钟 对于128KB的Cache有,可得: 平均访存时间1路 1.50 个时钟 平均访存时间2路 1.45 个时钟 可见,对于这两种Cache容量,伪相联Cache都是速度最快的。,缺点:多种命中时间,5.3 降低Cache 失效率的方法,5.3.5 硬件预取技术,1. 指令和数据都可以预取,2. 预取内容既可放入Cache,也可放在 外缓冲器中 例如:指令流缓冲器,3.

29、 预取效果 (1) Joppi的研究结果 指令预取:(4KB,直接映象Cache, 块大小16字节),5.3 降低Cache 失效率的方法,1个块的指令流缓冲器: 捕获1525 的失效 4个块的指令流缓冲器: 捕获50 16个块的指令流缓冲器:捕获72, 数据预取:(4KB,直接映象Cache) 1个数据流缓冲器:捕获25的失效 还可以采用多个数据流缓冲器,(2) Palacharla和Kessler的研究结果 流缓冲器:既能预取指令又能预取数据 对于两个64KB四路组相联Cache来说: 8个流缓冲器能捕获5070的失效。,5.3 降低Cache 失效率的方法,4. 例题,例5.7 Alph

30、a AXP 21064采用指令预取技术,其实际失效率是多少?若不采用指令预取技术,AlphaAPX 21064的指令Cache必须为多大才能保持平均访存时间不变?,解: 假设从预取缓冲器中找到所需指令需多花1个时钟周期。 平均访存时间预取 命中时间失效率预取命中率1 失效率(1预取命中率)失效开销,5.3 降低Cache 失效率的方法,假设: 预取命中率25 命中时间1个时钟周期 失效开销50个时钟周期 由表5.4可知,8KB指令Cache的失效率1.10 故平均访存时间预取 1(1.10 %25 %1) (1.10 %(125 %)50) 10.002750.4125 1.415 由公式:

31、平均访问时间命中时间失效率失效开销,5.3 降低Cache 失效率的方法,可得相应的失效率为: 失效率(平均访问时间命中时间)/失效开销 (1.4511)/500.83,8KB Cache,带预取的8kB Cache,失效率,1.10,0.83,16KB Cache,0.64,5.3 降低Cache 失效率的方法,5.3.6 由编译器控制的预取,1. 预取的类型 寄存器预取:把数据取到寄存器中 Cache预取: 只将数据取到Cache中 故障性预取:预取时,若出现虚地址故障 或违反访问权限,就会发生异常。 非故障性预取:预取时,若出现虚地址故 障或违反访问权限,并不会导致异常,只 是转变为“不

32、预取”。,由编译器加入预取指令,在数据被用到之前发出预取请求。,5.3 降低Cache 失效率的方法,4. 例题,2. 在预取数据的同时,处理器应能继续执行 只有这样,预取才有意义。 非阻塞Cache (非锁定Cache),3. 循环是预取优化的主要对象 失效开销小时:循环体展开12次 失效开销大时:循环体展开许多次,5.3 降低Cache 失效率的方法,例 5.8 对于下面的程序,判断哪些访问可能会导致数据Cache失效。然后,加入预取指令以减少失效。最后,计算所执行的预取指令的条数以及通过预取避免的失效次数。假定: (1) 我们用的是一个容量为8KB、块大小为 16B的直接映象Cache,

33、它采用写回法并 且按写分配。 (2) a、b分别为3100(3行100列)和1013 的双精度浮点数组,每个元素都是8个 字节。当程序开始执行时,这些数据都 不在Cache内。,5.3 降低Cache 失效率的方法,for (i0 ; i 3 ; ii1 ) for (j0 ; j 100 ; jj1 ) aijbj0bj10;,解: (1) 计算过程 (2) 失效情况 总的失效次数251次 (3) 改进后的程序,5.3 降低Cache 失效率的方法,for (j0,j100;jj1) prefetch (bj70); /* 预取7次循环后所需的b(j ,0 ) */ prefetch (a0

34、j7); /* 预取7次循环后所需的a(0,j ) */ a0jbj 0 * b j10 for (i1; i 3; ii1) for (j0; j 100; jj1) prefetch(aij7); /* 预取7次循环后所需的a(i , j ) */ aijbj0 * bj10; ,5.3 降低Cache 失效率的方法,例 59 在以下条件下,计算例5.8中所节约的时间: (1) 忽略指令Cache失效,并假设数据Cache 无冲突失效和容量失效。 (2) 假设预取可以被重叠或与Cache失效重 叠执行,从而能以最大的存储带宽传送 数据。 (3) 不考虑Cache失效时,修改前的循环每7 个

35、时钟周期循环一次。修改后的程序中,,失效情况 总的失效次数19次,5.3 降低Cache 失效率的方法,解: 修改前: 循环时间3007 2100 失效开销2515012550/14650 21001255014650,第一个预取循环每9个时钟周期循环一次, 而第二个预取循环每8个时钟周期循环一 次(包括外层for循环的开销)。(4) 一次失效需50个时钟周期。,5.3 降低Cache 失效率的方法,修改后: 循环时间100920082500 失效时间1950950 25009503450 加速比14650/34504.2,5.3 降低Cache 失效率的方法,5.3.7 编译器优化,2KB

36、Cache: 降低50 8KB Cache:降低75%,1. 基本思想,在编译时,对程序中的指令和数据进行重新组织,以降低Cache失效率。,2. McFaring 发现:通过对指令进行重新排序, 可有效地降低指令Cache的失效率。,5.3 降低Cache 失效率的方法,3. 数据对存储位置的限制比指令的少,因此 更便于优化。 通过把数据重新组织,使得在一块数 据被从Cache替换出去之前,能最大限度 利用其中的数据(访问次数最多) (1) 数组合并 举例: /* 修改前 */ int val SIZE; int key SIZE;,5.3 降低Cache 失效率的方法,(2) 内外循环交换

37、 举例: /* 修改前 */ for (j0 ;j100 ;jj1) for (i0 ;i5000 ;ii1) xij2*xij;,/* 修改后 */ struct merge int val ; int key ; ; struct merge merged_arraysize;,5.3 降低Cache 失效率的方法,(3) 循环融合 举例: /* 修改前 */ for (i0 ; iN ;ii1) for (j0 ; jN ; jj1) aij1/bij*cij;,/* 修改后 */ for (i0 ;i100 ;ii1) for (j0 ;j 000 ;jj1) xij2*xij;,5.

38、3 降低Cache 失效率的方法,/* 修改后 */ for (i0 ;i N ;ii1) for (j0 ;j N ;jj1) aij1/bij*cij; dijaijcij; ,for (i0 ;iN ;ii1) for (j0 ; jN ;jj1) dijaijcij;,(4)分块 把对数组的整行或整列访问改为按块进行。,5.3 降低Cache 失效率的方法,举例: /* 修改前 */ for (i0; i N; ii1) for (j0; j N; jj1) r0; for (k0; k N; kk1) rryik*zkj; xijr; ,计算过程 失效次数:2N3N2,5.3 降低C

39、ache 失效率的方法,/* 修改后 */ for (jj0; jj N; jjjj1) for (kk0; kk N; kkkk1) for (i0; i N; ii1) for (jjj; j min(jjB1,N); jj1) r0; for (kkk; k min(kkB1,N); kk1) rryik*zkj; xijxijr; ,计算过程 失效次数:2N3 /B N2,5.3 降低Cache 失效率的方法,5.4.1 让读失效优先于写,5.4 减少Cache失效开销,1. Cache中的写缓冲器导致对存储器访问的 复杂化,2. 解决问题的方法(读失效的处理) 推迟对读失效的处理 (

40、缺点:读失效的开销增加,如50) 检查写缓冲器中的内容,3. 在写回法Cache中,也可采用写缓冲器,第五章 存储层次,5.4.2 子块放置技术,1. 为减少标识的位数,可采用增加块大小的 方法,但这会增加失效开销,故应采用子 块放置技术。,2. 子块放置技术:把Cache块进一步划分为更 小的块(子块),并给每个子块赋予一位有 效位,用于指明该子块中的数据是否有效。 Cache与下一级存储器之间以子块为单位传 送数据。但标识仍以块为单位。,3. 举例 (动画演示),5.4 减少Cache 失效开销,5.4.3 请求字处理技术,1. 请求字 从下一级存储器调入Cache的块中,只有 一个字是立

41、即需要的。这个字称为请求字。,2. 应尽早把请求字发送给CPU 尽早重启动:调块时,从块的起始位置开 始读起。一旦请求字到达,就立即发送给 CPU,让CPU继续执行。 请求字优先:调块时,从请求字所在的位 置读起。这样,第一个读出的字便是请求 字。将之立即发送给CPU。,5.4 减少Cache 失效开销,3. 这种技术在以下情况下效果不大: Cache块较小 下一条指令正好访问同一Cache块的另 一部分,5.4 减少Cache 失效开销,5.4.4 非阻塞Cache技术,1. 非阻塞Cache:Cache失效时仍允许CPU进行 其它的命中访问。即允许“失效下命中”。,2. 进一步提高性能:“

42、多重失效下命中” “失效下失效” (存储器必须能够处理多个失效),3. 重叠失效个数对平均访问时间的影响,5.4 减少Cache 失效开销,非阻塞Cache平均存储器等待时间 与阻塞Cache的比值,1,2,浮点程序,76,51,64,39,整数程序,81,78,78,重叠失效个数,5.4 减少Cache 失效开销,对于图5.18所描述的Cache,在两路组相联和“一次失效下命中”这两种措施中,哪一种对浮点程序更重要?对整数程序的情况如何? 假设8KB数据Cache的平均失效率为: 对于浮点程序,直接映象Cache为11.4%,两路组相联Cache为10.7%; 对于整数程序,直接映象Cach

43、e为7.4%,两路组相联Cache为6.0%。并且假设平均存储器等待时间是失效率和失效开销的积,失效开销为16个时钟周期。,例 5.11,5.4 减少Cache 失效开销,对于浮点程序,平均存储器等待时间为: 失效率直接映象失效开销11.4%161.82 失效率两路组相联失效开销10.7%161.71 1.71/1.820.94,对于整数程序: 失效率直接映象失效开销7.4 %161.18 失效率两路组相联失效开销6.0 %16 0.96 0.96/1.18=0.81,解:,5.4 减少Cache 失效开销,5.4.5 采用两级Cache,1. 应把Cache做得更快?还是更大? 答案:二者兼

44、顾,再增加一级Cache 第一级Cache(L1)小而快 第二级Cache(L2)容量大,2. 性能分析 平均访问时间 命中时间L1失效率L1失效开销L1 命中时间L1失效率L1 (命中时间L2失效率L2失效开销L2),5.4 减少Cache 失效开销,3. 局部失效率与全局失效率 局部失效率该级Cache的失效次数/到达 该级Cache的访问次数 例如:上述式子中的失效率L2 全局失效率该级Cache的失效次数/CPU 发出的访存的总次数 全局失效率L2失效率L1失效率L2 评价第二级Cache时,应使用全局失效率 这个指标。,5.4 减少Cache 失效开销,例5.12 假设在1000次访

45、存中,第一级Cache失效40次, 第二级Cache失效20次。试问:在这种情况下,该 Cache系统的局部失效率和全局失效率各是多少? 解 第一级Cache的失效率(全局和局部)是40/1000, 即4%;第二级Cache的局部失效率是20/40,即50%, 第二级Cache的全局失效率是20/1000,即2%。,5.4 减少Cache 失效开销,4. 当第二级Cache比第一级Cache大得多时,两 级Cache的全局失效率与容量和第二级Cache 相同的单级Cache的失效率非常接近。,5. 第二级Cache的参数 第二级Cache不会影响CPU的时钟频率, 因此其设计有更大的考虑空间。

46、 两个问题: 能否降低CPI中的平均访存时间部分? 成本是多少? (1) 容量 第二级Cache的容量一般比第一级的 大许多,如512KB。,5.4 减少Cache 失效开销,(2) 相联度 第二级Cache可采用较高的相联度或伪 相联方法,例5.13 给出有关第二级Cache的以下数据: 两路组相联使命中时间增加10%CPU时钟周期 对于直接映象,命中时间L210个时钟周期 对于直接映象,局部失效率L225% 对于两路组相联,局部失效率L220% 失效开销L250个时钟周期 试问第二级Cache的相联度对失效开销的影响如何?,5.4 减少Cache 失效开销,解: 对于一个直接映象的第二级C

47、ache来说, 第一级Cache的失效开销为: 失效开销直接映象,L1 1025%5022.5个时钟周期 对于两路组相联第二级Cache来说,命中 时间增加了10%(0.1)个时钟周期,故第一级 Cache的失效开销为: 失效开销两路组相联,L1 10.120%5020.1个时钟周期 把第二级Cache的命中时间取整,得10或11, 则:,5.4 减少Cache 失效开销,失效开销两路组相联,L1 1020%5020.0个时钟周期 失效开销两路组相联,L1 1120%5021.0个时钟周期 故对于第二级Cache来说,两路组相联优于 直接映象。,(3) 块大小 第二级Cache可采用较大的块,

48、 如 64、128、256字节。 图 5.19 为减少平均访存时间,可以让容量较小 的第一级Cache采用较小的块,而让容量较大 的第二级Cache采用较大的块。,5.4 减少Cache 失效开销,5.5 减少命中时间,2. 应使Cache足够小,以便可以与CPU一起放 在同一块芯片上。,命中时间直接影响到处理器的时钟频率。在当今的许多计算机中,往往是Cache的访问时间限制了处理器的时钟频率。,1. 硬件越简单,速度就越快;,5.5.1 容量小、结构简单的Cache,第五章 存储层次,1. 虚拟Cache 访问Cache的索引以及Cache中的标识都 是虚拟地址(一部分)。 2. 并非都采用

49、虚拟Cache(为什么?) 3. 虚拟Cache的清空问题,5.5.2 虚拟Cache,解决方法:在地址标识中增加PID字段 (进程标识符) 三种情况下失效率的比较 单进程,PIDs,清空 PIDs与单进程相比:0.30.6 PIDs与清空相比: 0.64.3%,5.5 减少命中时间,4. 同义和别名 解决方法:反别名法,页着色 5. 虚拟索引物理标识 优点:兼得虚拟Cache和物理Cache的好处 局限性:Cache容量受到限制 (页内位移) Cache容量页大小相联度 6. 举例:IBM3033的Cache 页大小4KB 相联度16,5.5 减少命中时间,5.5.3 写操作流水化 (图 5

50、.22),Cache容量164KB64KB 7. 另一种方法:硬件散列变换,页地址地址标识,页内位移,索 引,块内位移,31,12 11,0,5.5.4 Cache优化技术总结 (表 5-9),5.5 减少命中时间,1. 主存的主要性能指标:延迟和带宽 2. 以往: Cache主要关心延迟,I/O主要关心带宽 现在:Cache关心两者 下面讨论几种能提高主存性能的存储器组织技术 在下面的讨论中,我们以处理Cache失效为例来说明各种存储器组织结构的好处。,5.6 主 存,第五章 存储层次, 增加Cache块大小能利用主存带宽增加所带 来的好处 在以下的讨论中,我们假设基本存储 器结构的性能为:

51、,5.6 主 存,送地址需4个时钟周期 每个字的访问时间为24个时钟周期 传送一个字的数据需4个时钟周期, 为了减少失效开销TM,应该:,减少主存延迟 提高主存带宽,如果Cache大小为4个字,则: 失效开销4(4244) 432128(时钟周期) 带宽16/1280.0125(字节/时钟周期),1. 增加存储器的宽度 性能举例(参照前面的假设) 当宽度为4个字时: 失效开销132(周期) 带宽0.5(字节/周期),5.6 主 存, 缺点:,5.6 主 存,增加CPU和存储器之间的连接通路的宽度 CUP和Cache之间有一个多路选择器 扩充主存的最小增量增加了相应的倍数 写入有可能变得复杂,

52、举例: DEC的Alpha Axp21064:256位宽 2. 采用简单的多体交叉存储器 在存储系统中采用多个DRAM,并利用它们 潜在的并行性。, 存储器的各个体一般是按字交叉的 交叉存储器(interleaved memory) 通常是指存储器的各个体是按字交叉的。 字交叉存储器非常适合于处理: Cache读失效,写回法Cache中的写回,性能举例:(参照前面的假设) 失效开销4244444(周期) 带宽0.4(字节/周期),5.6 主 存,假设四个存储体的地址是在字一级交叉的,即 存储体0中每个字的地址对4取模都是0,体1中每个 字的地址对4取模都是1,依此类推。,0 4 8 12,地址

53、 体0,1 5 9 13,地址 体1,2 6 10 14,地址 体2,3 7 11 15,地址 体3,假设某台机器的特性及其Cache的性能为: 块大小为1个字 存储器总线宽度为1个字 Cache失效率为3 % 平均每条指令访存1.2次 Cache失效开销为32个时钟周期(和上面相同) 平均CPI(忽略Cache失效)为2 试问多体交叉和增加存储器宽度对提高性能各 有何作用? 如果当把Cache块大小变为2个字时,失效率,例 5.14,5.6 主 存,降为2%;块大小变为4个字时,失效率降为1%。 根据5.6.2小节中给出的访问时间,求在采用 2路、4路多体交叉存取以及将存储器和总线宽 度增加

54、一倍时,性能分别提高多少?,解:,在改变前的机器中,Cache块大小为一个字,其CPI为 2(1.23%32)3.15 当将块大小增加为2个字时,在下面三种情况下的CPI分别为:,5.6 主 存,32位总线和存储器,不采用多体交叉: 2(1.22%232)3.54 32位总线和存储器,采用多体交叉: 2(1.22%(4248)2.86 性能提高了10% 64位总线和存储器,不采用多体交叉: 2(1.22%132)2.77 性能提高了14% 如果将块大小增加到4个字节,则: 32位总线和存储器,不采用多体交叉: 2(1.21%432)3.54,5.6 主 存, 存储体的数目 体的数目访问体中一个

55、字所需的时钟周期,32位总线和存储器,采用多体交叉: 2(1.21%(42416) 2.53 性能提高了25% 64位总线和存储器,不采用多体交叉: 2(1.21%232) 2.77 性能提高了14%,3. 独立存储体 设置多个存储控制器,使多个体能独立操 作,以便能同时进行多个独立的访存。,5.6 主 存, 每个体有独立的地址线 (动画演示) 非阻塞Cache与多体结构 体和超体 将存储器分为若干个独立的存储体,而每个独 立存储体内又划分为若干个按字交叉方式工作的体。,5.6 主 存,4. 避免存储体冲突 体冲突: 两个请求要访问同一个体 减少冲突:采用许多体 例如:NEC SX/3最多128个体 这种方法存在问题。,5.6 主 存,假如我们有128个存储体,按字交叉方式工作,并执行以下程序: int x 256 512 ; for ( j = 0 ; j 512 ; j = j+1 ) for ( i = 0 ; i 256 ; i = i+1 ) x i j = 2 * x i j ; 因为512是128的整数倍,同一列中的所有元素都在同一个体内,无论CPU或存储系统多么高级,该程序都会在数据Cache失效时暂停。,5.6 主 存, 解决体冲突的方法, 举例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论