为什么数学图书馆经常被FLOPS比较?

时间:2015-05-22 22:12:41

标签: 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

相关:

What is FLOP/s and is it a good measure of performance?

2 个答案:

答案 0 :(得分:2)

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

如果我们假设每个任务(例如矢量缩放)需要相同数量的浮点运算,则可以预期具有最多FLOPS的库首先完成。

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

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

一般来说,计算FLOPS一直很受欢迎(可能部分是因为它很容易向数学家解释)。我想一个动机就是说"你可以在10000 FLOPS处销售一个尺寸= 10的矢量,但是在100 FLOPS"比说"更容易消化你可以在0.001秒内缩放一个尺寸= 10的矢量,但是在1秒内尺寸= 100矢量。"如果报告总运行时间,则可能需要按输入大小进行比较以进行比较。

答案 1 :(得分:1)

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

FLOPS衡量算法使用CPU的程度。算法的FLO​​PS的测量值除以CPU能够得到的FLOPS的数量,得到0到1之间的分数。越接近1,算法使用CPU的效率越高,这对于那种类型的CPU(即算法更快地生成解决方案,因此净成本更低)。

结果特定于CPU(指令集)和算法。但是,如果算法在特定CPU上产生较小的结果,则它不能很好地利用该CPU。这可以驱动不同算法的选择,不同的编译设置(例如,以不同方式进行优化,或选择不同的指令),选择服务器场,算法将更有效地运行,等等。对于重复进行的大型计算(每天) )使用有效利用CPU的算法与使用效率低的算法相比,成本效益可能很大。