【发布时间】:2014-06-05 21:22:09
【问题描述】:
我已经寻找了很长一段时间,但似乎无法找到一个官方/结论性的数字来引用英特尔至强四核可以完成的单精度浮点运算/时钟周期的数量。我有一个 Intel Xeon 四核 E5530 CPU。
我希望用它来计算我的 CPU 可以达到的最大理论 FLOP/s。
MAX FLOPS = (# 核心数) * (时钟频率 (周期/秒)) * (# FLOPS / 周期)
任何指向我正确方向的东西都会很有用。我找到了这个 FLOPS per cycle for sandy-bridge and haswell SSE2/AVX/AVX2
英特尔酷睿 2 和 Nehalem:
4 DP FLOPs/cycle:2-wide SSE2 加法 + 2-wide SSE2 乘法
8 SP FLOPs/cycle:4-wide SSE 加法 + 4-wide SSE 乘法
但我不确定这些数字是在哪里找到的。他们是否假设一个融合乘加 (FMAD) 操作?
编辑:使用这个,在 DP 中,我计算出英特尔引用的正确 DP 算术吞吐量为 38.4 GFLOP/s(引用 here)。对于 SP,我得到了两倍,76.8 GFLOP/s。我很确定 4 DP FLOP/cycle 和 8 SP FLOP/cycle 是正确的,我只是想确认他们如何获得 4 和 8 的 FLOPs/cycle 值。
【问题讨论】:
-
(8 SP FLOPs/cycle) * (4 cores) * (2.4 GHz) = 76.8 GFLOP/s。处理器在每个周期都可以执行加法和乘法指令。但它们没有融合。
-
您可能找不到官方编号,因为没有一个 - 它高度依赖于您拥有的指令组合以及它们之间的依赖关系。理论上的最大值可能会被计算出来,但是很少有有用的现实世界程序(合成基准测试除外)会以完全正确的顺序完全正确地组合指令以实现该最大值......
-
如果你想知道如何达到最大 FLOP/s,可以看看:stackoverflow.com/questions/8389648/… 那个是双精度的,但它可以很容易地修改为单精度.
-
在实践中,人们经常想要加载/存储数据以及进行计算。因此,虽然峰值 FLOPS 的理论值很高兴知道,但如果无法以足够快的速度读取数据以实现这一点,那么它并不是很有用。一个更有用的指标还给出了可以在 while 中获得的浮点加载/存储的数量。例如,一个 SB 内核可以在每个时钟周期加载 4 个双精度,并且每个时钟周期执行 8 个双精度操作(4 个乘法和 4 个加法)。获得这个比仅仅进行计算更困难。
标签: cpu intel cpu-architecture flops nehalem