我自己编写了CUDA内核.与CPU代码相比,我的内核代码比CPU快10倍.
但我对我的实验有疑问.
我的程序是否完全使用所有GPU内核,适当的共享内存使用,足够的寄存器数量,足够的占用率进行优化?
如何评估内核代码的性能?
如何从理论上计算出CUDA的最大吞吐量?
我是对的比较CPU的GFLOPS和GPU的GFLOPS和GFLOPS率之间的透明理论性能吗?
提前致谢.
我的程序是否完全使用所有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饱和,并且您的算法不受带宽限制.