我是Cuda fortran的新手。我从未使用过更高维度的网格。我只是想从这个问题开始,我必须为一个大小为46 * 46 * 19的3-d数组的每个单元分配1个线程。请有人帮我如何为这种类型的数组设计网格和块,并为此计算线程索引。
任何帮助将不胜感激。
我已经想出了这个,但我不知道如何计算线程索引
type(dim3) :: threads,blocks
threads=dim3(16,16,4)
blocks=dim3((xDim + threads%x - 1)/threads%x,(yDim + threads%y - 1)/threads%y,(zDim + threads%z - 1)/threads%z)
答案 0 :(得分:1)
您在问题中显示的代码是用于设置内核启动的代码。
在内核中,您可以使用这样的代码生成线程x,y和z索引:
idx = (blockIdx%x-1) * blockDim%x + threadIdx%x-1
idy = (blockIdx%y-1) * blockDim%y + threadIdx%y-1
idz = (blockIdx%z-1) * blockDim%z + threadIdx%z-1
这将创建从零开始的索引。您可以省略上面每行代码末尾的-1
来创建基于一个索引。