如下面的代码所示,我创建了一个大型向量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 );
答案 0 :(得分:0)
我自己找出错误的原因。
X_p + num*sizeof(uchar3) -> X_p + num
然后现在一切都好看。 这里有一些例子: http://thrust.github.io/doc/group__transformations.html#gacbd546527729f24f27dc44e34a5b8f73