将部分数组传输到 CUDA 内存

Transfer part of array to CUDA memory

假设我在主机上有一个大小为 N * M 的动态分配数组,我将其用作矩阵(即二维数组)。现在,我把M分成两部分,cpuMgpuM。我希望将该数组的一部分传输到 GPU,这是 N * gpuM 的(倾斜)数组。我该怎么做?

到目前为止我有:

cudaMemcpy3DParms cpy = { 0 };
cpy.srcPtr = make_cudaPitchedPtr(h_mat, M * sizeof(TYPE), gpuM, N);
cpy.dstPtr = d_mat;
cpy.extent = make_cudaExtent(gpuM * sizeof(TYPE), N, 1);
cpy.kind = cudaMemcpyHostToDevice;
cudaCheckError(cudaMemcpy3D(&cpy));

但是,这不起作用。我不知道在哪里指定要在 M 维度 (cpuM) 中跳过的元素数,这显然是我需要的。

那么,只复制数组的一部分到GPU的方法是什么?

我很接近。我需要的可以用 srcPos and/or dstPos 完成,它采用包含任何所需偏移量的 cudaPos 结构。卢克:

cudaMemcpy3DParms cpy = { 0 };
cpy.srcPtr = make_cudaPitchedPtr(h_mat, M * sizeof(TYPE), M, N);
cpy.srcPos = make_cudaPos(cpuM * sizeof(TYPE), 0, 0);
cpy.dstPtr = d_mat;
cpy.extent = make_cudaExtent(gpuM * sizeof(TYPE), N, 1);
cpy.kind = cudaMemcpyHostToDevice;
cudaCheckError(cudaMemcpy3D(&cpy));