返回首页线程层级 对应的代码
线程索引可视化
拖动 gridDim 与 blockDim,点任意线程看它负责哪个元素。支持一维与二维网格,并实时显示越界线程。
维度
执行配置
64
每个 block 的线程数,始终取 32 的倍数
4
block 数量。这里限制在 8 以内以便可视化
200
真实数据长度。超出的线程会被边界检查挡掉
启动线程数
256
空转线程
56
覆盖完整。所需 block 数为 ceil(200 / 64) = 4,当前 gridDim = 4。
点击任意线程查看它的索引推导越界(被 if 挡掉)warp 0warp 1 …
blockIdx.x = 0global 0 … 63
blockIdx.x = 1global 64 … 127
blockIdx.x = 2global 128 … 191
blockIdx.x = 3global 192 … 255
被选中的线程
blockIdx.x
1
threadIdx.x
5
warp(块内)
0
lane(warp 内)
5
int i = 1 * 64 + 5 = 69i < n,处理 c[69]
CUDA C++
1__global__ void vecAdd(const float* a, const float* b, float* c, int n) {2 int i = blockIdx.x * blockDim.x + threadIdx.x;3 if (i < n) {4 c[i] = a[i] + b[i];5 }6}7 8int n = 200;9int threads = 64;10int blocks = (n + threads - 1) / threads; // = 411vecAdd<<<blocks, threads>>>(d_a, d_b, d_c, n);