在现代多核平台上,内存带宽受限应用程序的并行性能通常不能很好地随内核数量而扩展。通常,在达到一定数量的内核时会观察到加速,但在那之后性能就会饱和。一个综合的例子是著名的STREAM 基准测试,它通常用于报告可实现的内存带宽,即饱和点的内存带宽。
考虑在峰值内存带宽为 42.7GB/s (DDR3-1333) 的单个 Xeon E5-2680 上的 STREAM 基准测试 (Triad) 的以下结果:
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 的规格,或者通过查看硬件计数器等?