报告CUDA加速的正确方法

时间:2012-09-25 16:01:22

标签: cuda

我想比较在CPU上运行的串行程序和在GPU上运行的CUDA程序的性能。但我不确定如何公平地比较性能。例如,如果我将旧CPU的性能与新GPU进行比较,那么我将获得巨大的加速。

另一个问题:如何将我的CUDA程序与论文中报告的另一个CUDA程序进行比较(两者都在不同的GPU上运行,我无法访问源代码)。

2 个答案:

答案 0 :(得分:2)

为了公平起见,您应该包括数据传输时间以将数据输入和输出GPU。写一个超快的CUDA功能并不难。真正的诀窍在于弄清楚如何保持数据传输,或者如何通过将数据传输与其他必要的工作重叠来隐藏数据传输的成本。除非您的例行程序是100%计算限制的,否则在每个单位时间内完成的工作单元中的数据传输对于理解您的实现将如何处理(例如,更多的工作单元)至关重要。

对于跨设备比较,报告每个处理器核心每单位时间执行的工作单元可能很有用。每处理器核心将有助于规范化200核心和2000核心CUDA设备之间的巨大差异。

如果您正在谈论您的算法(而不仅仅是输出),那么描述如何解决并行执行问题(例如块/线程分布)是很有用的。

确保您没有在调试版本上测量性能,或者在调试器中运行。调试增加了开销。

确保您的工作样本足够大,远远高于“本底噪声”。测试运行需要几秒钟才能完成,与测试运行完成相比,测试运行的环境噪声要少于几毫秒。你总是可以按照测试执行时间划分工作单位,以达到性感的“每纳秒单位”数字,但你实际上并没有这样测量。

答案 1 :(得分:0)

cuda程序在不同GPU上的速度取决于GPU的许多因素,如内存带宽,核心时钟速度,内核,线程/寄存器数/可用共享内存。所以很难比较不同GPU的性能