CUDA có hỗ trợ đệ quy không?CUDA có hỗ trợ đệ quy không?
Trả lời
Nó làm trên phần cứng NVIDIA hỗ trợ khả năng tính toán 2.0 và CUDA 3.1:
tính năng ngôn ngữ mới được thêm vào CUDA C /C++ bao gồm:
Hỗ trợ cho chức năng con trỏ và đệ quy giúp dễ dàng hơn để chuyển nhiều thuật toán hiện có sang GPU Fermi
http://developer.nvidia.com/object/cuda_3_1_downloads.html
con trỏ Chức năng: http://developer.download.nvidia.com/compute/cuda/sdk/website/CUDA_Advanced_Topics.html#FunctionPointers
Đệ quy: tôi không thể tìm thấy một mẫu mã trên trang web của NVIDIA, nhưng trên forum một người nào đó đăng bài này:
__device__ int fact(int f)
{
if (f == 0)
return 1;
else
return f * fact(f - 1);
}
Có phần cứng "gần đây" không đủ. Không phải tất cả các thẻ gần đây đều là Fermi (còn gọi là khả năng tính toán 2.0). Hiện tại, không có GPU di động Fermi. –
Bạn nói đúng, tôi đã cập nhật anwser của mình. Nhưng còn Geforce GTX 480M thì sao? Có một con chip Fermi bên trong. – Stringer
Có máy tính xách tay với Fermi; Geforce 480M và Quadro FX5000M đã xuất hiện trong một thời gian ngắn. – Tom
Bất kỳ thuật toán đệ quy nào cũng có thể được triển khai với ngăn xếp và vòng lặp. Đó là cách nhiều hơn một nỗi đau, nhưng nếu bạn thực sự cần đệ quy, điều này có thể làm việc.
Có, xem NVIDIA CUDA Programming Guide: đệ quy hỗ trợ
thiết bị chức năng chỉ trong mã thiết bị biên soạn cho các thiết bị khả năng tính toán 2.0.
Bạn cần thẻ Fermi để sử dụng chúng.
Mặc dù nó chỉ hỗ trợ đệ quy cho các con chip cụ thể, đôi khi bạn có thể thoát ra với đệ quy "mô phỏng": see how I used compile-time recursion for my CUDA raytracer.
Rất hữu ích! Kudos –
Tôi nghĩ rằng điều này tạo ra mã nhanh hơn so với đệ quy thực sự. –
@Min Lin: Ahh, nhưng tại sao bình luận của tôi vẫn ở 1, vậy thì sao? Bạn nợ tôi một upvote! :-) – ttsiodras
Đã thử ngay trên máy tính của tôi với GPU NVIDIA với 1,1 khả năng Tính toán. Nó nói rằng đệ quy chưa được hỗ trợ. Vì vậy, nó không có bất cứ điều gì để làm với thời gian chạy nhưng phần cứng chính nó
Trong bản phát hành CUDA 4.1, CUDA chỉ hỗ trợ đệ quy cho hàm __device__ chứ không phải cho hàm __global__.
Chắc chắn nó có, nhưng nó đòi hỏi kiến trúc Kepler làm như vậy. Xem ví dụ mới nhất của họ về sắp xếp nhanh kiểu cổ điển.
http://blogs.nvidia.com/2012/09/how-tesla-k20-speeds-up-quicksort-a-familiar-comp-sci-code/
Theo như tôi biết, chỉ mới nhất Kepler GK110 hỗ trợ xử lý song song động, cho phép loại này gọi đệ quy và sinh sản của chủ đề mới trong kernel. Trước Kepler GK110, điều đó là không thể. Và lưu ý rằng không phải tất cả kiến trúc Kepler đều hỗ trợ điều này, chỉ có GK110 làm được.
Nếu bạn cần đệ quy, có thể bạn cần Tesla K20. Tôi không chắc Fermi có hỗ trợ nó hay không, không bao giờ đọc nó.: \ Nhưng chắc chắn là Kepler. =)
Nếu thuật toán của bạn hỗ trợ rất nhiều cuộc khảo sát, hãy hỗ trợ hay không, nó không được thiết kế cho GPU, thiết kế lại bản đồ của bạn hoặc có CPU tốt hơn, hoặc là nó sẽ tốt hơn (tôi đặt cược trong nhiều trường hợp, maginitudes tốt hơn) sau đó làm recurisons trên GPU.
Chỉ sau 2.0 khả năng tính toán trên các thiết bị tương thích
Vâng, nó được hỗ trợ trên phiên bản thực tế. Nhưng mặc dù thực tế có thể thực hiện các hàm đệ quy, bạn phải nhớ rằng việc cấp phát bộ nhớ từ ngăn xếp thực hiện không thể dự đoán được (hàm đệ quy phải được thực hiện để biết độ sâu thực sự của đệ quy), vì vậy ngăn xếp của bạn có thể dẫn đến không đủ cho mục đích của bạn và có thể cần tăng thủ công kích thước ngăn xếp mặc định
- 1. Scala có hỗ trợ tối ưu đệ quy đuôi không?
- 2. Lỗi Opencv: không hỗ trợ GPU (thư viện được biên dịch không hỗ trợ CUDA)
- 3. Thuộc tính nào phải có ngôn ngữ để hỗ trợ đệ quy?
- 4. MySQL không hỗ trợ chức năng đệ quy? tại sao? Kể từ khi?
- 5. Phiên bản C++ được hỗ trợ bởi cuda 5.0
- 6. Hỗ trợ Mã VS2010 có hỗ trợ nUnit không?
- 7. Đệ quy đệ quy so với đệ quy trước
- 8. Đệ quy đệ quy và đệ quy đệ quy trong Erlang
- 9. Không đệ quy os.walk()
- 10. Lỗi thêm tham chiếu dịch vụ: Loại là hợp đồng dữ liệu thu thập đệ quy không được hỗ trợ
- 11. IDE nào có hỗ trợ tốt cho lập trình với CUDA?
- 12. Viết lại một hàm đệ quy mà không sử dụng đệ quy
- 13. Có hỗ trợ opencl Chức năng Con trỏ không?
- 14. Weblogic có hỗ trợ CDI Beans không?
- 15. iPhone có hỗ trợ XML-RPC không?
- 16. Mono có hỗ trợ XAML không?
- 17. GCC có hỗ trợ lâu dài không?
- 18. VC++ có hỗ trợ _mm_malloc không?
- 19. AutoMapper có hỗ trợ LINQ không?
- 20. Arduino có hỗ trợ luồng không?
- 21. IE10 có hỗ trợ FormData() không?
- 22. TypeScript có hỗ trợ TouchEvent không?
- 23. S3 có hỗ trợ HTTP pipelining không?
- 24. PowerShell có hỗ trợ OOP không?
- 25. GWT có hỗ trợ php không?
- 26. Có định nghĩa hỗ trợ tryhaskell.org không?
- 27. Cassandra có hỗ trợ sharding không?
- 28. MemoryCache có hỗ trợ vùng không?
- 29. Tomcat có hỗ trợ TLS v1.2 không?
- 30. DS.FixtureAdapter có hỗ trợ sideload không?
Lưu ý rằng tất cả các vòng liên quan đến đệ quy, và đệ quy đuôi không/không nên gọi hàm đệ quy. – Potatoswatter
Xem [tại đây] (http://stackoverflow.com/q/3644809/1129194) để biết thêm thông tin –