如何在cuda fortran中为三维阵列设计网格和块

时间:2013-12-20 15:44:22

标签: cuda fortran

我是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)

1 个答案:

答案 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来创建基于一个索引。