可以使用cudaMemcpy3D在单个cudaArray中移动数据部分吗?

时间:2012-06-01 17:57:23

标签: cuda gpu-programming

我想在CUDA中为卷纹理实现移位操作。我想到了一个实现,它执行memcpy操作的几次迭代,将cudaArray中的数据从一个位置移动到另一个位置。
我做错了什么,因为我总是得到无效的参数错误?这是我正在做的草图:

/* My volume texture */
cudaArray* g_pVolumeTexture // its size is 256^3 voxels of type uchar2

...

cudaMemcpy3DParms prms;
prms.srcArray = g_pVolumeTexture;
prms.dstArray = g_pVolumeTexture; // src = dst, because I wanna rather shift than
                                  // copy

prms.extent = make_cudaExtent(24, 256, 256);
prms.srcPos = make_cudaPos(0, 0, 0);
prms.dstPos = make_cudaPos(48, 0, 0); // this will mean a move of 48 voxels in
                                      // x-direction; the piece of data moved
                                      // measures 24 voxels in x-direction

cudaMemcpy3D(&prms);

// Here cudaGetLastError always returns 'invalid argument error'

1 个答案:

答案 0 :(得分:0)

答案是肯定的:可以使用与dstArray相同的srcArray的Memcpy3D命令。我遇到的问题是由于cudaMemcpy3DParms的初始重置不存在而导致:

cudaMemcpy3DParms p = {0};