Copiando da memória 3D cuda para a memória linear: os dados copiados não são onde eu esperava

Aqui está o meu problema:

Eu tenho uma matriz 3D defloat3 no meu dispositivo:

int size[3] = {416,464,512};
cudaExtent extent = make_cudaExtent(size[0]*sizeof(float3),size[1],size[2]);
cudaPitchedPtr renderedVolume;
int ret = cudaMalloc3D(&renderedVolume, extent);
size_t pitch = renderedVolume.pitch; //pitch = 5,120
size_t slicePitch = pitch * size[1]; //slicePitch = 2,375,680

Então eu trabalho com isso e faço com que ele fique cheio de dados incríveis.

Depois disso, eu gostaria de copiá-lo em uma memória linear 1D no meu host:

float *host_memory = (float*)malloc(size[0]*size[1]*size[2]*sizeof(float3));
cudaMemcpy3DParms p = {0};
p.srcPtr = renderedVolume;
p.dstPtr = make_cudaPitchedPtr(host_memory,size[0]*sizeof(float3),size[0],size[1]); 
p.extent = make_cudaExtent(size[0]*sizeof(float3),size[1],size[2]);
p.srcPos = make_cudaPos(0,0,0);
p.dstPos = make_cudaPos(0,0,0);
p.kind=cudaMemcpyDeviceToHost;
cudaMemcpy3D(&p);

Eu estou comparando o resultado em host_memory com os dados que eu escrevi inicialmente turenderedVolume (my_data) e com os dados que li no meu3Dmemoryfatia por fatia:

float* test1 = (float*)malloc(size[0]*size[1]*sizeof(float3));
cudaMemcpy(test1, myData, size[0]*size[1]*sizeof(float3) , cudaMemcpyDeviceToHost);
float* test2 = (float*)malloc(size[0]*size[1]*sizeof(float3));
cudaMemcpy(test2,(char*)renderedVolume.ptr + slicePitch * i,size[0]*size[1]*sizeof(float3), cudaMemcpyDeviceToHost);

Problema:

A primeira fatia (i=0) está ok, eu tenho os mesmos dados em host_memory,test1 etest2.Na segunda fatia, eu tenho os mesmos dados emtest1 etest2. No entanto, devo encontrar esses dados emhost_memory+579072 (= número defloat por fatia, tambémheigth*pitch do destino apontado ponteiro) e eu acho que emhost_memory+577504. Está fora por1568 bytes, o que corresponde a nada que eu conheço, e é por isso que eu aprecio muito se algum de vocês tem uma idéia do que o problema pode estar no meu código?

questionAnswers(1)

yourAnswerToTheQuestion