性能指标

本节目录

1.5. 性能指标#

为了客观地评估并行计算程序的性能,需要有一些标准。FLOPS 和加速比是最通用的指标,对于特定的问题,比如人工智能和大数据,也有一些特定的评测基准。

FLOPS#

传统的高性能计算经常使用 FLOPS(Floating Point OPerations per Second)来衡量软硬件的性能。

Note

所谓浮点数,指的是计算机一定比特位数来表示小数。比特位数越高,数值越精确,精度越高,但计算的成本越高。业界已经形成了一些标准,电气电子工程师学会(Institute of Electrical and Electronics Engineers, IEEE)定义了 16 位浮点数(FP16)、32 位浮点数(FP32)和 64 位浮点数(FP64)在计算机中的表示方法。大部分科学计算任务需要 FP64,深度学习等任务只需要 FP32、FP16 甚至更低。严格意义上来讲,需要明确是 FP32 还是 FP64 精度下的 FLOPS。因为不同硬件所能提供的 FP32 和 FP64 算力有很大差异。

FLOPS 指每秒钟能够完成多少次浮点计算。如果进行一个 \(n\) 维向量加法:\(a + b\),所需的浮点计算次数为 \(n\)。将浮点计算次数除以时间,就是 FLOPS。

FLOPS 指标既依赖于硬件性能,也与软件和算法高度相关。章节 1.3 提到线程安全问题,章节 1.2 提到任务分发调度,如果软件算法设计不够好,大量计算资源闲置,应用程序的 FLOPS 可能很低。

加速比#

理论上,并行程序应该比对应的串行程序更快,所用时间更短。执行时间的缩短可以用加速比来衡量:

\[ 加速比 = \frac{t_s}{t_p} \]

其中 \(t_s\) 为串行程序执行时间,\(t_p\) 为并行程序执行时间。

在加速比指标基础上,还有一种衡量方法,叫做效率

\[ 效率 = \frac{加速比}{N} = \frac{t_s}{N \cdot {t_p}} \]

其中 \(N\) 为并行程序所使用的计算核心的数目。当加速比为 \(N\) 时,串行程序可以被线性拓展到多个计算核心上,可以说并行程序获得了线性加速比

线性加速比是最理想的情况,实际上很难达到。并行程序需要有调度器将不同的任务分发到多个 Worker 上,多个 Worker 之间还要通信,数据在多个 Worker 之间需要同步,这些步骤都会浪费时间。

另外,在使用 GPU 时,计算效率指标的 \(N\) 取值为是多少也有一定争议。GPU 上的计算核心成千上万,我们很难在一个 GPU 计算核心上测试得到 \(t_s\);GPU 与 CPU 是协同工作的,计算加速比或效率时,是否要把 CPU 考虑进来?目前还没有共识。