您如何描述和优化CUDA内核?

Joh*_*ing 16 optimization profiling cuda

我对CUDA视觉分析器和占用电子表格有点熟悉,尽管我可能没有尽可能地利用它们.分析和优化CUDA代码与分析和优化在CPU上运行的代码不同.所以我希望从您的经验中学习如何充分利用我的代码.

最近有一篇文章寻找最快的代码来识别自己的数字,我提供了一个CUDA实现.我不满意这段代码尽可能快,但是我不知道要找出正确的问题是什么以及我能从哪些工具中得到答案.

您如何确定使CUDA内核执行速度更快的方法?

Tom*_*Tom 21

如果您在Linux上进行开发,那么CUDA Visual Profiler会为您提供大量信息,知道如何处理它可能有点棘手.在Windows上,您还可以使用CUDA Visual Profiler,或者(在Vista/7/2008上),您可以使用与Visual Studio很好地集成的Nexus,并为您提供组合的主机和GPU配置文件信息.

获得数据后,您需要知道如何解释它.GTC 的高级CUDA C演示文稿提供了一些有用的提示.需要注意的主要事项是:

  • 最佳内存访问:您需要知道您希望代码执行的操作,然后查找异常.因此,如果您总是加载浮点数,并且每个线程从数组加载不同的浮点数,那么您可能只会看到64字节的加载(在当前的h/w上).任何其他负载都是低效的.分析信息可能会在未来的h/w中得到改善.
  • 最小化序列化:"warp serialize"计数器表示您有共享内存库冲突或持续序列化,演示文稿详细介绍了如何做以及如何处理SDK(例如缩减示例)
  • 重叠I/O和计算:这是Nexus真正发光的地方(您可以使用cudaEvents手动获取相同的信息),如果您有大量数据传输需要重叠计算和I/O
  • 执行配置:占用计算器可以帮助解决这个问题,但是评估计算以测量预期带宽和测量带宽等简单方法非常有用(反之亦然,计算吞吐量)

这只是一个开始,查看GTC演示文稿和NVIDIA网站上的其他网络研讨会.

  • 这与我以前联系过的一样!http://www.nvidia.com/content/GTC/videos/GTC09-1086.flv http://www.nvidia.com/content/GTC/videos/GTC09-1086.mp4 (2认同)