Caching 何时不可能利用缓存中的空间局部性?

Caching 何时不可能利用缓存中的空间局部性?,caching,memory-management,cpu-architecture,cpu-cache,Caching,Memory Management,Cpu Architecture,Cpu Cache,我们得到了一个处理器,其指令在8字节操作数上运行,并且其指令也使用8字节进行编码。我们使用的是16千字节, 包含1024个集合的4路集合关联缓存。缓存总共有4*1024=4096条缓存线。这意味着,每个缓存线是16KB=4096=4字节,因此每个操作数和每条指令都需要存储在两条缓存线中,这将需要对每个加载/存储操作和指令回迁进行两次缓存访问。我们被告知缓存不能应用空间局部性,但为什么?在这种情况下,空间位置是什么意思?所以您的机器根本没有单字节加载/存储 如果每个负载都是一个完整的缓存线或多个完

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

所以您的机器根本没有单字节加载/存储

如果每个负载都是一个完整的缓存线或多个完整的缓存线,那么为一个负载将一条缓存线引入缓存将永远不会使空间上相邻的另一个负载受益


除非您有硬件预取来检测顺序访问并开始提取相邻的缓存线…

否,否则机器没有单字节加载存储。空间位置的定义不就是在不久的将来可以访问附近的数据吗?@jannè:是的。确切地如果缓存线非常小,以至于加载一个值并没有带来任何实际上没有加载的邻近值,那么代码中的空间局部性对您没有帮助。