棋子 · 2019年10月16日

cache way 和set的概念不理解

1.png
way & set
这里将Way解释为一组line的集合,这个说法常见的解释是用于set的。
通常说N-Way组相连,理解为一个set由N个line组成。Way是line的单位名称。
2.jpg
这里将Set解释为每一路的同一line,这个概念没有get到,能不能深入解释下。网上查到的图片

网上也看到一篇跟这里解释类似的更详细的描述:
两路组相连缓存(Two-way set associative cache)
我们依然假设64 Bytes cache size,cache line size是8 Bytes。什么是路(way)的概念。我们将cache平均分成多份,每一份就是一路。因此,两路组相连缓存就是将cache平均分成2份,每份32 Bytes。cache被分成2路,每路包含4行cache line。我们将所有索引一样的cache line组合在一起称之为组。

这里的解释跟我们视频中是一样的。那么这里哪一种解释是正确的呢?
路(way)到底是line的单位名称,还是指一组line呢?
组(set)到底是index相同的lines集合,还是说在cache划分的时候,自然会用中位作为index,所以同一组自然就有了相同的index。

其实,最疑惑的还是,路的概念如果是平分而已,有什么意义呢。拿到一个地址,从Index获取到set,然后用tag找到line。这就结束了,那么way 的概念意义是什么呢??

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2019年10月16日

我的理解是,你把cache当作一个2维矩阵,其中每个元素是一个cache line。而一行是一个set,我们使用index bits来定位到某一行(某一个set),假设我们现在有8-way,那你一行(一个set)中就可以存放8个不同tag的cache line。当你这一行存满8个不同tag之后,再进来一个如果index还是这一行,我们就要替换出一个旧的cache line来给新的让位。想象如果你只有1way,就是direct map cache,那你每次如果有相同的index地址,旧的cache line就要被替换,而如果我们给予多路,那么一行就可以多存一些不同的tag。极端情况是,假设你的cache总共可以存放256个cache line,我用256路cache,那么我其实就只有一个set(一行),此时我完全不需要再使用index bit,相当于直接用tag找到对应cache line,这种叫做fully-associative cache。

你的回答