【问题标题】:Independent memory channels: What does it mean for a programmer独立内存通道:对程序员意味着什么
【发布时间】:2013-05-23 12:12:41
【问题描述】:

我阅读了英特尔至强处理器的Datasheet 并看到以下内容:

集成内存控制器 (IMC) 支持 DDR3 协议,具有四个 独立的 64 位内存通道,每个通道有 8 位 ECC(总共 72 位),每个通道支持 1 到 3 个 DIMM,具体取决于内存类型 已安装。

我需要从程序员的角度知道这究竟意味着什么。
这方面的文档似乎相当稀少,我手头没有英特尔的人来询问;)

  1. 此内存控制器能否同时从非相邻内存区域执行 4 个数据加载(并从最多 3 个内存 DIMM 请求每个数据)? IE。 4x64 位,从最多 3 个 DIMM 条带化,例如:
    | X | _ | X | _ | X | _ | X |
    (X是加载的数据,_一个任意大的未加载数据区域)

  2. 此 IMC 能否执行 1 次加载,这将从连续内存区域加载最多 1x256 位。
    | X | X | X | X | _ | _ | _ | _ |

【问题讨论】:

    标签: memory-management cpu intel internals processors


    【解决方案1】:

    这似乎是特定于实现的,取决于编译器、操作系统和内存控制器。该标准位于:http://www.jedec.org/standards-documents/docs/jesd-79-3d。似乎如果您的控制器完全兼容,则可以设置特定位以指示交错或非交错模式。请参阅 DDR3 规范的第 24,25 和 143 页,但即使在规范中的细节也很简单。

    特别是对于 i7/i5/i3 系列,可能是所有较新的英特尔芯片,内存是交错的,就像您的第一个示例一样。对于这些较新的芯片以及可能支持它的编译器,是的,一个 Asm/C/C++ 级别的调用来加载足够大的内容以进行交错/条带化,将启动所需数量的独立硬件通道级别加载到每个内存通道。

    在维基百科多通道内存页面的三通道部分中,有一小部分 CPU 执行此操作,可能不完整:http://en.wikipedia.org/wiki/Multi-channel_memory_architecture

    【讨论】:

    • 感谢规范链接。但要确保我做对了:如果说 QuadCore 处理器具有这样的内存控制器,并且 4 个线程(同时)发出负载,如我的示例 (1) 所示 - 每个线程一个“X”,可以相距很远。内存控制器会设法并行(=独立地)读取它吗?并且这 4 个请求中的每一个都可以由多达 3 个 DIMM(对于 TripleChannel)提供服务?
    • @Patrick 如果我正确理解硬件,所有负载都将根据缓存进行检查,然后将不存在的任何内容按序列化顺序加载到缓存中。我不知道那个顺序是什么,我认为它也是特定于实现的。从缓存中可以完成实际工作。当加载请求大小超过缓存的大小时,有趣的事情开始发生,一个内核仍在处理新加载的数据。一些 CPU 清空缓存(稍后强制再次加载)并加载其他等待的新内容。此级别与编码逻辑并不总是相关。
    • @Squaky:这当然是真的。也许我应该改写:如果控制器有那些独立的通道 - 他可以一次加载超过 1 个加载请求的数据吗?我想了解在这种情况下“独立”是什么意思。这是否使控制器能够同时处理多个请求(而不是使用队列对它们进行序列化)?
    • @Patrick 我的理解是内存控制器作为一个抽象层来从开发人员手中删除这些细节。如果控制器支持它,我看不出它为什么不能在 2 个不同的通道上执行 2 个不同的加载或根据设计和要加载的数据对它们进行序列化。但是,我不知道在野外有非序列化的内存控制器。我确实在使用 gzip 压缩来减少带宽消耗的研究环境中看到了一个,所以是的,任何事情都可以做。
    猜你喜欢
    • 2019-05-28
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    相关资源
    最近更新 更多