【问题标题】:Cuda index map 3D Block, 2D GridCuda 索引图 3D Block、2D Grid
【发布时间】:2013-01-15 20:37:38
【问题描述】:

我是 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. unsigned int 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;
}

【问题讨论】:

    标签: cuda


    【解决方案1】:

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

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

    当前频道将等于threadIdx.x

    【讨论】:

    • 好吧,我想我无法确认这个答案是否正确,因为经过阅读后我发现我的笔记本电脑无法做到这一点 //有 1 个设备支持 CUDA // 设备0 名称:GeForce 9200M GS // 计算能力:1.1 // 最大全局内存大小:536150016 // 最大常量内存大小:65536 // 每个块的最大共享内存大小:16384 // 最大块尺寸:512 x 512 x 64 / / 最大网格尺寸:65535 x 65535 x 1 // 扭曲尺寸:32
    • @ALMIStack... 抱歉造成误解。我已经删除了不正确的假设。
    • 所以 grid.z = 1 我需要 ((n+TILEz-1)/TILEz)
    猜你喜欢
    • 2017-10-13
    • 2011-09-11
    • 2012-01-08
    • 2021-12-30
    • 2022-06-10
    • 2013-02-01
    • 1970-01-01
    • 2019-12-23
    相关资源
    最近更新 更多