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


14

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


4
我改写了您的问题,希望可以使其更加清楚。请确保我没有以任何方式改变您的意思。
Godric Seer 2013年

3
@GodricSeer您的编辑改善了我的问题。谢谢
srijan

Answers:


12

通常,两种性能比较方法都有自己的位置。

  • 从某种意义上说,比较CPU时间是最有趣的指标,因为最终,您真的对哪种方法更快感兴趣。(但是,请确保终止条件具有可比性;例如,两种方法均会产生具有相同精度的近似值)。缺点是,这只会告诉您在执行测试的计算机上哪种方法(更重要的是哪种实现)更快。无法保证具有不同体系结构或软件的另一台机器会选择同一位获胜者。

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

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

  • 基本操作数的比较。如果两个迭代都由同一种类型的适当昂贵的运算组成,但需要不同的数字(每次迭代可能甚至没有相同的数字),则对这些运算的总数进行计数是有意义的。在您的情况下,可能的候选者将是矩阵向量或矩阵矩阵乘法。

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


5
不要只是采取手段!如果您具有足够的带有随机输入的测试点,请绘制分布。
Bill Barth 2013年

1
@BillBarth-好点,尽管可能并不总是可行的;但是应该总是可以给出标准差和平均值。实际上,要提供哪些统计数据来报告绩效听起来像是一个很好的后续问题。
克里斯蒂安·克拉森2013年

@BillBarth您的观点很不错。但是,我正在按升序使用几个测试矩阵。在这种情况下,绘制分布图是不可行的,因为那时我必须绘制所有其他测试矩阵的分布图。这就是为什么我想将它们制成表格。感谢您的意见。
斯里兰卡,2013年

1
@srijan:您将获得数据,并应尽可能地自己绘制直方图。您不必全部发布它们,但我向您保证,分布图可以告诉您的不仅仅是数量众多的数字,也可能只是平均值。
比尔·巴特

我将包括每次迭代的执行时间。由于每个矩阵都不同,因此您可以在不同的执行时间使用不同的迭代次数。连同@Cristian所说的,每次迭代的执行时间将很有用。
jbcolmenares 2014年

4

我发现迭代次数是一个令人误解的指标,因为它在不是的情况下会提示“速度”。有关比较显示此差异的几个前置条件的简单示例,请参见此处:http : //www.dealii.org/developer/doxygen/deal.II/step_6.html#Possibilitiesforextensions


感谢您的回答。我无法理解这行“将迭代次数作为一种误导性指标,因为它在没有时提示“速度”。您所建议的示例对我来说有点难以理解。
srijan

我的意思是,我们经常将“迭代次数”等同于“使用的CPU时间”,这意味着需要较少迭代次数的方法也更快。但是,正如我所链接的数字所示,这是不正确的。
Wolfgang Bangerth 2013年

现在,我完全理解您的观点。我已经用牛顿法观察到近似平方矩阵的逆。方法的阶数增加,最初的cpu时间以及迭代次数都减少,但是随着阶数的增加,即使迭代数减少,cpu时间的开始也增加。非常感谢您的回答。
斯里兰卡

2

如果在其他答案中不清楚,那么大O参数适合什么迭代次数。

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.