CUDA核函数没有执行,或者延迟执行

我在一个cpp文件的main函数中调用一个在cu文件中的函数fun();
fun()函数调用核函数kernel();
编译运行多没问题,可就是没有执行核函数kernel
有个时候单步运行,却能看到kernel函数中的打印信息。
请问这是为什么????

LZ您好:

您是如何判断您的kernel函数没有执行呢?
请给出您的代码和其他相关信息。

祝您好运~

我kernel函数很简单,就用了一个block 和一个thread
main函数中循环调用函数func() ,函数func调用核函数kernel
kernel函数中有
if(threadIdx.x==0)
printf(" CUDA!!!\n");
可运行后,只出来了一次"CUDA!!!"
后面循环调用时,就没有出现了.
我对CUDA SDK里面的例子 simple texture 想用Parallel Nsight 进行断点调试
可添加完断点,执行Parallel Nsight 的Start CUDA debugging 并没有在断点处停,而是运行处结果了,这又是为什么啊?

我kernel函数很简单,就用了一个block 和一个thread
main函数中循环调用函数func() ,函数func调用核函数kernel
kernel函数中有
if(threadIdx.x==0)
printf(" CUDA!!!\n");
可运行后,只出来了一次"CUDA!!!"
后面循环调用时,就没有出现了.
我对CUDA SDK里面的例子 simple texture 想用Parallel Nsight 进行断点调试
可添加完断点,执行Parallel Nsight 的Start CUDA debugging 并没有在断点处停,而是运行处结果了,这又是为什么啊?

LZ您好:

请您在您的程序末尾return之前加上cudaDeviceReset(),可保证kernel中的printf内容正常输出。

nsight只能调试kernel部分的代码,您的断点是kernel或者__device__函数中的么?如果是host端代码处设置的断点,请使用VS常规的调试方式。

大致如此,祝您好运~

嗯 我的断点是设置在了kernel函数中

ICE的建议你看了么?
你试验了么?
试验下吧。

这样无视ICE会让他的心融化的。

至于断点和start cuda debugging, 请问您是否忘记了添加-G选项呢?

哈哈,我代码在实验室,明天再去debug
在windows环境下? parallel Nsight还要设置-G 选项么?
我是入门菜鸟,请指教

嗯嗯。欢迎尝试。

第二个反问建议您重新看下7#,
或者您可以尝试添加-jackyi选项,也许会起到和-G同样的效果。

[attach]3283[/attach]请问,您指的设置是不是这个啊?-G

。。。。。这个是贵程序启动时候的参数,而不是编译器编译它的参数。

请您这样做:
(1)右键点击您的.cu文件,
(2)选择CUDA C/C++ → Device
(3)目光移动到“generate GPU debug information", 改成YES (-G)
(4)然后rebuild all贵项目

这样您就可以调试了。

斑竹您好,
听了您的建议,在程序末尾return之前加上了cudaDeviceReset()
这回printf内容正常输出了。
但是其他语句并没有执行,请问这是为什么啊?

LZ您好:

请您给出您的较完整的代码,以及您的详细运行/出错信息,以支持您“printf正常执行了,但是其他语句没有执行”的论断,而不是像您这样什么信息都没有,来一句“但是其他语句并没有执行,请问这是为什么啊?”,我无法猜出您的程序有什么问题。

祝您好运~

自己解决了!哈哈
谢谢斑竹!!!!
现在有个问题就是在cu文件上没法设置断点,不知道为什么

自己解决了!哈哈
谢谢斑竹!!!!
现在有个问题就是在cu文件上没法设置断点,不知道为什么

关于在kernel设置断点的-G参数在哪里设置等问题,我已经连续回答你多个楼层了,反复被无视。

你可以回头看下11#。
如果你不看,仍然继续发帖询问的话,您的继续询问的帖子将被删除。

不好意思,我可能没能说明白,我确实是按照您说的方法去做了。
我自己也再研究研究吧,真没有无视斑竹的指导!!刚入门,找门道有点儿费劲。
再次谢谢斑竹了

我看到你的10#的错误加-G操作了,我另外详细阐述了正确的,在11#(你后面),你看下吧。

根据你之后楼层的言行,你从来都没尝试过。。。真的。

请尝试11#, 并rebuild + 下断点看看效果。

斑竹 11#那个方法我也尝试过了
也还是不好使 但是程序能正常运行处结果,我暂时也没关管它了
现在我重新新建了一个cu文件,然后再rebuild后就可以加断点了
:lol