单核可实现的内存带宽

Posted

技术标签:

【中文标题】单核可实现的内存带宽【英文标题】:Memory bandwidth achievable on a single core 【发布时间】:2014-03-02 16:35:36 【问题描述】:

在现代多核平台上,内存带宽受限的应用程序的并行性能通常无法随内核数量很好地扩展。通常,在达到一定数量的内核时会观察到加速,但在那之后性能就会饱和。一个综合的例子是众所周知的STREAM benchmark,它通常用于报告可实现的内存带宽,即饱和点的内存带宽。

考虑以下 STREAM 基准测试(三元组)在峰值内存带宽为 42.7GB/s (DDR3-1333) 的单个 Xeon E5-2680 上的结果:

1  core  16 GB/s
2  cores 30 GB/s
3+ cores 36 GB/s

STREAM 可以很好地从 1 核扩展到 2 核,但在 3 核以上时,性能大致保持不变。

我的问题是:单个 CPU 内核可以实现的内存带宽是什么决定的?由于这个问题太宽泛了,我把它缩小到上面提到的架构:我怎么能预测带有 1 个线程的 STREAM 会给我 16 GB/s 从 E5-2680 的规格,或者通过查看硬件计数器等?

【问题讨论】:

我想知道内存通道的数量如何/是否会影响速度?我的具有 4 个内存通道的 CPU 在速度基准测试中扩展到 4 个线程。您在两个线程上看到了一些改进,我认为您的机器也有 4 个通道。 2 通道系统的表现如何? 【参考方案1】:

对于单核,主要因素是 CPU 频率和 CPU 微架构,即单核向总线发出请求的速度以及 CPU 预测您所在的内存位置的能力要去访问。如果内存访问是随机的并且代码执行取决于数据,那么 CPU 设计人员会竭尽全力让事情看起来比实际速度更快,并隐藏延迟的影响,而如果您只读取一堆数据并说将其加起来您将拥有带宽。但对于单核来说,绝对上限是时钟速度。

对于多线程访问,瓶颈将是主板和北桥上的总线和 RAM 架构。所以这取决于你的主板。您可以将 DRAM 速度降低 50%,但其中 4 个并行并实现加速。反之亦然。

然而,这个问题非常广泛。如果您想从程序员的角度了解更多关于内存的信息,请查看What every programmer should know about memory。它对各种因素进行了深入的描述。

这是一个非常深入的话题。

PS,至于预测,不太可能,或者不太实用。测量更好,除非您可以访问 CPU、芯片组、主板和 RAM 的非常详细的规格,即使这样也只是一个有根据的猜测。你最好在现实生活中,根据你的特定工作量来衡量它。

【讨论】:

对于单核,理论上上限应该是内存带宽。以 Intel Haswell i7-4770 CPU 为例,L1 级缓存负载带宽为 64Byte/cycle,频率为 3.6GHz,因此单核峰值吞吐量为 64*3.6GB/s,远大于内存带宽. 是的,这暗示除了时钟速度之外还有更多因素。

以上是关于单核可实现的内存带宽的主要内容,如果未能解决你的问题,请参考以下文章

服务器1M带宽同时能承受多少人在线

请问多核CPU还需要超线程技术吗?还有多核CPU的带宽怎样计算?

Java中的关键字volatile是不是强制单核机器上的内存同步?

单核CPU, 1G内存,也能做JVM调优吗?

为啥内存重新排序在单核/处理器机器上不是问题?

4.26 上午