根据Intel的说法,我的缓存应该是12路的,但应该是24路的。

ale*_*791 4 performance intel cpu-architecture micro-optimization cpu-cache

根据“英特尔64和IA-32架构优化参考手册”,2012年4月,第2-23页

LLC数据阵列中保留的数据的物理地址通过散列函数分布在缓存片之间,从而使地址均匀分布。高速缓存块中的数据阵列可以具有对应于0.5M / 1M / 1.5M / 2M块大小的4/8/12/16方式。但是,由于从软件的角度来看,缓存块之间的地址分配,因此它不会显示为普通的N路缓存。

我的计算机是一个2核Sandy Bridge,具有3 MB,12路组关联LLC缓存。但是,这似乎与英特尔的文档不一致。根据数据,看来我应该有24路。我可以想象内核/缓存切片的数量正在发生变化,但是我还不太清楚。如果我有2个内核,因此每个切片有2个1.5 MB的高速缓存片,那么根据Intel的说明,每个高速缓存片将有12种方式,这似乎与我的CPU规格不一致。有人可以向我澄清吗?

如果我想逐出整个缓存行,是否需要以128 KB或256 KB的步幅访问缓存?实际上,这就是我要实现的目标。

任何建议的读物都非常欢迎。

Lee*_*eor 5

关联度与切片数或哈希函数完成的映射正交。如果将给定地址映射到某个缓存片(以及其中的给定集合),则它只能与映射到同一位置的其他行竞争方式。具有2个切片不会提高关联性,只会减少争用(因为最终最终将行平均分配给更多的集合)。

因此,每个切片有12种方法,但是每组的整体关联性仍然是12种方法。

如果要通过访问映射到同一集合的不同行来测试关联性,则很难选择这些行(您需要了解哈希函数),但是在12点之后仍然会still动线。但是,如果您忽略散列,并假设行仅通过其设置的位进行映射,那么我似乎就好像您具有较高的关联性,这仅仅是因为行将在切片之间均匀地划分,因此打动将花费更长的时间。这不是真正的关联性,但出于某些实际目的而接近。但是,这仅在您使用较大的物理内存范围时才有效,因为需要更改高位以使散列产生任何影响。