0

我想在不运行应用程序的情况下计算 HPC 应用程序(NAS 基准测试)的 mflops(每个处理器每秒百万次操作)。我已经使用 Stream Benchmark 测量了我的系统(超级计算机)每个核心的内存带宽。我想知道如何通过获得内核的内存带宽信息来获得应用程序的每个处理器的 mflops。我的节点有 64GiB 内存(包括 16 个核心 - 2 个插槽)和使用所有物理核心的 58 GiB/s 聚合带宽。我的内核的内存带宽从 2728.1204 MB/s 到 Triad 功能的 10948.8962 MB/s 不等,这一定是因为 NUMA 架构。

任何帮助将不胜感激。

4

1 回答 1

2

您无法仅从 STREAM 的内存带宽结果中估计基准的 MFLOPS/GFLOPS。您还需要知道两个参数:CPU 内核的峰值 MFLOPS/GFLOPS(最好是每个时钟周期的最大 FLOP 操作,具有向量指令的所有变体和 CPU 频率限制:最小值、平均值、最大值)以及 GFLOPS/GBytes(触发器到您需要估计的每个程序(每个 NAS 基准)的字节比,算术强度)。

Stream 基准的算术强度非常低(每两个双操作数 0 DP=FP64 触发器 = Copy 中的 2*8 字节,Scale 中每 16 字节 1 触发器,Add 中 1 触发器/24 字节和 Triad 中 2 触发器/24 字节) . 因此,Stream benchmark 受到正确运行中内存带宽的限制(以及错误运行中的缓存带宽)。许多基准可能具有更高的

有了这些数据(内存带宽、不同矢量化级别上的最大 gflops/GHz、cpu 的正常/最大/低频、测试的算术强度),您就可以开始使用屋顶线性能模型https://crd.lbl.gov/departments /计算机科学/PAR/研究/屋顶线/

车顶线模型示例; 内存受限部分

使用roofline,您有带有触发器/字节的x轴;GFlop/s 的 y 轴(均为对数刻度)。“屋顶”线由每个 CPU(或机器)的两部分组成。

第一部分是倾斜的,对应于低算术强度。这部分的应用程序将不得不等待从内存中加载数据,它们没有数据可以在 CPU 的全 GFlop/s 速度下进行操作;测试受内存限制。这条线由 STREAM 基准定义。

线的第二部分是直的,它对应于更高的强度。这里的任务不受内存带宽的限制,它们受到可用 FLOPS 的限制。对于现代 CPU,所有触发器都只能使用宽向量指令(指令级并行),并且并非所有任务都可以使用最宽向量:

车顶线模型; Gflops ILP 限定部分

于 2016-07-21T20:52:30.723 回答