微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > 微电子学习交流 > 谈一下如何提高CPU CACHE的性能

谈一下如何提高CPU CACHE的性能

时间:12-12 整理:3721RD 点击:
Hello everybody~
一年一度的双十一剁手大战又拉开了帷幕
自从马云爸爸把我们专属的单身狗节日抢走之后
大家都猫在家里闷头摇手机抽奖 坐等整点秒杀
我再也不用在11.11这一天看情侣们满大街秀恩爱了
我hin满意
然而有家属的同志们 又有了新的烦恼
“Wuli老婆/女朋友最近忙着秒杀都不关心我了”、
“秒杀老失败心情不好就冲我发脾气”
…..说多了都是泪
决定打2把游戏转换下心情
一大串连招之后眼看对方残血了,一个R下去
大招还没送到,人头就被半路冒出来的队友抢了!
真是挫气!
你现在挫的气,流的泪都是TA的错!
CPU CACHE!
要知道CPU Cache性能低
就算你网速快上天,手速快过神州十一号
CPU的速度也依然慢过蜗牛
上周的推送中
我们花了5分钟介绍了下CPU CACHE的基本概念
还没看的同学可以上期的推送消息中查看哦
本周我们来谈一下如何提高CPU CACHE的性能
让女朋友双十一买买买更快感
成就LOL人头收割机

如何判定CPU CACHE的

性能

通常比较合适用来评价Cache性能的参数指标为平均访问时间,其定义如下:
          
          平均访问时间=
命中时间+缺失率x缺失代价
道理都知道,可是如何优化CPU CACHE的性能呢?
由以上公式得知
可以从三个方面优化CACHE性能
→ 降低缺失率
→ 减小缺失代价
→ 减小命中时间

优化CPU CACHE的

具体方法


三种类型的缺失(3C)如何优化
1
强制缺失(Compulsory miss):
当第一次访问一个块时,该块不在cache中,需要从下一级存储器中调入Cache
优化方法:
增加块大小,预取
2
容量缺失(Capacity miss):
程序运行时所需的块不能全部调入Cache中,当某些块被替换后,若被重新访问就会发生容量缺失
优化方法:
增加缓存容量
3
冲突缺失(Conflict miss):
在组相联或直接映射的Cache中,若太多的块映射到同一组中,则会出现该组中某个块被别的块所代替(即使别的组或块有空闲位置),然后又被重新访问
优化方法:
提高相联度(理想情况:全相联)

基本的Cache优化方法
→  降低缺失率
     较大的块,较大的缓存,较高的关联度
→  降低缺失代价
     多级缓存,为读取操作设设定高于写入操作的优先级
→  缩短在缓存中命中的时间
     在索引缓存时避免地址转换
1.增加块的大小以降低缺失率
当Cache的容量一定时,块的大小对命中率的影响非常大。下图表示随着Cache块由小到大的变化,命中率H上升和下降的规律。
命中率随着块大小的变化曲线
2.提高相联度
相联度越高,Cache的空间利用率就越高,块冲突概率就越低,因而Cache的缺失率就会降低。但是提高相联度可能会增加命中时间。
缺失率与相联度的关系
3.增加Cache容量
增加Cache容量是降低容量缺失最明显的方法。Cache容量越大,命中率也就越高,但是可能延长命中时间,增加成本和功耗。
4.采用多级缓存降低缺失代价
若采用两级Cache,L2的平均访问时间为:
平均访问时间=
命中时间L1+
缺失率L1x(命中时间L2+缺失率L2x缺失代价L2)
局部缺失率=
该级Cache的缺失次数/到达该级Cache的访问次数
全局缺失率=
该级Cache的缺失次数/CPU发出的访问总次数
全局缺失率L2=
缺失率L1x缺失率L2
对于第二级Cache可以总结为:
→ 第二级Cache比第一级Cache大得多的情况下,
     两级Cache的全局缺失率和容量与第二级Cache
     相同的单级Cache的缺失率非常接近;
→ 局部缺失率不是衡量第二级Cache的好指标,
     在评价第二级Cache应用全局缺失率。
5.读缺失的优先级高于写缺失优先级降低缺失代价
在write-back Cache的情况下,提高读优先级的好处(example):
假定一次读取缺失将替换一个脏块,我们不是将这个脏块写到存储器中,再读取存储器,
而是将这个脏块复制到缓冲区中,然后读存储器,再写存储器。
这样处理器的读取操作将会很快结束。和前一种情况类似,如果发生了读取缺失,处理器停顿直到缓冲区为空,或者检查缓冲区中各个字的地址,以了解是否存在冲突。

高级缓存优化方法
→ 缩短命中时间
     —— 小而简单的第一级缓存和路预测。
   (可降低功耗)
→ 增加缓存带宽
     —— 流水化缓存、多组缓存和无阻塞缓存。
   (对功耗影响不确定)
→ 降低缺失代价
     —— 关键字优化,合并写缓冲区。
   (对功耗影响很小)
→ 降低缺失率
     —— 编译器优化。
   (缩短编译时间可降低功耗)
→ 通过并行降低确实代价或缺失率
     —— 硬件预取和编译器预取。
   (提前取出了未用到的数据,增大功耗)

恩...谈了这么多优化CPU CACHE的方法
我只能帮到这里了
接下来女朋友的双十一、你的人头收割机
甚至还有史上最贵铁皮沪牌秒杀
就靠你了
作者 William Gu
E课网金牌讲师、IC设计工程师,主要从事数字前端设计与前端flow相关工作,具有多个GPU/APU项目流片经验。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top