访问同一缓存行中的内存位置所需的时间
Time required to access the memory locations in the same cache line
将下图中的大框视为缓存,将块视为缓存内的单个缓存行。
CPU 从 RAM 中提取数据(数组 A 的前 4 个元素)到缓存块中。
现在,我的问题是,在所有 4 个内存位置(A[0]
、A[1]
、A[2]
和A[3]
) 在缓存块中还是大致相同?
PS: 我期待理想情况的答案,在这种情况下运行时对任何内存位置执行任何 read/write 操作不受操作的影响用户进程或应用程序的系统抖动。
由于行在缓存中已经很热,因此访问缓存中任何对齐字的时间是恒定的。处理地址的线内偏移部分的硬件不必遍历到正确的位置或任何东西,它只是将这些字节多路复用到输出。
如果行不是在缓存中已经很热,那么这取决于缓存的设计。如果 CPU 没有在宽总线上一次绕过整行,那么该行的一个/某些单词将先于其他单词到达。支持 early-restart 的缓存可以在需要的字到达时让加载完成。
关键字优先总线和内存允许 that 字成为第一个为需求未命中传输的字。否则它们以某种固定的顺序到达,并且行的最后一个字的缓存未命中可能需要额外的几个周期。
相关:
- which is optimal a bigger block cache size or a smaller one?
将下图中的大框视为缓存,将块视为缓存内的单个缓存行。
CPU 从 RAM 中提取数据(数组 A 的前 4 个元素)到缓存块中。
现在,我的问题是,在所有 4 个内存位置(A[0]
、A[1]
、A[2]
和A[3]
) 在缓存块中还是大致相同?
PS: 我期待理想情况的答案,在这种情况下运行时对任何内存位置执行任何 read/write 操作不受操作的影响用户进程或应用程序的系统抖动。
由于行在缓存中已经很热,因此访问缓存中任何对齐字的时间是恒定的。处理地址的线内偏移部分的硬件不必遍历到正确的位置或任何东西,它只是将这些字节多路复用到输出。
如果行不是在缓存中已经很热,那么这取决于缓存的设计。如果 CPU 没有在宽总线上一次绕过整行,那么该行的一个/某些单词将先于其他单词到达。支持 early-restart 的缓存可以在需要的字到达时让加载完成。
关键字优先总线和内存允许 that 字成为第一个为需求未命中传输的字。否则它们以某种固定的顺序到达,并且行的最后一个字的缓存未命中可能需要额外的几个周期。
相关:
- which is optimal a bigger block cache size or a smaller one?