什么是比较代码算法/片段最正确(最好)的方法?

时间:2012-11-08 14:10:49

标签: c++ algorithm time

我编写了一个C ++代码来计算太阳辐射的反射(基于光线追踪原理)。 我已经加入了许多加速技术。 在我的写作中,我必须证明这些算法的合理性。我原本打算从时间基础上做到这一点,但@ weberc2 HERE的评论让人相信这不是最好的解决方案。

我查看了代码分析软件,如Very sleepyAMD Code Analyst,这有助于识别瓶颈等。

由于主管的编程知识可能非常差,基于 time 的分析似乎最合乎逻辑......

e.g “运行Grid有效的相同场景,计算准确度提高20%,时间仅减少2秒......”

这是一个单线程程序。 使用时间真的那么危险吗? 有什么建议。 谢谢大家

2 个答案:

答案 0 :(得分:2)

我不同意。比较时间非常好 - 但有限制。

一次运行什么也没说。这就是我们 statistical tools 和测试显示A is distinct then B的原因。

在几个测试用例和各种条件下运行一系列测试。将数据(运行时间)存储在两个不同的列表中,然后运行统计测试以显示一个优于另一个

统计测试中的“答案”是P-Value。 P值表示“你错的概率是多少”。例如,如果您有一组测试,则运行statisitcal测试并找到P_Value = 0.01。这意味着概率为99% - 两个样本是不同的,你可以得出结论,平均值越低越好。

统计测试的事实标准(至少在我的领域)是 Wilcoxon Paired Signed Test


P.S。统计测试将“证明”测试条件的假设,例如 - 如果你在AMD CPU上运行,它没有说明英特尔CPU会发生什么(可能指令集使“更差”显着更好在它)。

然而,请注意,它在人工智能和信息检索等领域的文章中是非常可接受和广泛使用的。

答案 1 :(得分:0)

是否“新版本在旧版本的50%时间内运行,p = 0.99”意味着主管的任何内容都取决于主管对业务算法重要性的了解。在许多情况下,对一个函数的度量进行统计分析对于程序员进行改进是一个非常有用的工具,但对管理来说毫无意义。

据推测,这段代码正在优化,因为对业务至关重要的事情将通过加快速度来改善。通常,这是在向主管报告结果时应该讨论的内容:“由于这种变化,事务X的典型情况将平均在6秒而不是10秒内完成”,“使用此版本我们可以获得两次运行工作模拟在一个工作日而不是只有一个“。

如果您根据主管关心的业务目标进行考虑,那么在优化过程中要进行的特定类型的时间测量(挂钟或总CPU或用户CPU或内存占用)通常是显而易见的。