什么时候不能利用缓存中的空间局部性?

When is it not possible to exploit spatial locality in cache?

我们有一个处理器,其指令对 8 字节操作数进行操作,并且其指令也使用 8 字节进行编码。我们正在使用 16 KB, 包含 1024 个集合的 4 路集合关联缓存。缓存总共有 4 * 1024 = 4096 个缓存行。这意味着,每个缓存行是 16KB=4096 = 4 字节,因此每个操作数和每条指令需要存储在两个缓存行中,这将需要为每个 load/store 操作和指令提取访问缓存 2 次。我们被告知缓存不能应用空间局部性,但为什么?在这种情况下,空间局部性意味着什么?

所以你的机器根本就没有单字节loads/stores?

如果每个加载都是一个完整的缓存行(或多个完整的缓存行),那么将一个行放入缓存中用于一个加载永远不会有利于空间附近的另一个加载。

(除非您有硬件预取来检测顺序访问并开始获取相邻的缓存行...)