- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.4.5 两级Cache 1. 应把Cache做得更快?还是更大? 答案:二者兼顾,再增加一级Cache ◆ 第一级Cache(L1)小而快 ◆ 第二级Cache(L2)容量大 2. 性能分析 平均访问时间 =命中时间L1+失效率L1×失效开销L1 =命中时间L1+失效率L1× (命中时间L2+失效率L2×失效开销L2) 3. 局部失效率与全局失效率 局部失效率=该级Cache的失效次数/到达 该级Cache的访问次数 例如:上述式子中的失效率L2 全局失效率=该级Cache的失效次数/CPU 发出的访存的总次数 全局失效率L2=失效率L1×失效率L2 局部失效率一般不能反映对提高系统实际运行性能所发挥的作用,因此评价第二级Cache时,一般使用全局失效率这个指标。 4. 当第二级Cache比第一级Cache大得多时,两 级Cache的全局失效率和第二级Cache相同的 单级Cache的失效率非常接近。 5. 第二级Cache的参数 第二级Cache不会影响CPU的时钟频率, 因此其设计有更大的考虑空间。 两个问题: ◆ 能否降低CPI中的平均访存时间部分? ◆ 成本是多少? (1) 容量 第二级Cache的容量一般比第一级的 大许多,如512KB 假设: 预取命中率=25% 命中时间=1 个时钟周期 失效开销=50个时钟周期 由表5-4可知,8KB指令Cache的失效率=1.10% 故平均访存时间预取 =1+(1.10 %×25 %×1)+ (1.10 %×(1-25 %)×50) =1+0.00275+0.4125 =1.415 由公式: 平均访问时间=命中时间+失效率×失效开销 可得相应的失效率为: 失效率=(平均访问时间-命中时间)/失效开销 =(1.451-1)/50=0.83% 8KB Cache 带预取的8kB Cache 失效率 1.10% 0.83% 16KB Cache 0.64% 关键:预取应建立在存储器的空闲频带 5.3.6 由编译器控制的预取 1. 预取的类型 ◆ 寄存器预取:把数据取到寄存器中 ◆ Cache预取: 只将数据取到Cache中 ◆ 故障性预取:预取时,若出现虚地址故障 或违反访问权限,就会发生异常。 ◆ 非故障性预取:预取时,若出现虚地址故 障或违反访问权限,并不会导致异常,只 是转变为“不预取”。 由编译器加入预取指令,在数据被用到之前发出预取请求。 4. 例题 2. 在预取数据的同时,处理器应能继续执行 只有这样,预取才有意义。 非阻塞Cache (非锁定Cache) 3. 循环是预取优化的主要对象 失效开销小时:循环体展开1~2次 失效开销大时:循环体展开许多次 例 5.8 对于下面的程序,判断哪些访问可能会导致数据Cache失效。然后,加入预取指令以减少失效。最后,计算所执行的预取指令的条数以及通过预取避免的失效次数。假定: (1) 我们用的是一个容量为8KB、块大小为 16B的直接映象Cache,它采用写回法并 且按写分配。 (2) a、b分别为3×100(3行100列)和101×3 的双精度浮点数组,每个元素都是8个 字节。当程序开始执行时,这些数据都 不在Cache内。 for (i=0 ; i 3 ; i=i+1 ) for (j=0 ; j 100 ; j=j+1 ) a[i][j]=b[j][0]×b[j+1][0]; 解: (1) 计算过程 (2) 失效情况 数组a 数组b 总的失效次数=251次 (3) 改进后的程序(设预取的开销比较大,需提 前 7 次循环进行) for (j=0,j<100;j=j+1) { prefetch (b[j+7][0]); /* 预取7次循环后所需的b(j ,0 ) */ prefetch (a[0]
文档评论(0)