为什么现代处理器中的集合缓存关联性是 8 路集合关联性?
Why are set cache associativity in modern day processors 8-way set associative?
8 路集缓存关联性有什么我看不到的特别优势吗?
(如果这是一个愚蠢的问题,也提前道歉。)
请注意 (为每个集合添加更多方法,相同的索引)。 8-way 并没有什么神奇之处。以前的 AMD 设计,如 K8 和 Bulldozer,试验了不同的 L1d 和 L1i 几何结构,如 64k / 2-way。 (不过不如英特尔的 16k/4 路和 32k/8 路成功。)
对于 L1d / L1i 缓存,8 路允许 32k 缓存成为 VIPT 而没有别名 (),给定 x86 的 4k 页面。 32kiB 是一个很好的 2 次幂“最佳点”,它足够小以提高命中率,但又足够大且关联性足够高,如果您想避免需要额外的技巧来避免混叠,则 8 向是最小关联性.
见Why is the size of L1 cache smaller than that of the L2 cache in most of the processors? for more about why we have cache hierarchies (because it's impossible to build a huge cache the size of L2 or L3 with the latency and number of read/write ports we need/want for L1, and trying would be a bad way to spend your power budget). See also
8-way 也是联想“足够”的,例如数组上的大多数循环的总输入和输出流少于 8 个 (如果它们来自页面对齐数组中的相同偏移量,它们将在 L1d 中相互混淆),并且拥有更多是一个已知问题。 (并且不同访问的某些形式的 4k 别名也是软件大多试图避免的已知问题。)
另请注意,SKL 的 256k L2 缓存仅为 4 路关联,而 SKX 的 1MiB 16 路 L2。 ()。 L3 缓存通常超过 8 路关联,但我猜你说的是 L1d / L1i 缓存。
8 路集缓存关联性有什么我看不到的特别优势吗? (如果这是一个愚蠢的问题,也提前道歉。)
请注意
对于 L1d / L1i 缓存,8 路允许 32k 缓存成为 VIPT 而没有别名 (
见Why is the size of L1 cache smaller than that of the L2 cache in most of the processors? for more about why we have cache hierarchies (because it's impossible to build a huge cache the size of L2 or L3 with the latency and number of read/write ports we need/want for L1, and trying would be a bad way to spend your power budget). See also
8-way 也是联想“足够”的,例如数组上的大多数循环的总输入和输出流少于 8 个 (如果它们来自页面对齐数组中的相同偏移量,它们将在 L1d 中相互混淆),并且拥有更多是一个已知问题。 (并且不同访问的某些形式的 4k 别名也是软件大多试图避免的已知问题。)
另请注意,SKL 的 256k L2 缓存仅为 4 路关联,而 SKX 的 1MiB 16 路 L2。 (