2011-01-18 9 views
8

Mam funkcję wielokrotnego użytku w niektórych kodach CUDA, które muszą być wywoływane zarówno z urządzenia, jak iz hosta. Czy istnieje odpowiedni kwalifikator?Wywołanie funkcji CUDA przez urządzenie lub hosta

np. Jaka jest poprawna definicja func1 w tym przypadku:

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 
} 

Dotychczas mogę dostać tylko to działało poprzez funkcję dwukrotnie: raz wyraźnie do urządzenia i raz na gospodarza. Czy istnieje lepszy sposób?

Odpowiedz

16

Z Instrukcji programowania CUDA:

W __device__ i __host__ kwalifikacyjne mogą być używane razem jednak w przypadku których funkcja jest skompilowany zarówno dla gospodarza i urządzenia.