由于缓存的关联性有限,我一直在研究与冲突未命中相关的主题。根据: [1] http://www.jilp.org/vol6/v6paper7.pdf
"平铺的一个主要问题是,有限的高速缓存关联性可能导致平铺中的数据被映射到同一高速缓存行,即使高速缓存中有足够的空间。将导致冲突未命中,导致磁贴数据在被重用之前被从缓存中驱逐出去"
在其他论文中,我已经读过,当我们有一个功率为2的数组时,冲突未命中大多数出现。而且我知道组关联缓存中的地址由TAG字段组成(A31-A9) ,SET字段(A8-A5)和OFFSET字段(A4-A0),假设我们有128个时隙,每组8个时隙。
要查找特定字节,我们首先要找到相应的字符集。我们使用地址位A9-A5来识别该字符集。地址的4个较低有效位是时隙内的偏移。标签用于标识集合中的插槽。如果我们想要存储新块,我们首先识别该集合,然后根据替换策略将块存储到特定集合的缓存行。
所以我猜两个具有相同A8-A5位的内存块将映射到同一组,因此可能存在缓存冲突。偏移字段由2 ^ 5 = 32种组合组成。或者换句话说,偏移量表示高速缓存行内的字节。这意味着,来自内存的每个512/32 = 16个块(或缓存行)将映射到同一个集合。如果我们考虑单向关联缓存(直接映射),我的推理是否正确?
此外,为什么我们有冲突未命中,特别是对于功率为2的阵列?有人可以向我解释填充如何消除这些冲突失误?我知道填充会产生类似[1]的图7,但我无法理解。填充在哪里?它是应用于数组的末尾还是每512个字节?我为这个天真的问题提前道歉。