CUDA发布模式和调试模式之间的运行时差异

时间:2015-07-27 16:42:59

标签: visual-studio-2013 cuda nvcc

我正在运行Visual Studio 2013。 我正在运行CUDA 7.0.28

我可以通过选中或取消选中CUDA选项来切换运行时差异:

  

生成GPU调试信息。

我使用<<<<<>>>运行设备内核并且即使在那时也会发生错误。

我的问题是:

  1. 为什么它会在发布和调试模式下给我不同的结果?
  2. 我应该寻找什么样的东西来试图找出原因。
  3. 有没有办法在内核函数中断点?它似乎不是这样。除了制作printf语句之外,我还能用其他方法来追查问题吗?
  4. 谢谢。

1 个答案:

答案 0 :(得分:2)

  

为什么它会在发布和调试模式下给我不同的结果?

在引擎盖下,CUDA C / C ++源代码生成的机器代码在调试模式下看起来会有很大不同。这里的差异列表太长了,但大多数情况下它们都是通过在调试模式下关闭所有编译器优化来汇总的。例如,这可能会导致竞争条件,这些竞争条件在调试中很明显,但在发布时却没有,反之亦然。

  

我应该寻找什么样的东西来试图找出发生这种情况的原因。

我会从最简单的工具开始。首先使用cuda-memcheck确认内核正在运行而不会产生基本错误。如果cuda-memcheck报告您的内核出现故障,请按照here方法将故障隔离到单行源代码中。在修复cuda-memcheck以这种方式报告的任何错误之后,使用包括racecheck,synccheck和initcheck在内的cuda-memcheck subtool options来查看是否存在任何问题。

  

有没有办法在内核函数中断点?

是的,在Windows和Linux上都有可用的调试器。在Windows上,调试器已集成到Visual Studio中。有documentation available,演练,甚至YouTube视频演示了如何执行各种操作,例如设置断点。但是,在使用cuda-memcheck之前,我不会走这条路。