最近两个月,我都在改一个CPU程序到GPU,也使用了printf(加了cudaDeviceReset()),但有时屏幕有输出,有时没有。同时再不做任何代码改变时,输出的结果(设备端数组传到主机端)也千变万化。已经让人抓狂了。。。
就查了下有人使用 nVidia Parallel Nsight 软件包来调试,但最新的包也是去年4月的,不知道用 nVidia Parallel Nsight 软件包来调试内核吗?有的话,是用的哪个版本?
谢谢!
楼主您好:
(1)您的printf需要在kernel安全的结束后方可看到。我建议您在程序末尾加上此2句:
cudaDeviceSynchronize();
cudaDeviceReset();
这样一般是可以观察到的输出的。
(2)最新的nsight是上个月在被坛的“资源下载”板块(版主MUST)上有的。
(3)是的,您可以用nsight调试的,“资源下载板块”的最新版本是nsight visual studio editon 3.0。
不客气。
LZ您好,因为warp之间一般是乱序的,所以如果您的输出较多的话,可能因为乱序致使看起来千变万化杂乱无章。
当然也可能是其他原因。
关于nsight,目前正式版最新的是nsight 2.2,也有nsight 3.0的版本可以用,但不是正式版。您可以注册开发者ID之后去NV美国官网下载,也可以就近在本论坛的资源版找到。
祝您编码顺利。
谢谢!
我在编码过程中,经常遇到“做了改动,回退到改动前,计算结果和改动前的不同”的情况。请问怎么回事?
LZ您好,您说的这个情况,我也不清楚是为何。
当您撤销了对代码的编辑操作后,在重新启动调试前,我建议您执行一次build.
有的时候(例如你选择了调试而不构建), 或者直接用nsight开始调试,您的目标代码可能和您的源代码不一致的。选择构建是安全的操作方式。
此外,如果您需要自动执行此步骤,您可以在
调试->选项->项目和解决方案->构建和运行中
选择“当运行时,构建结果已经过时"的处理方式为:
“总是构建”。
这样您总是可以调试您当前的代码。