Synchronize: launch_closure_by_value:遇到非法内存访问



如下面的代码所示,我创建了一个大向量X,并通过cpy_cpy操作符将其内容复制到Y。当X的长度小于65536时,它可以正常运行,但是当X大于65536时,它就会崩溃。错误信息是:

synchronize: launch_closure_by_value: an illegal memory access was encountered.

我在Nvidia GTX 680卡上使用CUDA 6.0。

有谁能帮我一下吗?很多谢谢!
const int num = 256*512; //256*512 crashes but 128*512 is okay!
uchar3* x_raw_ptr, y_raw_ptr;
cudaMalloc((void **) &x_raw_ptr, num * sizeof(uchar3));
cudaMalloc((void **) &y_raw_ptr, num * sizeof(uchar3));
thrust::device_ptr<uchar3> X_p( x_raw_ptr ); 
thrust::device_ptr<uchar3> Y_p( y_raw_ptr ); 
thrust::transform(X_p, X_p + num*sizeof(uchar3), thrust::make_counting_iterator(0),  Y_p, cpy_cpy );

我自己找出了错误的原因。

X_p + num*sizeof(uchar3) -> X_p + num 

那么现在一切看起来都好了。推力的例子如下:http://thrust.github.io/doc/group__transformations.html gacbd546527729f24f27dc44e34a5b8f73

最新更新