我对CUDA视觉分析器和占用电子表格有点熟悉,虽然我可能没有尽可能地利用它们。剖析&优化CUDA代码不像分析和优化在CPU上运行的代码。所以我希望从您的经验中学习如何充分利用我的代码。
最近有一篇帖子正在寻找最快的代码来识别self numbers,我提供了CUDA implementation。我不满意这段代码尽可能快,但我不知道要找出正确的问题是什么,以及我可以从哪个工具中得到答案。
如何确定使CUDA内核执行速度更快的方法?
答案 0 :(得分:21)
如果您正在Linux上进行开发,那么CUDA Visual Profiler会为您提供大量信息,知道如何处理它可能有点棘手。在Windows上,您还可以使用CUDA Visual Profiler,或者(在Vista / 7/2008上),您可以使用与Visual Studio很好地集成的Nexus,并为您提供组合的主机和GPU配置文件信息。
获得数据后,您需要知道如何解释数据。来自GTC的Advanced CUDA C演示文稿提供了一些有用的提示。需要注意的主要事项是:
这只是一个开始,请查看GTC演示文稿以及NVIDIA网站上的其他网络研讨会。
答案 1 :(得分:0)
CUDA分析器相当粗糙,并没有提供很多有用的信息。认真微优化代码的唯一方法(假设您已经选择了最佳算法)是深入了解GPU架构,特别是在使用共享内存,外部内存访问模式,寄存器使用,线程占用方面,经线等
也许你可以在这里发布你的内核代码并得到一些反馈?
nVidia CUDA developer forum论坛也是寻求这类问题帮助的好地方。
答案 2 :(得分:0)
如果您使用的是Windows ...请检查Nexus:
答案 3 :(得分:0)
我回来了,因为我不是CUDA专家,如果代码已经非常接近最佳,其他答案也相当不错。根据我的经验,这是一个很大的IF,并且在验证它时没有任何害处。
要验证它,您需要确定代码是否确实没有做任何它不需要做的事情。我可以通过以下方式验证:
在vanilla处理器上运行相同的代码,然后取stackshots,或者使用Oprofile或RotateRight / Zoom等分析器,它们可以为您提供相同的信息。
在CUDA处理器上运行,并尽可能做同样的事情。
您正在寻找的是在调用堆栈上具有高占用率的代码行,如包含它们的堆栈样本的分数所示。那些是你的“瓶颈”。它不需要大量的样本来定位它们。