0

我有一个具有以下设计的数组: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填充的吗?

4

1 回答 1

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 类型会不会更容易?

于 2013-03-06T11:30:19.160 回答