我在 Nsight 2.1 中调试我的 CUDA 代码时遇到了一个奇怪的问题。我有两个从 main.cu 调用的全局函数,如下所示:
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 标志进行编译,并且禁用了优化。
编辑:问题似乎与代码修补内存的默认大小有关。我将代码修补内存因子从 2 更改为 4,一切正常(Nsight->Options->CUDA->代码修补内存因子)。