6

数学库经常根据 FLOPS 进行比较。当我看到 FLOPS 与大小的图以及几个不同数学库的点集时,向我传达了什么信息?

如果比较是在相同算法的两个实现之间或在两个不同硬件上的相同软件之间进行比较,那么作为性能衡量标准的 FLOPS 对我来说会更有意义。我不明白为什么它是比较矩阵-矩阵乘法之类的适当或流行的方法。

这是否意味着底层算法几乎相同,并且通过最小化开销来最快地提供浮点单元的代码获胜?

例子比比皆是。

http://eigen.tuxfamily.org/index.php?title=基准

https://code.google.com/p/blaze-lib/wiki/Benchmarks

https://software.intel.com/en-us/articles/a-simple-example-to-measure-the-performance-of-an-intel-mkl-function

另一方面,这些 LAPACK 和 Armadillo 基准测试使用给定操作的绝对时间,这对我来说更有意义。

http://www.netlib.org/lapack/lug/node71.html

http://arma.sourceforge.net/speed.html

相关的:

什么是 FLOP/s,它是衡量性能的好方法吗?

4

2 回答 2

2

通常,人们比较数学库是为了选择一个可以最小化程序运行时间的库。对于此类基准测试,需要考虑两件事:库在给定输入上的性能以及该输入是否代表您的用例。

如果我们假设每个任务(例如矢量缩放)需要相同数量的浮点操作,那么人们会期望具有最多 FLOPS 的库首先完成。

在某些情况下,假设每个库将执行相同数量的浮点运算是合理的。但是完全有可能两个库对于同一个任务需要不同数量的浮点运算(例如矩阵矩阵乘法)。如果是这种情况,那么库可能会执行更少的 FLOPS,但完成的时间会比执行更多 FLOPS 的库要短。因此,在这些情况下,总运行时间是合理的。如果作者在 FLOPS 中发布比较,这意味着他们相信每个库总共执行相同数量的操作;或者只是将理论上完成任务所需的操作数除以总运行时间(这也很常见)。您需要查看基准方法。

比较性能(例如 FLOPS)与大小的目的是帮助人们了解其用例的代表性输入的性能。如果你知道你会有很多小向量,比如小于 10 的大小,那么你不在乎这个库对于 1gb 大小的向量有多快,也不希望这些输入影响比较。

一般来说,计算 FLOPS 一直很流行(部分原因可能是因为它很容易向数学家解释)。我想一个动机是说“你可以在 10000 FLOPS 时出售 size=10 的向量,但在 100 FLOPS 时出售 size=100 的向量”比说“你可以在 0.001 秒内缩放 size=10 的向量但是大小= 1 秒内 100 个向量。” 如果您报告总运行时间,您可能希望按输入大小进行缩放以进行比较。

于 2015-05-22T23:12:47.700 回答
1

在高性能计算中,一个目标通常是在最短的时间内利用尽可能多的硬件能力。这最大限度地减少了等待结果的时间(由人类或其他时间敏感系统)。在大型计算设施中,运营成本(电力消耗、维护人力等)通常 - 大致 - 随时间变化,因此计算时间直接转化为底线(进行计算所支付的资金)。

FLOPS 衡量算法对 CPU 的利用程度。算法的 FLOPS 测量值除以 CPU 能够执行的 FLOPS 数得出 0 到 1 之间的分数。越接近 1,算法使用 CPU 的效率越高,这意味着在那种类型的CPU(即算法产生解决方案的速度更快,因此净成本更低)。

结果特定于 CPU(指令集)和算法。但是,如果一个算法在特定 CPU 上给出了一个小的结果,那么它就没有很好地利用那个 CPU。这可以推动选择不同的算法、不同的编译设置(例如,进行不同的优化或选择不同的指令)、选择算法将在其上更有效地运行的服务器场等。对于重复进行的大型计算(每天) 对于使用高效利用 CPU 的算法与低效使用 CPU 的算法相比,成本收益可能很大。

于 2015-05-22T23:24:52.620 回答