CUDA是否支持递归?
答案 0 :(得分:46)
它支持NVIDIA硬件,支持计算能力2.0和CUDA 3.1:
添加到CUDA C的新语言功能 / C ++ include :
支持功能 指针和递归使它更容易 将许多现有算法移植到 费米GPU
http://developer.nvidia.com/object/cuda_3_1_downloads.html
<强>递归:强> 我在NVIDIA的网站上找不到代码示例,但在forum有人发布此代码:
__device__ int fact(int f)
{
if (f == 0)
return 1;
else
return f * fact(f - 1);
}
答案 1 :(得分:12)
答案 2 :(得分:9)
即使它只支持特定芯片的递归,你有时可以通过“模拟”递归逃脱:see how I used compile-time recursion for my CUDA raytracer。
答案 3 :(得分:7)
在CUDA 4.1版本中,CUDA仅支持__device__函数的递归,但不支持__global__函数的递归。
答案 4 :(得分:5)
仅在兼容设备上具有2.0计算能力之后
答案 5 :(得分:3)
确实如此,但它需要Kepler架构这样做。 查看他们关于经典快速排序的最新示例。
http://blogs.nvidia.com/2012/09/how-tesla-k20-speeds-up-quicksort-a-familiar-comp-sci-code/
据我所知,只有最新的Kepler GK110支持动态并行,允许这种递归调用和内核中新线程的产生。在Kepler GK110之前,它是不可能的。请注意,并非所有Kepler架构都支持此功能,只有GK110支持此功能。
如果您需要递归,您可能需要特斯拉K20。 我不确定费米是否支持它,从不读它。 :\ 但开普勒确实如此。 =)
答案 6 :(得分:2)
任何递归算法都可以使用堆栈和循环实现。这更像是一种痛苦,但如果你真的需要递归,这可以起作用。
答案 7 :(得分:2)
CUDA 3.1支持递归
答案 8 :(得分:1)
如果你的算法调用很多递归,然后支持或不支持,它不是为GPU设计的,要么重新设计你的算法,要么得到更好的CPU,无论哪种方式它会更好(我打赌在很多情况下,maginitudes更好)然后在GPU上做反应。
答案 9 :(得分:0)
是的,实际版本支持它。但是尽管可以执行递归函数,但必须记住,无法预测执行堆栈的内存分配(必须执行递归函数才能知道递归的真实深度),所以你的堆栈可能导致您的目的不够,可能需要手动增加默认堆栈大小
答案 10 :(得分:0)
是的,它确实支持递归。但是,在GPU上进行递归并不是一个好主意。因为每个线程都会这样做。
答案 11 :(得分:-2)
刚刚在我的电脑上尝试使用具有1.1 Compute功能的NVIDIA GPU。它说递归尚未得到支持。所以它与运行时没有任何关系,而是硬件本身