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

时间:2014-07-06 21:04:46

标签: thrust

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

synchronize: launch_closure_by_value: an illegal memory access was encountered.

我在Nvidia GTX 680卡上使用CUDA v6.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 );

1 个答案:

答案 0 :(得分:0)

我自己找出错误的原因。

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

然后现在一切都好看。 这里有一些例子: http://thrust.github.io/doc/group__transformations.html#gacbd546527729f24f27dc44e34a5b8f73