我正在用C#编写的旧程序更改代码,以使Cuda更高效。 我的问题是我必须使用cuMemCpy2D复制一个具有两个维度的数组,从设备到主机,但我不知道此函数所需的正确参数。 这是我遇到问题的代码:
这里我初始化音高大小,一行数组的大小和数组:
size_t size_media_pitch;
size_t size_media = NUMKS*sizeof(double);
double *h_media;
h_media = (double *)malloc(2 * size_media);
这里我将设备指针初始化为数组,为它保留内存并调用内核函数:
CUdeviceptr d_media;
error = cuMemAllocPitch(&d_media, &size_media_pitch, NUMKS*sizeof(double)
,2,sizeof(double));
error = cuLaunchKernel(primeros_kernel2Block1Thread, blocksPerGrid, 1, 1,
threadsPerBlock, 1, 1,
0,
NULL, args, NULL);
这就是我遇到问题的地方:
CUDA_MEMCPY2D *pCopy ;
pCopy->srcMemoryType = CU_MEMORYTYPE_DEVICE;
pCopy->srcDevice = d_media;
pCopy->srcPitch = size_media_pitch;
pCopy->dstMemoryType =CU_MEMORYTYPE_ARRAY ;
pCopy->dstArray = h_media;
pCopy->WidthInBytes = size_media;
pCopy->Height = 2;
error = cuMemcpy2D(pCopy);