从常规 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。
我正在将使用 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。