您无法仅从 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,所有触发器都只能使用宽向量指令(指令级并行),并且并非所有任务都可以使用最宽向量: