2011-01-18 5 views
8

J'ai une fonction réutilisable dans un code CUDA qui doit être appelée à la fois par le périphérique et par l'hôte. Y a-t-il un qualificatif approprié pour cela?Fonction CUDA pouvant être appelée par le périphérique ou l'hôte

par exemple. quelle est la définition correcte pour func1 dans ce cas:

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 
} 

Jusqu'à présent, je ne peut obtenir que cela fonctionne en ayant la fonction deux fois: une fois explicitement l'appareil et une fois pour l'hôte. Y a-t-il un meilleur moyen?

Répondre

16

du guide de programmation CUDA:

Les qualificatifs __device__ et __host__ peuvent être utilisés ensemble cependant, dans auquel cas la fonction est compilée pour l'hôte et l'appareil.

Questions connexes