2011-01-18 4 views
8

Tôi có chức năng có thể sử dụng lại trong một số mã CUDA cần được gọi từ cả thiết bị và máy chủ. Có một vòng loại thích hợp cho việc này không?Chức năng CUDA có thể gọi bằng thiết bị hoặc máy chủ

ví dụ: định nghĩa chính xác cho func1 trong trường hợp này là:

int func1 (int a, int b) { 
    return a+b; 
} 

__global__ devicecode (float *A) { 
    int i = blockDim.x * blockIdx.x + threadIdx.x; 
    A[i] = func1(i,i); 
} 

void main() { 
    // Normal cuda memory set-up 

    // Call func1 from inside main: 
    int j = func1(2,4) 

    // Normal cuda memory copy/program run/retrieve data 
} 

Cho đến nay tôi chỉ có thể làm việc này bằng cách có chức năng hai lần: một lần cho thiết bị và một lần cho máy chủ. Có cách nào tốt hơn?

Trả lời

16

Từ Hướng dẫn Lập trình CUDA:

Các __device____host__ vòng loại có thể được sử dụng cùng nhau tuy nhiên, trong trường hợp mà hàm được biên soạn cho cả các máy chủ và các thiết bị.