CUDA是否支持遞歸?CUDA是否支持遞歸?
回答
它確實在NVIDIA硬件支持計算能力2.0和CUDA 3.1:加入到CUDA C
個新的語言特性 /C++包括:
支持功能 指針和遞歸讓它更容易 將許多現有算法移植到 Fermi 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);
}
任何遞歸算法都可以用堆棧和循環來實現。這更多的是一種痛苦,但如果你真的需要遞歸,這可以工作。
儘管它只支持特定芯片的遞歸,但有時您可以通過「模擬」遞歸獲得:see how I used compile-time recursion for my CUDA raytracer。
非常有用!榮譽 – 2013-12-30 12:24:09
我認爲這會產生比實際遞歸更快的代碼。 – 2013-12-30 12:25:28
@林珉:啊,但是我的評論還是在1分呢?你欠我一個贊! :-) – ttsiodras 2014-02-10 10:43:17
剛剛在我的電腦上試用了具有1.1計算能力的NVIDIA GPU。它說遞歸尚不支持。所以它沒有任何關係運行時間,但硬件本身
在CUDA 4.1版本中,CUDA僅支持__device__函數的遞歸,而不支持__global__函數的遞歸。
確實如此,但它需要開普勒架構來做到這一點。 查看他們關於經典快速排序的最新示例。
http://blogs.nvidia.com/2012/09/how-tesla-k20-speeds-up-quicksort-a-familiar-comp-sci-code/
據我所知,只有最新的開普勒GK110支持動態並行,允許這種遞歸調用和內核中新線程產卵。在開普勒GK110之前,這是不可能的。並且並不是所有的開普勒架構都支持這一點,只有GK110可以。
如果您需要遞歸,您可能需要特斯拉K20。我不確定費米是否支持它,從來沒有讀過它。:\ 但開普勒確實。 =)
如果你的算法包含很多遞歸,那麼支持與否,它不是爲GPU設計的,要麼重新設計你的algorthims,要麼得到一個更好的CPU,無論哪種方式它會更好(我敢打賭,在很多情況下,更好),然後在GPU上執行recurisons。
只有2.0兼容設備上的計算能力後
是的,它支持實際的版本。但是,儘管事實上有可能執行遞歸函數,但您必須記住,不能預測來自執行堆棧的內存分配(必須執行遞歸函數才能知道遞歸的真實深度),因此您的堆棧可能會導致您的目的不夠,並且可能需要手動增加默認堆棧大小
- 1. 如何cuda 4.0支持遞歸
- 2. sscanf()是否支持「遞歸」緩衝區?
- 3. 遞歸支持
- 4. ng-repeat支持遞歸嗎?
- 5. pthreads是否支持查詢遞歸互斥鎖的「鎖計數」?
- 6. 是否支持Z3路線圖上的遞歸函數?
- 7. 是否有任何數據庫支持相互遞歸查詢
- 8. 拉力賽的提取API是否支持遞歸提取?
- 9. SVN是否支持非遞歸複製文件夾?
- 10. CUDA __syncthreads()和遞歸
- 11. 對遞歸註釋的語言支持
- 12. CUDA 5是否支持設備代碼內的STL或THRUST?
- 13. cuda中是否支持GPU內核隊列?
- 14. gpuocelot是否支持CUDA設備中的動態內存分配?
- 15. 是否有任何支持CUDA的JVM實現?
- 16. 是否支持groovvy
- 17. 是否支持SSI?
- 18. 是否支持DataGrid?
- 19. 是否支持MSNP9?
- 20. 是否支持ARC?
- 21. Android是否支持手錶支持NFC
- 22. 支持CUDA的設備
- 23. Tensorflow如何支持Cuda流?
- 24. 叮噹中的CUDA支持
- 25. 是否有支持左遞歸的基於PEG的解析器生成器?
- 26. 是否有任何平臺不支持重入互斥鎖或遞歸鎖?
- 27. 語言必須支持遞歸的屬性是什麼?
- 28. 語言必須支持遞歸的屬性是什麼?
- 29. switch語句是否遞歸?
- 30. Powershell Get-ADGroup是否遞歸?
請注意,所有循環都涉及遞歸,並且尾遞歸不會/不應涉及遞歸函數調用。 – Potatoswatter 2010-09-06 08:35:44
請參閱[這裏](http://stackoverflow.com/q/3644809/1129194)以獲取更多信息 – 2012-10-13 10:57:04