如何评估CUDA性能?

bon*_*kim 5 performance cuda

我自己编写了CUDA内核.与CPU代码相比,我的内核代码比CPU快10倍.

但我对我的实验有疑问.

我的程序是否完全使用所有GPU内核,适当的共享内存使用,足够的寄存器数量,足够的占用率进行优化?

如何评估内核代码的性能?

如何从理论上计算出CUDA的最大吞吐量?

我是对的比较CPU的GFLOPS和GPU的GFLOPS和GFLOPS率之间的透明理论性能吗?

提前致谢.

Rog*_*ahl 5

我的程序是否完全使用所有GPU内核,适当的共享内存使用,足够的寄存器数量,足够的占用率进行优化?

要找到它,请使用其中一个CUDA分析器.了解如何配置和优化CUDA内核?

如何从理论上计算出CUDA的最大吞吐量?

这个数学有点牵扯,每个架构都有所不同,容易出错.最好查看芯片规格中的数字.对于GTX500卡,维基百科上有表格,例如表.例如,您可以从表中看到GTX580的理论峰值带宽为192.4GB/s,计算吞吐量为1581.1GFLOP.

我是对的比较CPU的GFLOPS和GPU的GFLOPS和GFLOPS率之间的透明理论性能吗?

如果我理解正确的话,你问的是GPU上的理论峰值GFLOP数量是否可以直接与CPU上的相应数字进行比较.比较这些数字时需要考虑一些事项:

  • 较旧的GPU不支持双精度(DP)浮点,仅支持单精度(SP).

  • 与SP相比,支持DP的GPU会显着降低性能.我上面引用的GFLOP数字是SP.另一方面,CPU引用的数字通常用于DP,并且CPU上SP和DP的性能差异较小.

  • CPU引用可以是仅在使用SIMD(单指令,多数据)矢量化指令时可实现的速率,并且通常很难编写可以接近理论最大值的算法(并且它们可能必须在汇编中写入).有时,CPU引用是通过不同类型的指令可用的所有计算资源的组合,并且通常几乎不可能编写可以同时利用它们的程序.

  • GPU引用的速率假设您有足够的并行工作来使GPU饱和,并且您的算法不受带宽限制.

  • 您无法以GHz为单位测量性能.要找到理论性能,您必须了解CPU/GPU在每个时钟周期中可以执行的操作.我之前提到的考虑因素会影响您可以获得的性能.例如,如果您正在查看英特尔Sandy Bridge的性能,则必须考虑到它有一个名为AVX的指令集,每个指令可以执行8个SP操作. (3认同)