我的CUDA代码在调试模式下生成正确的结果。但是,在发布模式下,相同的代码会产生垃圾结果。调试和发布模式之间线程之间的同步是否会有不同的行为?
答案 0 :(得分:2)
使用-O0生成的代码导致代码不太理想,并且显着更多的全局和本地内存访问可能会隐藏竞争条件。如果您认为共享内存中可能存在竞争条件,则可以尝试使用支持某些形式的竞争条件检测的新CUDA 5.0预览内存检查程序。最好的办法是查找在两个线程之间共享内存的任何位置,并确定是否缺少同步线程的线程围栏。
答案 1 :(得分:1)
我想,你遇到了竞争条件问题。您可以重新组织代码并在需要的地方添加同步。在调试模式下,您的线程通常按顺序执行,但您无法解决此问题。