为什么数学库经常被FLOPS比较?

Pra*_*tic 6 c++ performance flops

数学库经常基于FLOPS进行比较.当我向几个不同的数学库展示FLOPS与大小的点集时,向我传达了什么信息?

如果比较是在同一算法的两个实现之间或两个不同硬件上的相同软件之间进行比较,那么作为性能度量的FLOPS会更有意义.我不明白为什么它是比较像矩阵矩阵乘法这样的东西的合适或流行的方法.

暗示只是底层算法几乎相同,并且通过最小化开销获胜来最快地为浮点单元提供信息的代码?

例子比比皆是.

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

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并且它是一个很好的性能衡量标准?

haz*_*dev 3

通常,人们会比较数学库,以便选择能够最大限度地减少程序运行时间的数学库。对于此类基准测试,需要考虑两件事:库在给定输入上的性能以及该输入是否代表您的用例。

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

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

比较性能(例如 FLOPS)与大小的目的是帮助人们了解其用例的代表性输入的性能。如果您知道您将有很多小向量,例如小于 10 的向量,那么您并不关心该库对于大小为 1gb 的向量的速度有多快,并且不希望这些输入影响比较。

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