在一次调用中将有多少数据从内存传输到 CPU

How much data will be transferred from memory to CPU in a single call

由于内存比 CPU 慢得多,它应该以 'x' 字节的块为单位发送数据。

  1. 这个 'x' 的大小是多少?
  2. 难道数据线b/n内存和CPU也是一个x*8位通道吗?
  3. 如果我访问内存中的地址 'A',是否会将所有下一个 x-1 内存地址发送到缓存?
  4. 内存总线的大约工作频率是多少?
  5. SIMD - SSE 和 MMX 扩展是否以某种方式利用了这种批量读取功能?

请随时提供任何参考资料。

提前致谢。

  1. 大小'x'一般是一个cache line的大小。缓存行大小取决于架构,但 Intel 和 AMD 使用 64 字节。

  2. 至少。如果你有更多的渠道,你可以从不同的渠道获取更多的数据。

  3. 不完全是下一个 x-1 内存地址。你可以把内存想象成 64 字节的块。每次你想访问一个字节时,你都会带上你的地址所属的块。假设您要访问地址 123(十进制)。地址的开头应该是 64 到 127。因此,您将带来整个块。这意味着,你不仅要带下面的,还要带以前的地址,当然这取决于你访问的地址。

  4. 这取决于您 CPU 支持的 DDR 版本。您可以在此处查看一些数字:https://en.wikipedia.org/wiki/Double_data_rate

  5. 是的,他们有。当您将数据从内存带到缓存时,您会带来一个缓存行,并且 SIMD 扩展在一条指令中处理多个数据元素。这意味着如果你想在一条指令中添加 4 个值,你正在寻找的数据将在缓存中(因为你带来了整个块)并且你只需从缓存中读取它。