CUDA-ThreadId

结合blocks和grid的概念.

  • 一维

blockIdx.x:线程块在网格中的索引。

threadIdx.x:线程在其所属线程块中的索引。

每个线程的全局索引(global index):globalIdx = blockIdx.x * Bx + threadIdx.x

  • 二维

blockIdx.xblockIdx.y:分别是线程块在网格中 x 和 y 方向的索引。

threadIdx.xthreadIdx.y:分别是线程在其所属线程块中 x 和 y 方向的索引。

全局索引可以通过以下方式计算:

globalIdx_x = blockIdx.x * Bx + threadIdx.x;

globalIdx_y = blockIdx.y * By + threadIdx.y;

  • 三维

blockIdx.x, blockIdx.y, blockIdx.z:分别是线程块在网格中 x, y, z 方向的索引。

threadIdx.x, threadIdx.y, threadIdx.z:分别是线程在其所属线程块中 x, y, z 方向的索引。

全局索引可以通过以下方式计算:

globalIdx_x = blockIdx.x * Bx + threadIdx.x;

globalIdx_y = blockIdx.y * By + threadIdx.y;

globalIdx_z = blockIdx.z * Bz + threadIdx.z;

这样就能够计算出在全局下的thread_id,进一步可以定义每个thread_id需要的计算,可以认为是矩阵运算的索引。