「计算机组成原理」:高速缓存存储器( 二 )
1.1.1 直接映射高速缓存
文章插图
如上图所示 , 当 E = 1E=1 时 , 高速缓存称为直接映射高速缓存(Direct-mapped Cache) , 每个高速缓存组中只含有一个高速缓存行 。
当缓存不命中时需要进行缓存行替换 , 会先从下一层的存储器中请求得到包含目标的块 , 然后根据地址计算出高速缓存组的索引 , 然后由于一个组中只含有一个高速缓存行 , 所以会直接将该块替换当前的块 。
这里需要注意的一点是:当程序访问大小为2的幂的数组时 , 直接映射高速缓存中通常会发生冲突不命中 。
1.float dotprod(float x[8], float y[8] )
2.{
3. float sum = 0.0;
4. int i;
5.
6. for(i = 0;i < 8;i++ )
7. sum += x[i] * y[i];
8. return sum;
9.}
我们首先假设数组x排在数组y之前 , 且x的地址从0开始 。 然后直接映射高速缓存的 b=2b=2 和 s=2s=2, 即有两个高速缓存组 , 每个高速缓存组有一个高速缓存行 , 每个高速缓存行能保存16字节数据块 , 即4个浮点数 , 则高速缓存容量为32字节 , 我们可以得到高速缓存对地址的划分如下所示(64位系统中)
文章插图
然后我们可以根据这两个数组的地址得到它们在高速缓存中的组索引(因为只有一个高速缓存行 , 所以不考虑标志位)
文章插图
我们可以发现 , 循环第一次迭代引用x[0]时 , 缓存不命中会使得包含x[0]~x[3]的数据块保存到高速缓存组0处 , 但是当引用y[0]时 , 会发现高速缓存组0处保存的数据不匹配 , 又出现了缓存不命中 , 就会使得包含y[0]~y[3]的数据块保存到高速缓存0处 , 依次类推 。 可以发现始终会发生缓存不命中 , 使得性能下降 。 这种情况称为抖动(Thrash) , 即高速缓存反复地加载和驱逐相同的高速缓存块的组 。
可以发现:即使程序的局部性良好 , 且工作集的大小没有超过高速缓存容量 , 但是由于这些数据块都被映射到了相同的高速缓存组中 , 且直接映射高速缓存每个组中只有一个高速缓存行 , 所以会出现抖动 , 不断出现缓存不命中 。
我们这里想要相同所以的x和y可以保存到不同的高速缓存组中 , 就能避免抖动现象 , 这里可以在数组x后填充B个字节 , 使得数组y的地址向后偏移 , 得到如下形式
文章插图
1.1.2 组相连高速缓存直接映射高速缓存的冲突不命中是由于每个高速缓存组中只有一个高速缓存行 , 所以扩大E的值 , 当 1 < E < C/B1<E<C/B 时 , 称为E路组相联高速缓存(Set Associative Cache) , 此时需要额外的硬件逻辑来进行行匹配 , 所以更加昂贵 。 ( E < C/BE<C/B 即要求 S > 1S>1 )
2路组相连高速缓存
文章插图
当缓存不命中时需要进行缓存行替换 , 如果对应的高速缓存组中有空的高速缓存行 , 则直接将其保存到空行中 。 但是如果没有空行 , 就要考虑合适的替换策略:
- 最简单的替换策略是随机选择要替换的行
- 最不常使用(Least-Frequently-Used , LFU)策略: 替换过去某个时间窗口内引用次数最少的一行 。
- 最近最少使用(Least-Recently-Used , LRU)策略:替换最后一次访问时间最久远的那一行
文章插图
由于全相联高速缓存只有一个组 , 所以不包含组索引编码
文章插图
其行匹配和字选择与组相联高速缓存相同 , 只是规模大小不同 。 想要得到高速的全相联高速缓存十分困难 , 所以通常适合用于较小的高速缓存 , 比如虚拟内存中的翻译备用缓冲器(TLB) 。
1.2 写操作当CPU想要对地址A进行写操作时 , 会通过地址A判断是否缓存了该地址 , 如果缓存了称为写命中(Write Hit) , 否则称为写不命中(Write Miss) 。
- 写命中:高速缓存会先更新缓存的副本 , 然后可以采取不同方法更新下一层的副本直写(Write-Though):立即更新下一层的副本值 。 缺点是每次写都会引起总线流量 。 写回(Write-Back):为每个高速缓存行维护一个修改位(Dirty Bit) , 表明这个高速缓存块是否被修改 。 当被修改的高速缓存块被驱逐时 , 会查看修改位 , 判断该块是否被修改 , 只有被修改才会更新下一层的副本值 。 能够显著减少总线流量 , 但是复杂性高 。
- 计算机学科|机器视觉系统是什么
- 合并|Andre Cronje主导批量「合并」DeFi项目,是好事情吗?
- mini|电影、mini 与「当日完稿」工作流
- 字化转型|疫情重构经济,传统企业「数字化」的通关密码是什么?
- iPhone12|iPhone12「超大杯」拍照解禁:与Pro拉不开差距
- 供应链|一座快手「重镇」的货端升级
- 项目|DeFi「分叉运动」退潮,我们能从中学到什么?
- 纪念版|「同价选机」K30至尊纪念版 vs Note9 Pro,选谁
- 文案|「热点传递」为什么别人卖点写的“勾人”?
- 系列|OPPO Reno5 真机曝光, 「Reno Glow」晶钻设计再升级