589
社区成员




前段时间因为工作需要写了一个png图片处理的功能,由于需要逐像素的处理,所有上了cuda。之前运行一直都是正常的,处理过的最大图像最大差不多是8k。今天突然接到反馈说图像处理失败了,排查了一下午,结果发现问题本身非常奇怪。
总体而言就是只对特定数据量的图片有问题,目前出问题的图片像素大小都是1536*2048的整数倍,除了原始的这个尺寸外,3072*1024,3072*4096都会出问题,而其他的比如1500*2000,1535*2048,1536*2000等尺寸都不会有问题。
这里是写的测试函数,21.png是一张3072*1024的图片
这个是调用的核函数
检查发现出错的地方是result2那里,cudaMemcpy拷贝失败,这里返回错误码是700,对应的错误是
/**
* The device encountered a load or store instruction on an invalid memory address.
* This leaves the process in an inconsistent state and any further CUDA work
* will return the same error. To continue using CUDA, the process must be terminated
* and relaunched.
*/
cudaErrorIllegalAddress = 700。
检查核函数,只要访问dataIn里的内容,就会出现上述错误,即使不对内容做任何操作(比如给t1赋值就无法正常拷贝,去掉这句就正常)。而且这个错误只发生在上述所说的对应尺寸图片上。
另外还有个诡异的地方在于,当我想用Nsight调试时,启动next-gen调试模式吧,这个问题就不会出现,图片就能正常被处理。
哪位大佬能给出个解释,这情况实在有点摸不着头脑。