2

我是cuda的新手;我有一个带有 3 个通道(颜色)的 2D 图像(宽度、高度)。我想要的是午餐像这样具有3D 块2D 网格的内核

kernel_2D_3D<<<dim3(1,m,n), dim3(3,TILEy,TILEz)>>>(float *in, float *out)

我用x表示颜色,用y表示宽度,用z表示高度。我的问题是:如何计算图像的行和列:

  1. 无符号整数行 = ?
  2. 无符号整数 Col = ?

我用这个函数来计算全局唯一索引

__device__ int getGlobalIdx_2D_3D()
{
    int blockId = blockIdx.x+ blockIdx.y * gridDim.x; 

    int Idx = blockId * (blockDim.x * blockDim.y * blockDim.z)
                 + (threadIdx.z * (blockDim.x * blockDim.y))
                 + (threadIdx.y * blockDim.x)
                 + threadIdx.x;

    return Idx;
}
4

1 回答 1

1

如果您使用 y 表示宽度,使用 z 表示高度,那么图像的行和列将在内核中像这样计算:

unsigned int row = blockIdx.z * blockDim.z + threadIdx.z;
unsigned int col = blockIdx.y * blockDim.y + threadIdx.y;

当前频道将等于threadIdx.x

于 2013-01-31T17:48:30.433 回答