Debugging 为什么';t调试器中断内核代码

Debugging 为什么';t调试器中断内核代码,debugging,cuda,nsight,Debugging,Cuda,Nsight,我已经在64位Ubuntu 12.04机器上安装了EclipseNSight5.0(CUDA5.0),带有两个图形卡:用于调试的GeForceGT240桌面UI和GeForceGTX480。我可以很好地编译和运行Cuda程序。但是,当我在Cuda代码中设置断点并开始调试时,光标不会停在行上,而是跳到内核函数的末尾 我在调试配置中设置了Geforce GTX 480作为调试器,并检查每个内核调用的返回值。我还能试什么?另外,我没有这台电脑的root权限。在调试器下运行时,是否会执行内核(例如,您是

我已经在64位Ubuntu 12.04机器上安装了EclipseNSight5.0(CUDA5.0),带有两个图形卡:用于调试的GeForceGT240桌面UI和GeForceGTX480。我可以很好地编译和运行Cuda程序。但是,当我在Cuda代码中设置断点并开始调试时,光标不会停在行上,而是跳到内核函数的末尾


我在调试配置中设置了Geforce GTX 480作为调试器,并检查每个内核调用的返回值。我还能试什么?另外,我没有这台电脑的root权限。

在调试器下运行时,是否会执行内核(例如,您是否看到正确的值更新)?可能是您的NVIDIA驱动程序与工具包不兼容

如果内核没有执行,很可能这是一件简单的事情,例如,编译内核的架构与调试所用的卡不兼容


内核调用后是否有cudaDeviceSynchronize?是否检查其返回值?

内核函数中不一定会命中断点。在GPU上实际执行的代码与您试图设置断点的代码明显不同,因为CUDA编译器通常执行非常激进的代码优化。是的,内核在调试器下执行,就像在程序的正常运行中一样。我在每次内核调用后调用cudaDeviceSynchronize,并检查返回值是否等于cudaSuccess。我必须检查Geforce GTX 480安装了哪个驱动程序。我在哪里可以检查哪个驱动程序与CUDA 5.0兼容?CUDA工具包需要驱动程序304.54或更新版本,尽管在一些非常罕见的情况下,最新的驱动程序可能无法与旧的工具包一起使用。您是否尝试过从shell使用cuda gdb进行调试?在内核调用后检查
cudaDeviceSynchronize
的返回值不足以捕获所有类型的启动失败。特别是,它不会捕获由于内核为不兼容的体系结构编译而导致的启动失败类型。回顾。我的Nvidia驱动程序版本是304.88。我从终端用cuda gdb调试了这个程序,我也遇到了同样的问题。例如,我调试了示例程序bitreverse,并在l.38中调用了一个断点,其中调用了一个全局函数。然后cuda gdb告诉我断点位于l.40,即全局函数调用的末尾。请尝试使用示例目录中的makefile编译并运行一些cuda示例(例如,不要将其导入Nsight)。您还可以尝试从代码中枚举设备,以查看cuda gdb隐藏了哪些图形适配器。