GPU 中的线程是如何编号的?

问题描述 投票:0回答:1

假设我像下面这样声明线程和块:

dim3 threads_per_block(2,2,2);
dim3 blocks_per_grid(2,2,2);
MyKernel<<<blocks_per_grid, threads_per_block>>>(... ... ...);

网格中的线程和块是否编号如下?

如果没有,怎么办?

  1. 黑色 = GPU
  2. 蓝色 = 网格**
  3. 绿色=方块
  4. 白色 = 线

** 假设 GPU 只有一个网格。

因此,如果我们想得到线程#36的(x, y, z)坐标,我们可以这样计算:

int x = blockIdx.x * blockDim.x + threadIdx.x = 1 * 2 + 1 = 3
int y = blockIdx.y * blockDim.y + threadIdx.y = 0 * 2 + 0 = 0  
int z = blockIdx.z * blockDim.z + threadIdx.z = 0 * 2 + 0 = 0

正确吗?

cuda gpu nvidia
1个回答
0
投票

你的眼光是正确的。

考虑到您的问题,我强烈推荐 David B. Kirk 和 Wen-mei W. Hwu 合着的《Programming Massively Parallel Processors》一书。它详细介绍了您的大部分主题。

© www.soinside.com 2019 - 2024. All rights reserved.