在CUDA内核memcpy调用中使用array [i] [j]

时间:2013-03-06 11:08:25

标签: c++ memory-management cuda parallel-processing gpu

我有一个具有以下设计的数组:color[100][3]。我想在内核中填充此数组,然后在主机代码中使用它。我怎么能做到这一点?我只需要cudaMemcpy()调用发送和获取。

这是我必须发送给设备的内容:

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填充的吗?

1 个答案:

答案 0 :(得分:0)

err = cudaMemcpy2D(
        color, 
        pitch, 
        d_color, 
        sizeof(unsigned char) * 100 * 3, // <<< WRONG - source pitch, not it's size!
        3 * sizeof(unsigned char), 
        100 * sizeof(unsigned char), // <<< Shouldn't it be number of rows, not column size in bytes?
        cudaMemcpyDeviceToHost
        );

顺便说一下 - 使用uchar3类型会不会更容易?