5

假设我们有这个伪代码,其中ptr不在任何 CPU 缓存中:

prefetch_to_L1 ptr
/* 20 cycles */
load ptr

由于ptr在主存中,预取操作的延迟(从预取指令解码到ptr在 L1 缓存中可用)远大于 20 个周期。进行中的预取会完全减少负载的延迟吗?或者预取是没有用的,除非它在加载之前完成?

天真地(对内存系统的工作原理没有太多了解)我可以看到它以两种方式工作:

  • 当 CPU 执行加载时,它以某种方式识别同一地址正在进行预取,并在从 L1 加载之前等待预取完成。
  • CPU 看到该地址当前不在缓存中并进入主存储器,忽略并行执行的预取操作。

其中之一是正确的吗?有没有我没有想到的第三种选择?我对 Skylake 尤其感兴趣,但也只是试图建立一些一般的直觉。

4

0 回答 0