我有点熟悉的CUDA视觉探查和占用电子表格,虽然我可能不充分利用它们,以及我可以。分析&优化CUDA码不是喜欢分析&优化运行的代码,在CPU。因此,我希望能够学习自己的经验关于如何获得最大的是我的代码。

有一个员额,最近在寻找尽可能最快的识别代码 自号码, 和我提供了一个 CUDA执行情况.我不感到满意的是,这代码是一样快,因为它可以,但是我在失去作为图找出这两个是什么的正确的问题是什么工具,我可以得到的答案。

你怎么确定以何种方式让你CUDA核的执行速度更快?

有帮助吗?

解决方案

如果你在发展中Linux上然后CUDA些Profiler给你一个整体加载的信息,知道要做什么与它可能有点棘手。在窗户也可以使用的CUDA些分析器,或(在Vista/7/2008年)可以使用的联系,这很好地集成与Visual Studio和给你联合主和GPU资料信息。

一旦你们拿到了数据,你需要知道如何解释它。的 高级CUDA C 介绍GTC有一些有用的技巧。主要寻找的东西是:

  • 最佳的存储器访问:你需要知道什么是你希望你的代码然后看的例外情况。所以如果你总是装载漂浮,每个螺纹加载不同的漂浮阵列,然后你会希望看到只有64个字节的荷载(在目前的h/w)。任何其它负荷是效率低下。分析的信息可能会提高在未来h/w。
  • 尽量减少化:将"经serialize"计数指示,你已经共享内存的银行冲突或常化,演变成更多的细节和如何应对这样的SDK(例如减少样)
  • 重叠I/O和计算:这是其中关系的真正的亮点(你可以获得同样的信息手动使用cudaEvents),如果你有大量的数据传输你想重叠的计算和I/O
  • 执行配置:占用计算器,以帮助这一点,但简单的方法,如发表评论的计算衡量预期与测量带宽是真正有用的(反之亦然吞吐量计算)

这只是一个开始,检查了GTC文稿及其他研讨会上选网站。

其他提示

CUDA profiler是相当粗和不提供大量有用的信息。唯一的方式认真的微优化你的代码(假设你已经选择尽可能最好的算法)是具有深刻的理解GPU架构,特别是关于使用共享存储器、外部存储器访问的模式,登记册使用情况,线占用,扭曲,等等。

也许你可以您的仁码在这里并得到一些反馈意见吗?

更CUDA开发人员论坛 论坛也是一个很好的地方去为帮助这样的问题。

如果您使用的Windows...检查Nexus:

http://developer.nvidia.com/object/nexus.html

我回来是因为我没有CUDA专家,和其他的答案是很好的,如果代码是已经很接近最佳的。以我的经验,这是一个很大的,如果,并没有害处在核实。

验证它,你需要找出如果代码确实没有做任何事情,它并没有真正必须做的。这种方式我可以看到验证:

  • 运行同样的代码,在香草处理,并且无论采取哪种 stackshots 它,或者使用一个探查如它或RotateRight/缩小,可以给你的等同信息。

  • 运行在CUDA处理器,并做同样的事情,如果可能的话。

你在寻找什么都行代码具有较高的占用对话,通过分的堆样品中包含它们。这些都是你的"瓶颈".它不需要很大的样本数量以找到他们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top