我理解我使用threadidx.x等来引用一个特定的线程,但我从一个CPU中的for循环传输代码,并希望使用threadidx.x引用数字0 ... N,但这似乎不是上班.我将tdx = threadIdx.x声明为整数,但实际存储在tdx中的整数是多少?
正如你可以在文档中读取的变量threadIdx, blockIdx并且blockDim是被在每次执行线程自动创建变量.他们.x,.y和.z性能,让您可以在您认为合适的线程映射到你的问题的空间.
执行内核时,您可以确定每个块将拥有多少个线程(以3D为单位)以及3D网格中有多少个块.在以下代码中:
dim3 threads(tX, tY, tZ);
dim3 blocks(gX, gY, gZ);
kernel_function<<<blocks, threads>>>(kernel_parameters);
Run Code Online (Sandbox Code Playgroud)
您正在启动名为的内核函数,kernel_function以便CUDA运行时启动维度为gXx gYx 的块的3D网格gZ.这些块中的每一个都将包含以大小为tXx tYx 的3D结构组织的线程tZ.
如果第3维的大小为0(即它是2D映射),官方文档的图片会更好地显示:

这意味着执行内核的每个线程都会出现以下情况:
blockDim.x = tXblockDim.y = tYblockDim.z = tZgridDim.x = gXgridDim.y = gYgridDim.z = gZ并且每个线程在这些参数中都有自己的坐标.数学:
0 <= threadIdx.x < blockDim.x = tX0 <= threadIdx.y < blockDim.y = tY0 <= threadIdx.z < blockDim.z = tZ0 <= blockIdx.x < gridDim.x = gX0 <= blockIdx.y < gridDim.y = gY0 <= blockIdx.z < gridDim.z = gZ| 归档时间: |
|
| 查看次数: |
3316 次 |
| 最近记录: |