结合blocks和grid的概念.
- 一维
blockIdx.x:线程块在网格中的索引。
threadIdx.x:线程在其所属线程块中的索引。
每个线程的全局索引(global index):globalIdx = blockIdx.x * Bx + threadIdx.x
- 二维
blockIdx.x 和 blockIdx.y:分别是线程块在网格中 x 和 y 方向的索引。
threadIdx.x 和 threadIdx.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需要的计算,可以认为是矩阵运算的索引。