我有一个如下设计的数组:color[100][3]
。我想在内核中填充这个数组,然后在主机代码中使用它。我怎样才能做到这一点?我只需要拨打cudaMemcpy()
来发送并获取。在CUDA内核memcpy调用中使用array [i] [j]
这就是我要发送到设备:
err = cudaMallocPitch(&d_color, &pitch, 3 * sizeof(unsigned char),100);
这是我现在必须从设备(编者)得到它:
err = cudaMemcpy2D(color,100*3,d_color,pitch,3 *sizeof(unsigned char),3, cudaMemcpyDeviceToHost);
cudaMemcpy2D的最后调用抛出
:错误“无效参数”
如何获得color[100][3]
阵列的音高?我应该假设它是填充的3+1
?
为什么不使用普通的'cudaMalloc()'和'cudaMemcpy()'?你只需要一个指向内存的指针。 – KiaMorot 2013-03-06 11:11:11
将你的二维数组映射到一维数组中。在调用内核时传递另一个参数,它告诉你,一个维度的长度是多少,例如'color [100 * 3]',并将100传递为dimSize,并且可以使用'color [i/* 53 */+ dim/* 2nd */* N/* 100 * /] = 0;' – 2013-03-06 11:15:22
我想这个数组是Cimg框架的一部分。我必须按原样使用它,因为后面的代码以这种方式使用数组。 – 2013-03-06 11:37:54