将数组的一部分传输到CUDA内存

时间:2015-01-27 18:39:34

标签: arrays memory cuda

假设我在主机上有一个动态分配的大小为N * M的数组,我将其用作矩阵(即作为2D数组)。现在,我将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的方法是什么?

1 个答案:

答案 0 :(得分:0)

我很亲密。我需要的是srcPos和/或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));