0

我对在集群上运行的实际应用程序性能与集群峰值性能有疑问。

假设一个 HPC 集群报告它的峰值性能为 1 Petaflops。这是如何计算的?对我来说,似乎有两个测量矩阵。一是基于硬件计算的性能。另一个来自运行HPL?我的理解正确吗?当我阅读在系统上运行的一个真实应用程序时,开发人员提到它可以实现 10% 的峰值性能。这是如何衡量的,为什么它不能达到最佳性能?

谢谢

4

2 回答 2

5

峰值性能是系统理论上能够提供的。它是 CPU 内核总数、内核时钟频率和一个内核在每个时钟周期内进行的 FLOP 数的乘积。这种性能在实践中永远无法达到,因为没有真正的应用程序包含 100% 完全矢量化的紧密循环,这些循环仅对 L1 数据缓存中保存的数据进行操作。在许多情况下,数据甚至不适合最后一级缓存,并且内存接口通常不够快,无法以 CPU 能够处理的相同速率传输数据。HPC 中一个普遍存在的例子是稀疏矩阵与向量的乘法。它非常占用内存(即每个算术运算有很多加载和存储),以至于在许多平台上它只能达到峰值性能的一小部分。

当多个节点大规模联网时,情况会变得更糟,因为数据传输可能会带来巨大的额外延迟。这些情况下的性能主要取决于本地数据处理和数据传输的比率。HPL 在这方面特别好——它进行了大量的矢量化本地处理,并且不会在 CPU/节点之间移动太多数据。许多现实世界的并行程序并非如此,这也是当今许多人质疑 HPL 在评估集群性能方面的适用性的原因。替代基准已经出现,例如HPCG 基准(来自为您带来 HPL 的人)。

于 2014-09-24T08:37:59.670 回答
1

理论(峰值)值基于集群中每个单独内核的能力,这取决于时钟频率、浮点单元数、并行指令发布能力、向量寄存器大小等,这些都是内核的设计特性。然后聚合集群中每个核心的 flops/s 计数以获得集群 flops/s 计数。

对于汽车而言,等效的理论性能将是在给定发动机规格的情况下它可以达到的最大速度。

一个程序要达到理论计数,它必须以特定的顺序执行特定的操作,以使指令级并行度最大,并且所有浮点单元都在不断地工作,而不会由于同步或内存访问等原因而延迟。(参见这个SO question以获得更多见解)

对于一辆汽车来说,它相当于在没有风的直线上测量最高速度。

但是,当然,这样的程序计算感兴趣的东西的可能性很小。因此,像 HPL 这样的基准测试使用线性代数中的实际问题,具有高度优化和调整的实现,但由于 IO 操作和操作顺序不是最优的事实,这仍然不完美。

对于汽车,它可以比作在赛道上用直线、曲线等测量最高平均速度。

如果程序需要大量的网络或磁盘通信,这些都是需要大量时钟周期的操作,那么 CPU 在执行算术运算之前经常要保持空闲等待数据,从而浪费了大量的计算能力. 然后,通过将程序正在执行的浮点运算(加法和乘法)的数量除以执行它们所花费的时间来估计实际性能。

对于汽车来说,这相当于通过计算行程长度除以完成行程所需的时间来测量城镇中红灯等的最高平均速度。

于 2014-09-24T09:09:57.817 回答