Cuda索引图3D块,2D网格

时间:2013-01-31 16:50:17

标签: cuda

我是cuda的新手;我有一个2D图像(宽度,高度)与3个通道(颜色)。 我想要的是吃一个内核 3D block 2D grid 这样的

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

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

  1. unsigned int Row =?
  2. unsigned int Col =?
  3. 并且我使用此函数来计算全局唯一索引

    __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;
    }
    

1 个答案:

答案 0 :(得分:1)

如果你使用y代表宽度,z代表高度,那么图像的行和列将在内核中计算如下:

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

当前频道将等于threadIdx.x