我有一个非常基本的怀疑,假设我有一个2D网格和2D块,我想计算一个块中特定线程的threadIdx和threadIdy。
我知道blockId = blockIdx.y*gridDim.x*gridDim.y + blockIdx.x
所以threadIdx=threadIdx.x
和threadIdy=blockId*blockDim.x*blockDim.y+threadIdx.y*blockDim.x
它是否正确?
实际上我想使用2D网格和2D块进行矩阵乘法,这就是为什么我需要x索引和y索引
答案 0 :(得分:2)
对于2D线程块的2D网格,您希望每个线程都有一个唯一的(x,y)索引组合,它非常简单:
int idx = threadIdx.x+blockDim.x*blockIdx.x;
int idy = threadIdx.y+blockDim.y*blockIdx.y;