cudaMemcpy не может скопировать значения - PullRequest
1 голос
/ 12 августа 2010

Я звоню cudaMemcpy, и копия успешно возвращается, однако исходные значения не копируются в место назначения.Я написал похожую часть, используя memcpy (), и это прекрасно работает.Чего мне здесь не хватает?

// host externs
extern unsigned char landmask[DIMX * DIMY];

// use device constant memory for landmask
unsigned char *tempmask;
__device__ unsigned char *landmask_d;

..

void checkCUDAError(const char* msg) {
cudaError_t err = cudaGetLastError();
  if (cudaSuccess != err) {
    fprintf(stderr, "Cuda error: %s: %s.\n", msg, cudaGetErrorString(err));
    exit(EXIT_FAILURE);
  }
}

..

// try a memcpy
size_t landMemSize_t landMemSize = DIMX * DIMY * sizeof(char);
tempmask = (unsigned char*)malloc(landMemSize);
memcpy(tempmask, landmask, DIMX * DIMY);
if (landmask[0] != *tempmask) printf("FAILURE!\n");

// allocate device memory for landmask
cudaMalloc((void **)&landmask_d, landMemSize);
printf("allocating %ld Kbytes for landmask\n", landMemSize/1024);
checkCUDAError("memory allocation");

// copy landmask from host to device
cudaMemcpy(landmask_d, landmask, landMemSize, cudaMemcpyHostToDevice);
checkCUDAError("memory copy");
if (landmask[0] != *landmask_d) printf("FAILURE!\n");

Ни одна из ошибок CUDAErses не сообщает о какой-либо проблеме, но вторая ошибка НЕ ​​называется ..?

1 Ответ

3 голосов
/ 12 августа 2010
 if (landmask[0] != *landmask_d) printf("FAILURE!\n");

вы сравниваете значения в разных областях памяти.Сначала вы должны скопировать память с устройства на процессор, а затем сравнить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...