【发布时间】:2017-12-10 05:30:42
【问题描述】:
由于内存比 CPU 慢得多,它应该以一些 'x'Bytes 的块的形式发送数据。
- 这个“x”的大小是多少?
- 数据线 b/n 内存和 CPU 也是 x*8 位通道吗?
- 如果我访问内存上的地址“A”,它是否会将所有接下来的 x-1 个内存地址发送到缓存?
- 内存总线工作的大约频率是多少?
- SIMD - SSE 和 MMX 扩展是否以某种方式利用了这种批量读取功能?
请随时提供任何参考。
提前致谢。
【问题讨论】:
由于内存比 CPU 慢得多,它应该以一些 'x'Bytes 的块的形式发送数据。
请随时提供任何参考。
提前致谢。
【问题讨论】:
大小“x”通常是高速缓存行的大小。缓存行大小取决于架构,但 Intel 和 AMD 使用 64 字节。
至少 .如果你有更多的频道,你可以从不同的频道获取更多的数据。
不完全是下一个 x-1 内存地址。你可以把内存想象成 64 字节的块。每次你想访问一个字节时,你都会带上你的地址所属的块。假设您要访问地址 123(十进制)。地址的开头应该是 64 到 127。因此,您将带上整个块。这意味着,您不仅要带以下地址,还要带以前的地址,当然这取决于您访问的地址。
这取决于您的 CPU 支持的 DDR 版本。你可以在这里查看一些数字:https://en.wikipedia.org/wiki/Double_data_rate
是的,确实如此。当您将数据从内存带到缓存时,您会带来一个缓存行,并且 SIMD 扩展在单个指令中处理多个数据元素。这意味着如果您想在一条指令中添加 4 个值,那么您要查找的数据将在缓存中(因为您带来了整个块)并且您只需从缓存中读取它。
【讨论】: