CUDA Fortran中如何定义block和thread的维度

CUDA Fortran中如何定义block和thread的维度

在CUDA中,存在grid,block,thread的概念,而在调用核函数时,这些参数需要我们人为地去指定.当这三个参数为一维时只需要用一个整形变量去定义即可.但当需要定义二维及以上的grid,block和thread时,在 CUDA C 中只需要用dim3关键字,如 dim3 block(2,2) 便是定义了一个$2 \times 2 $的线程块,三维只需要增加一个参数: dim3 block(2,2,2) 即可.但是在CUDA Fortran中,和CUDA C稍有区别,其语法为:

type(dim3) :: blocks, threads
...
blocks = dim3(2,2,2)
threads = dim3(2,2,2)

call devkernel<<<blocks,threads>>>(...)

相比CUDA C来说会繁琐一些,首先是变量需要另外进行声明,另外,dim3括号内的参数必须是三个,否则编译会报错,如果需要的是二维的block或thread,那么只需要将三个参数中的一个设为1即可.

posted @ 2022-06-28 22:44  yukina~  阅读(150)  评论(0编辑  收藏  举报