CUDA支持递归吗?
它仅适用于支持计算能力2.0和CUDA 3.1的NVIDIA硬件:
CUDA C/C++新增了以下语言特性:
支持函数指针和递归,使得许多现有算法更容易移植到Fermi GPU上。
http://developer.nvidia.com/object/cuda_3_1_downloads.html
递归:我在NVIDIA网站上找不到代码示例,但在论坛上有人发布了这个。
__device__ int fact(int f)
{
if (f == 0)
return 1;
else
return f * fact(f - 1);
}
只有兼容设备上的 2.0 计算能力才行。
http://blogs.nvidia.com/2012/09/how-tesla-k20-speeds-up-quicksort-a-familiar-comp-sci-code/
据我所知,只有最新的Kepler GK110支持动态并行性,它允许这种递归调用和在内核中生成新线程。在Kepler GK110之前是不可能的。请注意,并非所有的Kepler架构都支持此功能,只有GK110支持。CUDA 3.1支持递归
是的,它支持递归。然而,在GPU上进行递归并不是一个好主意。因为每个线程都会执行它。
__global__
函数不支持递归。请参考编程指南中的 F.3.9.6. 函数递归。 - palebluedot