我应该如何报告关于我的代码的分析/计时信息?

计算科学 表现 出版物 文件
2021-11-27 10:24:12

我在 Computational Physics 期刊中看到很多出版物使用不同的指标来衡量代码的性能。特别是对于 GPGPU 代码,人们发布的计时结果似乎多种多样。特别是,我见过:

  • 比较(基本上)time在 GPU 和 CPU 版本上运行并报告平均值
  • 比较调用的每个 GPU/CPU 函数上的分析数据(因此计时运行main和从中调用的所有函数,但忽略驱动程序初始化时间)
  • 比较几个相关功能的分析数据,忽略内存传输(在这种情况下通过 PCI-E 总线)、磁盘 I/O、将数据从一种格式转换为另一种格式等
  • 仅比较一个函数的分析数据(例如,仅比较 CPU 与 GPU Quantum Monte Carlo 中进行自旋更新的时间)并忽略内存传输时间、磁盘 I/O、设置哈密顿量/对角化等内容, 等等

我的感觉是第一个选项是四个选项中最“诚实”的,尽管我也可以看到第二个和第三个选项的优点。当 4.99s 是语言或 Infiniband 与 Gigabit 之间的 I/O 实现的差异时,报告 5s 的运行时差异有点荒谬。最后一个选项对我来说似乎有点“粗略”,因为除非这个功能是整个程序的痛点,否则报告有关它的信息不会反映有人复制我的结果会看到的性能。这些方法中哪个更直接?理想情况下,一篇论文将包含所有这些内容,但在数字/长度受到限制的情况下,哪一个是最有价值、最诚实和最相关的?

2个回答

总运行时间(挂钟)是工业或现实生活应用中唯一重要的指标:这个数字永远不应该被忽略,即使是令人尴尬的。当然这个指标非常依赖测试环境,所以应该详细描述。

如果所有其他指标提供对问题的洞察力,或者可以从中得出有趣的结论(例如对某些理论界限的验证),则可以(或应该)报告所有其他指标。

我认为这篇博文解决了这一点,尤其是最后一段。

通常情况下,人们只能报告进入一个软件的所有工作和妥协的冰山一角。报告性能很好,但真正的交易是当代码可以在互联网上免费访问时,任何有兴趣的人都可以评估和重现结果。

理想情况下,如果您发布软件,您还可以提供生成论文中提供的数据的测试。