核函数相互影响

有个两个kernel先后执行比如kernel1、kernel2,如果注释掉kernel2,kernel1会正常工作,如果不注释就会提示launch failed。这两个核函数怎么会相互影响了?好奇怪。。这个最有可能是什么原因?谢谢

楼主毫无代码,让人猜测,相当不好。
虽然如此,依然尽量为您假设情况,进行解答:

如果您的代码形式如:
kernel1<<<>>>();
//kernel2<<<>>>();
cudaError_t r = cudaDeviceSynchronize();(或者cudaMemcpy等)

在您注释了kernel2后, r变成cudaSuccess, 那么这个是正常的,因为完全可能是启动kernel2的那句的问题。此时请您检查第二次启动。

但如果是:
kernel1<<<>>>();
cudaError_t r1 = cudaDeviceSynchronize();(或者cudaMemcpy等)
//kernel2<<<>>>();

如果此时注释kernel2将导致前面的kernel1的执行结果r1出现变化,那么您在调侃我们。(因为这违背了基本的因果规律)

感谢来访。

谢谢斑竹。。我用cudaError_t r = cudaDeviceSynchronize()这种形式去检查了。。应该是kernel1的错误,但是这有点奇怪的是他有时候返回值是0(cudaSuccess:The API call returned with no errors. In the case of query calls, this can also mean that the operation being queried is complete ),有时候返回值是30(cudaErrorUnknown:This indicates that an unknown internal error has occurred)。感觉这个怎么这么奇怪。。又是对有时候又不对。。这个一般是什么问题呢?谢谢

要不你把核函数贴出来看看吧,30err的可能性还是很多的

而且又遇到这个问题了http://cudazone.nvidia.cn/forum/forum.php?mod=viewthread&tid=7232,这次重启不行了。。怎么这么奇怪的问题啊。。而且这个时候显示结果应该是对的。。即为 cudasuccess。

代码有点多啊。。关键是他有时候对有时候不对。。。o(╯□╰)o。。我在调试一下,不行晚上把代码贴上来。。

LZ您好:

应该还是您的代码有问题,请您仔细检查,以及请优先检查一下访存越界。

祝您调试顺利~

嗯。。谢谢斑竹提醒。。果然是代码出问题了。。也是出界的问题。。一个比较低级的错误,把gridDim.x写成blockIdx.x了。。检查了好久。。o(╯□╰)o

LZ您好:

恭喜您发现并解决一个问题。

但是如果只有这个问题的话,如果每次调用kernel的线程的形状相同,那么应该是一个确定性的错误(除非您程序中还有其他随机因素)。而您的程序表现出来的是随机性出错,那么不妨再检查下有没有其他的问题。

祝您好运~