我想在不运行应用程序的情况下计算HPC应用程序(NAS基准测试)的mflops(每个处理器每秒百万次操作)。我使用Stream Benchmark测量了我的系统(超级计算机)的每个核心的内存带宽。我想知道如何通过拥有内核的内存带宽信息来获得应用程序的每个处理器的mflops。 我的节点具有64GiB内存(包括16个内核 - 2个插槽)和58 GiB / s聚合带宽,使用所有物理内核。我的内核的内存带宽从2728.1204 MB / s到10948.8962 MB / s不等,因为NUMA架构,它必须是Triad功能。
任何帮助都会受到赞赏。
答案 0 :(得分:1)
您无法仅从STREAM的内存带宽结果中估算基准的MFLOPS / GFLOPS。您需要知道另外两个参数:CPU内核的峰值MFLOPS / GFLOPS(更好的是每个时钟周期的最大FLOP操作,所有变量的向量指令和CPU频率限制:最小值,平均值,最大值)以及GFLOPS / GBytes(触发器到您需要估算的每个程序的字节比,算术强度(每个NAS基准)。
流基准具有非常低的算术强度(0 DP =每两个双操作数的FP64触发器=复制中的2 * 8字节,标度中每16字节1个触发器,1个触发器/ 24个字节的添加和2个触发器/ 24个字节在三合会)。因此,Stream基准测试受正确运行中的内存带宽限制(以及错误运行时的缓存带宽)。许多基准可能有更高的
利用这些数据(内存带宽,不同矢量化水平上的最大gflops / GHz,cpu的正常/最大/低频率,测试的算术强度),您可以开始使用屋顶线性能模型https://crd.lbl.gov/departments/computer-science/PAR/research/roofline/
使用roofline你有x轴与flops / byte; GFlop / s的y轴(均为对数刻度)。 "屋顶的线条#34;每个CPU(或机器)由两部分组成。
第一部分倾向于对应于低算术强度。这部分中的应用程序必须等待数据从内存加载,它们没有数据可以以完整的GFlop / s CPU速度运行;测试受内存限制。该行由STREAM基准定义。
线的第二部分是直的,它对应于更高的强度。这里的任务不受内存带宽的限制,它们受可用FLOPS的限制。对于现代CPU,所有触发器仅适用于宽向量指令(指令级并行),并非所有任务都可以使用最宽的向量: