问题描述
我看不到的8方式设置缓存关联性有什么特别的优势吗? (如果这是一个愚蠢的问题,也要事先道歉。)
解决方法
请注意,Ice Lake bumps that up to 12-way,48kiB(向每个集合添加更多方式,相同的索引编制)。 8路没有什么特别的魔术。以前的AMD设计,例如K8和Bulldozer,都尝试了不同的L1d和L1i几何形状,例如64k / 2路。 (不过,比英特尔的16k / 4-way和32k / 8-way少成功。)
对于L1d / L1i高速缓存,在给定x86的4k页面的情况下,8路允许32k高速缓存成为VIPT,而不会出现别名。 32kiB是2的幂次幂“最佳点”,它足够小而又快,但又足够大且具有足够的关联性,可以实现良好的命中率;如果您想避免需要更多的技巧来避免混叠,则8联是最小的关联性
有关see this的详细信息,请参见Why is the size of L1 cache smaller than that of the L2 cache in most of the processors?(因为无法构建L2或L3大小的大型缓存,以及延迟和我们需要/想要的L1读/写端口的数量,以及尝试将是一种浪费电力预算的坏方法)。另请参见Which cache mapping technique is used in intel core i7 processor?
8路也是关联的“足够”,例如大多数数组循环的总输入和输出流少于8个(如果它们来自页面对齐数组中相同的偏移量,则它们在L1d中彼此混叠),而这又是一个已知的问题。 (而且不同访问的某些形式的4k别名也是软件通常试图避免的已知问题。)
还请注意,SKL的256k L2高速缓存仅是4路关联的,而SKX的1MiB 16路L2则是这种方式。 (Skylake L2 cache enhanced by reducing associativity?)。而且L3缓存通常不止8位关联,但我猜您在谈论L1d / L1i缓存。