【问题标题】:How much data will be transferred from memory to CPU in a single call一次调用将多少数据从内存传输到 CPU
【发布时间】:2017-12-10 05:30:42
【问题描述】:

由于内存比 CPU 慢得多,它应该以一些 'x'Bytes 的块的形式发送数据。

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

请随时提供任何参考。

提前致谢。

【问题讨论】:

    标签: hardware cpu-architecture


    【解决方案1】:
    1. 大小“x”通常是高速缓存行的大小。缓存行大小取决于架构,但 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 个值,那么您要查找的数据将在缓存中(因为您带来了整个块)并且您只需从缓存中读取它。

    【讨论】:

    • 非常感谢@ParallelHighway。您知道任何可以获取现代 CPU 信息的好资源吗?
    • 这里link 有很多关于多代CPU 的信息。您可能需要检查与缓存和内存访问相关的部分。
    猜你喜欢
    • 2018-10-22
    • 2015-07-02
    • 1970-01-01
    • 2019-07-21
    • 2011-09-23
    • 2012-10-17
    • 2017-11-23
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多