【发布时间】:2012-02-02 14:57:45
【问题描述】:
我在 Nsight 2.1 中调试我的 CUDA 代码时遇到了一个奇怪的问题。我有两个从 main.cu 调用的 global 函数,如下所示:
dim3 block(threadsPerBlock);
dim3 grid(numBlocks);
InitPhotons<<<grid,block>>>(devicerun,sources[i],1);
cudaThreadSynchronize();
MC<<<grid,block>>>(devicerun,sources[i],1);
我可以成功地在 InitPhotons 中打断点,并单步执行该函数。但是,我只能打我在 MC 中设置的第一个断点。如果我尝试单步执行函数(VS 中的 F10),调试器的行为就像我使用了 continue 命令 (F5) 并且不再命中断点。
还有其他人遇到过这个问题吗?有人对解决方案有任何想法吗?
我在 Visual Studio 2010 Pro 中使用 Parallel NSight 2.1 和 CUDA 4.1 RC2。我正在使用 -G0 标志进行编译,并且禁用了优化。
编辑:问题似乎与代码修补内存的默认大小有关。我将 Code patching memory factor 从 2 更改为 4,一切正常(Nsight->Options->CUDA->Code patching memory factor)。
【问题讨论】: