Функция CUDA, вызываемая либо устройством, либо хостом - PullRequest
8 голосов
/ 18 января 2011

У меня есть функция многократного использования в некотором коде CUDA, которую нужно вызывать как с устройства, так и с хоста.Есть ли соответствующий квалификатор для этого?

Например, какое правильное определение для func1 в этом случае:

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
}

Пока я могу заставить это работать только при наличии функции дважды:явно для устройства и один раз для хоста.Есть ли лучший способ?

1 Ответ

16 голосов
/ 18 января 2011

Из Руководства по программированию CUDA:

Однако можно использовать квалификаторы __device__ и __host__, в этом случае функция компилируется как для хоста, так и для устройства.

...