迭代方法比较:迭代次数与cpu时间

计算科学 表现 基准测试
2021-12-15 00:34:52

我正在比较两种用于反转随机方阵的迭代方法。由于矩阵是随机的,每个测试用例都需要不同的迭代次数和不同的经过时间。我的问题是,除了平均 CPU 时间之外,这两种方法所采用的迭代平均值是比较这些方法的有用信息。

3个回答

一般来说,这两种性能比较方法都有自己的位置。

  • 从某种意义上说,比较CPU 时间是最有趣的指标,因为归根结底,您真正感兴趣的是哪种方法更快。(但要确保终止标准是可比较的;例如,两种方法产生的近似值具有相同的精度)。缺点是这只告诉您在执行测试的机器上哪种方法(更重要的是,哪种实现)更快。不能保证具有不同架构或软件的不同机器会选择相同的赢家。

  • 另一方面,比较迭代次数是与机器无关的,但如果这两种方法具有非常不同的迭代,则可能会产生误导——在这种情况下,迭代次数较少但成本较高的方法可能并不可取(例如,用于优化的牛顿法与梯度法如果您只需要非常低的精度)。

所以,是的,给出这两个数字 [1] 是有意义的,而且我经常在出版物中看到它。还有第三种选择:

  • 比较基本操作的数量如果两次迭代都包含相同类型的适当昂贵的操作,但需要不同的数量(每次迭代中甚至可能不是相同的数量),那么计算这些操作的总数是有意义的。在您的情况下,可能的候选者是矩阵向量或矩阵矩阵乘法。

[1] 明确显示多次运行的统计数据;如果您显示均值,请不要忘记包括标准偏差。

我发现迭代次数是一个误导性的指标,因为它暗示了“速度”,而实际上并非如此。有关比较显示这种差异的几个不同预处理器的简单示例,请参见此处: http: //www.dealii.org/developer/doxygen/deal.II/step_6.html#Possibilitiesforextensions

如果在其他答案中不清楚,那么迭代次数对 big-O 参数有什么好处。

这对绝对速度不利,因为这取决于每次迭代的平均时间,这可能在方法之间存在很大差异。

例如,有一种趋势是忽略计算数组索引的成本,这很可能占 CPU 时间的很大一部分。

补充:另外,正如我在其他地方指出的那样,每次调用该方法通常都会产生设置成本。然后,如果矩阵通常不是很大,则该设置成本本身可能占 CPU 时间的很大一部分(这样删除它会在速度上产生很大差异)。