线程索引计算
本文档是线程索引计算的速查手册,提供常 用的索引计算公式和模式。
内置变量
每个线程通过内置变量获取其在层次结构中的位置:
| 变量 | 含义 | 维度 |
|---|---|---|
threadIdx | 线程在线程块内的索引 | (x, y, z) |
blockIdx | 线程块在网格内的索引 | (x, y, z) |
blockDim | 线程块的维度大小(线程数) | (x, y, z) |
gridDim | 网格的维度大小(线程块数) | (x, y, z) |
索引计算公式
一维索引(最常用)
// 全局线程 ID
int idx = blockIdx.x * blockDim.x + threadIdx.x;
全局 ID = 线程块索引 × 线程块大小 + 线程索引
示例:
__global__ void vectorAdd(const float* a, const float* b, float* c, int n) {
int idx = blockIdx.x * blockDim.x + threadIdx.x;
if (idx < n) {
c[idx] = a[idx] + b[idx];
}
}