如何确定我的计算机能够完成的 FLOP 数量

计算科学 浮点
2021-12-07 21:31:38

我想确定我的计算机可以执行的理论 FLOP(浮点运算)数。有人可以帮我解决这个问题。(我想将我的计算机与一些超级计算机进行比较,以了解它们之间的区别)

4个回答

理论峰值 FLOP/s 由下式给出:

核心数*平均频率*每个周期的操作
核心数量很容易。理论上,平均频率应该考虑到一定数量的 Turbo Boost (Intel) 或 Turbo Core (AMD),但工作频率是一个很好的下限。每个周期的操作取决于架构,并且很难找到(SandyBridge 和 IvyBridge 的操作数为 8,参见幻灯片 26)。这是这个堆栈溢出问题的主题,其中包括一堆现代架构的数字。

我了解您要求提供理论值,但由于任何实际代码(甚至是 LINPACK)几乎总是无法访问该值,您可能只想为非常大的矩阵运行(优化)DGEMM。我喜欢这种方法的原因是它暴露了某些处理器的一些缺点,这些缺点阻止它们达到其理论峰值触发器值。

例如,大约在 2014 年,NVIDIA GPU 在同一管道上进行整数和浮点运算。这意味着如果您不进行任何整数计算,您只能达到理论峰值 flop/s 由于数组索引和任何其他形式的数据访问都需要在某处进行整数运算,因此没有代码可以在 NVIDIA GPU 上达到理论峰值 flop/s。在大多数情况下,有人认为约 80% 是上限。对于同时发出整数和浮点运算的 CPU,这不是问题。

在 Intel Knights Corner 和 Blue Gene/Q 等一些类似 GPU 的多核处理器上,对于类似的管道问题,实现峰值 flop/s 比在传统 CPU 上更难(尽管两者都可以在大型 DGEMM 中至少达到约 90% 的峰值) )。

您需要了解您机器中 CPU 的型号和供应商。一旦你有了它,你可以在供应商的网站(或者可能在维基百科上)查找时钟频率、芯片/插槽数、每个芯片的内核数、每个周期的浮点运算数以及这些运算的向量宽度. 然后,您只需乘以。

以我工作的Stampede中的 Intel Xeon E5-2680 “Sandy Bridge”处理器为例。规格是:

  • 2.7GHz
  • 2个芯片/节点,8核/芯片
  • 2个向量指令/周期
  • 256 位宽 AVX 指令(4 个同时双精度操作数)

将这些相乘得到 345.6 GF/节点或系统未加速部分的 2.2 PF。

我们通常考虑双精度(64 位)运算,因为这是我们绝大多数用户所需的精度,但如果您愿意,您可以重做单精度计算。这通常只会改变最后一个因素,比如 8 SP Flops/instruction 而不是 4 DP Flops/inst,但它可能与此大不相同。例如,较旧的 GPU 的 DP 仅为 SP 的 1/8 左右。如果您曾经为您的系统引用一个数字,那么如果它不是双精度的,您应该明确说明您使用的是哪个数字,否则人们会认为它是。

此外,如果您的芯片支持融合乘加 (FMA) 指令,并且它可以全速执行,那么大多数人将其视为 2 个浮点运算,尽管硬件性能计数器可能仅将其视为一个指令。

最后,您还可以对系统中可能存在的任何加速器(如 GPU 或 Xeon Phi)执行此操作,并将该性能添加到 CPU 性能中以获得理论上的总和。

我建议你看一下英特尔 MKL 基准测试套装

在这里可以找到适用于 Windows、Linux 和 Mac OS 的二进制文件。在求解线性方程组时,它会估计 FLOPs。信息如下,

=================== Timing linear equation system solver ===================

Size   LDA    Align. Time(s)    GFlops   Residual     Residual(norm) Check
.
.
.
2000   2000   4      0.038      139.8416 3.396561e-12 2.702137e-02   pass
5000   5008   4      0.457      182.4536 2.230932e-11 2.943595e-02   pass
5000   5008   4      0.477      174.6359 2.230932e-11 2.943595e-02   pass
.
.
.

希望能帮助到你。