数学库经常基于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
相关的:
What is FLOP/s and is it a good measure of performance?
最佳答案
通常,人们会比较数学库,以便选择一个可以最大程度地减少其程序运行时间的数学库。对于此类基准,需要考虑两件事:给定输入的库性能以及该输入是否代表您的用例。
如果我们假设每项任务(例如 vector 缩放)都需要相同数量的浮点运算,那么人们会期望FLOPS最多的库首先完成。
在某些情况下,每个库将执行相同数量的浮点运算的假设是合理的。但是,对于同一个任务,两个库完全可能需要不同数量的浮点运算(例如矩阵矩阵乘法)。如果是这种情况,那么与执行更多FLOPS的库相比,一个库执行的FLOPS可能更少,但完成时间却更少。因此,在这些情况下,总运行时间是合理的。如果作者在FLOPS中发布比较,则意味着他们相信每个图书馆的操作总数相同。或者只是将理论上完成任务所需的操作数除以总运行时间(这也是常见的)。您需要检查一下基准测试方法。
比较性能(例如FLOPS)与大小的目的是帮助人们了解其用例在代表性输入上的性能。如果您知道会有很多小 vector ,例如小于10的大小,那么您就不必担心库中大小为1gb的 vector 有多快,也不希望这些输入影响比较。
通常,对FLOPS进行计数很流行(可能部分是因为它易于向数学家解释)。我想一种动机是说“您可以以10000 FLOPS的价格出售size = 10的 vector ,但以100 FLOPS的价格出售size = 100的 vector ”比说“您可以在0.001秒内缩放size = 10的 vector ,但有一个大小”更容易理解。 = 1秒内有100个 vector 。”如果报告总运行时间,则可能需要按输入大小进行缩放以进行比较。
关于c++ - 为什么经常用FLOPS比较数学库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30406598/