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

using array[i][j] in a CUDA kernel memcpy call

本文关键字:array 内核 CUDA 内存 调用      更新时间:2023-10-16

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

这是我要发送给device的内容:

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

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
        );

Btw -使用uchar3类型不是更容易吗?