从常规 C++ 代码调用 __global__ CUDA 函数

Calling __global__ CUDA functions from regular C++ code

我正在将使用 CUDA 的库添加到 C++ 项目中。截至目前,我正在做的是从 .cpp 文件导入 .cuh(或 .h)header,然后 .cu 文件实现这些功能在这个header。但是这个 header 包含方法的声明,这些方法具有常规 C++ 编译器抱怨的 __global__ 修饰符。

所以我想知道,从 C++ 代码使用静态 CUDA 库的正确方法是什么?

我通过创建一个带有包装函数的 header 来解决,然后在 .cu 文件中实现,如下所示:

__global__
void real_foo(int number, int *out) { 
    *out = number * 2; 
}

inline int foo(int number) { 
    int* x;
    
    cudaMallocManaged(&x, sizeof(int));
    real_foo<<<1,1>>>(number, x); 
    cudaDeviceSynchronize();
    int y = *x;
    cudaFree(x);
    return y;
} 

这样对外公开的函数在其签名中没有任何内容CUDA-specific。