2012-06-01 2 views
0

CUDA에서 볼륨 텍스처의 이동 작업을 구현하려고합니다. 하나의 위치에서 다른 위치로 데이터를 이동시키는 memcpy 연산의 여러 반복을 수행하는 구현을 생각했습니다.
잘못된 인수 오류가 항상 발생하기 때문에 내가 뭘 잘못하고 있니?cudaMemcpy3D를 사용하여 단일 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' 
+2

시도'cudaMemcpy3DParms의 PRM이 = 0' : 내가 직면 한 문제와 cudaMemcpy3DParms의 초기 리셋의 nonexistance 때문 나타났다. 이것은 API 문서에 명시 적으로 명시되어 있습니다. – talonmies

+0

내 문제를 해결 한 의견에 감사드립니다! – morph

답변

0

대답은 '예 : dstArray 같은 srcArray으로 Memcpy3D 명령을 사용할 수 있습니다 여기에 내가 뭐하는 거지의 스케치입니다. - 그들에 임의 값을 사용하면 아마 초기화되지 않은 한 인수

cudaMemcpy3DParms p = {0};