假设我在主机上有一个动态分配的大小为N * M
的数组,我将其用作矩阵(即作为2D数组)。现在,我将M
分为两部分cpuM
和gpuM
。我希望将该数组的一部分传输到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的方法是什么?
答案 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));