2010-09-05 36 views
50

CUDA có hỗ trợ đệ quy không?CUDA có hỗ trợ đệ quy không?

+0

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

+4

Xem [tại đây] (http://stackoverflow.com/q/3644809/1129194) để biết thêm thông tin –

Trả lời

45

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); 
} 
+2

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. –

+0

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

+0

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

2

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.

11

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.

2

CUDA 3.1 hỗ trợ đệ quy

+0

bạn có ví dụ? – JuanPablo

8

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.

+0

Rất hữu ích! Kudos –

+0

Tôi nghĩ rằng điều này tạo ra mã nhanh hơn so với đệ quy thực sự. –

+0

@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

-2

Đã 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ó

6

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__.

3

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. =)

1

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.

5

Chỉ sau 2.0 khả năng tính toán trên các thiết bị tương thích

0

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

Các vấn đề liên quan