【发布时间】:2015-03-26 11:47:23
【问题描述】:
假设我在主机上有一个大小为N * M 的动态分配数组,我将其用作矩阵(即,作为二维数组)。现在,我将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 的方法是什么?
【问题讨论】:
-
当你说“部分”时,你是什么意思?您是要传输任意大小的子矩阵,还是只需要一半的列或一半的行。还是什么?
-
部分作为一行中任意数量的元素。例如,如果矩阵是
4x5 (NxM),我想要cpuM=3和gpuM=2,gpu 将得到4x2 矩阵,其中元素的索引为[N][3]和[N][4](即每行的最后两个)。