我正在調用cudaMemcpy,並且複製成功返回,但是源值未被複制到目標。我用memcpy()寫了一個類似的作品,並且工作正常。我在這裏錯過了什麼?cudaMemcpy無法複製值
// 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");
的CUDAErrors沒有報告任何問題,但第二次失敗叫..?
擺脫「__device__」 – Anycorn 2010-08-12 02:07:00