2

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

我看过代码分析软件,比如 非常困AMD 代码分析师,它有助于识别瓶颈等。

由于主管的编程知识可能很差,因此基于时间的分析似乎是最合乎逻辑的......

例如“运行相同的场景,Grid主动提高了 20% 的计算精度,而时间只有 2 秒的惩罚......”

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

4

2 回答 2

2

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

单次运行说明不了什么。这就是为什么我们有统计工具和测试来展示A is distinct then B

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

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

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


PS 统计测试将“证明”其测试条件的假设,例如 - 如果您在 AMD CPU 上运行它,它不会说明 Intel CPU 上会发生什么(也许指令集会使“更糟”显着更好)。

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

于 2012-11-08T14:21:23.693 回答
0

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

据推测,这段代码正在被优化,因为对业务很重要的东西将通过使其更快得到改进。通常,这就是在向主管报告结果时应该讨论的内容:“由于这种变化,事务 X 的典型案例将在平均 6 秒而不是 10 秒内完成”,“使用这个版本,我们可以运行两次我们的在一个工作日内完成工程模拟,而不是一个工作日”。

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

于 2012-11-08T15:37:20.097 回答