CUDA是否支持递归?

时间:2010-09-05 02:47:14

标签: recursion cuda

CUDA是否支持递归?

12 个答案:

答案 0 :(得分:46)

它支持NVIDIA硬件,支持计算能力2.0和CUDA 3.1:

  

添加到CUDA C的新语言功能     / C ++ include

     

支持功能   指针和递归使它更容易   将许多现有算法移植到   费米GPU

http://developer.nvidia.com/object/cuda_3_1_downloads.html

函数指针: http://developer.download.nvidia.com/compute/cuda/sdk/website/CUDA_Advanced_Topics.html#FunctionPointers

<强>递归: 我在NVIDIA的网站上找不到代码示例,但在forum有人发布此代码:

__device__ int fact(int f)
{
  if (f == 0)
    return 1;
  else
    return f * fact(f - 1);
}

答案 1 :(得分:12)

是的,请参阅NVIDIA CUDA Programming Guide

  

设备功能仅支持为设备编译的设备代码中的递归   计算能力2.0。

您需要使用费米卡才能使用它们。

答案 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。它说递归尚未得到支持。所以它与运行时没有任何关系,而是硬件本身