我有一个具有以下设计的数组: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
填充的吗?
答案 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类型会不会更容易?