我在 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 的运行时差异有点荒谬。最后一个选项对我来说似乎有点“粗略”,因为除非这个功能是整个程序的痛点,否则报告有关它的信息不会反映有人复制我的结果会看到的性能。这些方法中哪个更直接?理想情况下,一篇论文将包含所有这些内容,但在数字/长度受到限制的情况下,哪一个是最有价值、最诚实和最相关的?