数学库经常根据FLOPS进行比较。当我看到几个不同数学库的FLOPS与size的曲线图和点集时,向我传达了什么信息?
如果是在相同算法的两个实现之间进行比较,或者在两个不同硬件上的相同软件之间进行比较,那么FLOPS作为性能衡量标准对我来说更有意义。我不明白为什么这是一种比较矩阵-矩阵乘法的合适或流行的方法。
这是否意味着底层算法几乎相同,通过最小化开销为浮点单元提供数据的代码最快?
例子比比皆是。
http://eigen.tuxfamily.org/index.php?title=Benchmark
https://code.google.com/p/blaze-lib/wiki/Benchmarks
另一方面,这些LAPACK和Armadillo基准使用给定操作的绝对时间,这对我来说更有意义。
http://www.netlib.org/lapack/lug/node71.html
http://arma.sourceforge.net/speed.html
相关:
发布于 2015-05-23 07:12:48
通常,人们比较数学库,以便选择一个最小化程序运行时的数学库。对于这样的基准测试,需要考虑的两件事是:库在给定输入上的性能,以及该输入是否代表您的用例。
如果我们假设每个任务(例如向量缩放)都需要相同数量的浮点操作,那么应该期望具有最多FLOPS的库首先完成。
在某些情况下,假设每个库将执行相同数量的浮点运算是合理的。但完全有可能两个库对同一任务需要不同数量的浮点运算(例如矩阵乘法)。如果是这种情况,那么库可能会做更少的FLOPS,但完成的时间比做更多FLOPS的库要短。因此,在这些情况下,查看总运行时是合理的。如果作者在FLOPS中发布比较,这意味着他们认为每个库都在执行相同数量的操作;或者只是简单地将理论上完成任务所需的操作数量除以总运行时(这也很常见)。您可能希望查看基准测试方法。
比较性能(例如FLOPS)与大小的目的是帮助人们了解其用例的代表性输入的性能。如果你知道你会有很多小的向量,比如小于10,那么你就不会关心这个库对于1 1gb大小的向量有多快,也不希望这些输入影响比较。
一般来说,计算失败已经很流行了(部分原因可能是因为它很容易向数学家解释)。我认为一个动机是说“你可以在10000个FLOPS上销售一个size=10向量,但是一个size=100向量在100FLOPS上”比说“你可以在0.001秒内缩放一个size=10向量,但是在1秒内缩放一个size=100向量”更容易理解。如果报告总运行时间,您可能希望按输入大小进行缩放以进行比较。
发布于 2015-05-23 07:24:53
在高性能计算中,一个目标通常是在最短的时间内尽可能多地利用硬件功能。这最小化了(人类或其他对时间敏感的系统)等待结果所花费的时间。在大型计算设施中,操作成本(消耗的电力、维护的人力等)通常--近似--随时间变化,因此计算时间直接转化为底线(用于计算的费用)。
FLOPS给出了算法对CPU利用率的衡量标准。对算法的FLOPS的测量除以CPU能够处理的FLOPS的数量得到一个介于0和1之间的分数。越接近1,该算法使用CPU的效率越高,这在该类型的CPU上转化为bang - for - buck (即,该算法产生解决方案的速度更快,因此净成本更小)。
其结果与CPU (指令集)和算法有关。但是,如果一个算法在特定的CPU上给出了一个很小的结果,那么它就没有很好地利用这个CPU。这可以推动选择不同的算法、不同的编译设置(例如,以不同的方式优化,或选择不同的指令),选择算法将在其上更有效地运行的服务器群,等等。对于重复(每天)完成的大型计算,使用有效利用CPU的算法与使用低效CPU的算法相比,成本效益可能更大。
https://stackoverflow.com/questions/30406598
复制相似问题