如何提高CPU Cache性能 By E课网
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CPU CacheII
-William Gu
在本期的文章里,作者从Cache性能出发,帮助大家进一步了解CPU Cache这一设计实现。
通常比较合适用来评价Cache性能的参数指标为平均访问时间,其定义如下:
平均访问时间=命中时间+缺失率x缺失代价
由以上公式,可以从三个方面进行改进:
✓降低缺失率
✓减小缺失代价
✓减小命中时间
1.1 三种类型的缺失(3C)
强制缺失(Compulsory miss):当第一次访问一个块时,该块不在cache中,需要从下一级存储器中调入Cache
✓优化方法:增加块大小,预取
容量缺失(Capacity miss):程序运行时所需的块不能全部调入Cache中,当某些块被替换后,若被重新访问就会发生容量缺失
✓优化方法:增加缓存容量
冲突缺失(Conflict miss):在组相联或直接映射的Cache中,若太多的块映射到同一组中,则会出现该组中某个块被别的块所代替(即使别的组或块有空闲位置),然
后又被重新访问。
✓优化方法:提高相联度(理想情况:全相联)
1.2 基本的Cache优化方法:
✓降低缺失率——较大的块,较大的缓存,较高的关联度
✓降低缺失代价——多级缓存,为读取操作设设定高于写入操作的优先级
✓缩短在缓存中命中的时间——在索引缓存时避免地址转换
1.2.1 增加块的大小以降低缺失率
当Cache的容量一定时,块的大小对命中率的影响非常大。下图表示随着Cache块由小到大的变化,命中率H上升和下降的规律。
命中率随着块大小的变化曲线
1.2.2 提高相联度
相联度越高,Cache的空间利用率就越高,块冲突概率就越低,因而Cache的缺失率就会降低。但是提高相联度可能会增加命中时间。
缺失率与相联度的关系
1.2.3 增加Cache容量
增加Cache容量是降低容量缺失最明显的方法。Cache容量越大,命中率也就越高,但是可能延长命中时间,增加成本和功耗。
1.2.4 采用多级缓存降低缺失代价
若采用两级Cache,L2的平均访问时间为:
平均访问时间=命中时间L1+缺失率L1x(命中时间L2+缺失率L2x缺失代价L2)
局部缺失率=该级Cache的缺失次数/到达该级Cache的访问次数
全局缺失率=该级Cache的缺失次数/CPU发出的访问总次数
全局缺失率L2=缺失率L1x缺失率L2
对于第二级Cache可以总结为:
✓在第二级Cache比第一级Cache大得多的情况下,两级Cache的全局缺失率和容量与第二级Cache相同的单级Cache的缺失率非常接近;
✓局部缺失率不是衡量第二级Cache的一个好指标,在评价第二级Cache应用全局缺失率。
1.2.5读缺失的优先级高于写缺失优先级降低缺失代价
在write-back Cache的情况下,提高读优先级的好处(example):
假定一次读取缺失将替换一个脏块,我们不是将这个脏块写到存储器中,然后再读取存储器,而是将这个脏块复制到缓冲区中,然后读存储器,然后再写存储器。这样处理器的读取操作将会很快结束。和前一种情况类似,如果发生了读取缺失,处理器停顿直到缓冲区为空,或者检查缓冲区中各个字的地址,以了解是否存在冲突。
1.3 高级缓存优化方法
✓缩短命中时间——小而简单的第一级缓存和路预测。(可降低功耗)
✓增加缓存带宽——流水化缓存、多组缓存和无阻塞缓存。(对功耗影响不确定)✓降低缺失代价——关键字优化,合并写缓冲区。(对功耗影响很小)
✓降低缺失率——编译器优化。(缩短编译时间可降低功耗)
✓通过并行降低确实代价或缺失率——硬件预取和编译器预取。(提前取出了未用到的数据,增大功耗)