2

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

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

4

2 回答 2

2

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

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

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

确保您不是在调试版本上测量性能,也不是在调试器中运行。调试会增加开销。

确保您的工作样本足够大,使其明显高于“本底噪声”。与以毫秒为单位的测试运行相比,需要几秒钟才能完成的测试运行将测量更多的功能和更少的环境噪声。您总是可以将工作单元除以测试执行时间来得出一个性感的“每纳秒单位”数字,但实际上您并没有这样测量它。

于 2012-09-25T16:11:39.020 回答
0

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

于 2012-09-25T16:56:17.040 回答