2

我正在尝试为正在运行模拟的超级计算机中的节点构建屋顶线模型。该节点具有 2 个 Intel Xeon E5-2650 v2 (Ivy Bridge) 8 核 2.6 GHz 处理器(每个节点 16 个内核),总共 64GB RAM(每个 4GB)。Intel Xeon E5-2650 的最大内存带宽在此处显示为 59.7 GB/s。

实现的 GFLOPS = 最大内存带宽 x 算术强度。

最大 GFLOPS = 核数 x 时钟频率(以 GHz 为单位) x ops/cycle。

我的代码的算术强度为 1/3,并使用双精度浮点。

以下是我计算不同类型程序的峰值 GFLOP 的计算方法:

  • 顺序程序(单核)无矢量化:

    • 1x2.6x1(我假设没有矢量化,我们只能实现 1 个操作/周期?)= 2.6 GFLOPs
  • 带有矢量化 (SSE) 的顺序程序(单核):

    • 1x2.6x8 = 20.8 GFLOP
  • 具有矢量化 (SSE) 功能的一台 Xeon 上的所有内核:

    • 8x2.6x8 = 166.4 GFLOP
  • 所有内核都带有矢量化 (SSE) 的两个 Xeon:

    • 2x 8x2.6x8 = 332.8 GFLOP

在上面显示的不同类型的程序之间,程序可用的内存带宽如何变化?我知道 1 Xeon E5-2650 的最大内存带宽是 59.7 GB/s,但是这可以在单核上实现吗?使用 2 个 Xeon E2650 会变成 119.4 GB/s 吗?

所获得的 GFLOP(使用峰值带宽 x 算术强度)也会是:

  • 不带矢量化的顺序程序:

    • 59.7 * 1/3 = 19.9 GFLOPs,但是因为我们的屋顶线是 2.6 GFLOPs,我们被限制为 2.6 GFLOPs?
  • 带有矢量化的顺序程序:

    • 59.7 * 1/3 = 19.9 GFLOP。这是可以实现的,因为我们的屋顶线是 20.8 GFLOPs。
  • 一个带有矢量化的 Xeon(使用所有 8 个内核):

    • 59.7 * 1/3 = 19.9 GFLOP。我对此表示怀疑,因为我们的并行程序肯定能够比顺序程序产生更多的内存请求,而且顺序程序肯定不会使内存系统饱和?
  • 两个具有矢量化功能的 Xeon(共 16 个内核):

    • 119.4 * 1/3 = 39.8 GFLOP。

我觉得所达到的 GFLOP 有问题,我是不是在某个地方犯了错误?

4

0 回答 0