CUDA miniWiki

Thread Hierarchy

Block ID

// linear index of current block in its grid
if (grid_dim == 1) {
  return blockIdx.x;
} else if (grid_dim == 2) {
  return blockIdx.x + blockIdx.y * gridDim.x;
} else if (grid_dim == 3) {
  return blockIdx.x + blockIdx.y * gridDim.x + blockIdx.z * gridDim.y * gridDim.x;
}

Thread ID

// linear index of current thread in its block
if (block_dim == 1) {
  return threadIdx.x;
} else if (block_dim == 2) {
  return threadIdx.x + threadIdx.y * blockDim.x;
} else if (block_dim == 3) {
  return threadIdx.x + threadIdx.y * blockDim.x + threadIdx.z * blockDim.y * blockDim.x;
}

Memory Hierarchy