Har*_*dik 5 c++ integration compatibility cuda
我试图从C++文件调用CUDA(主机)函数,单独编译:
sample.cpp C++文件:
extern "C" void cuda_function(int a, int b);
int main(){
//statements
cuda_function(23, 34);
//statements
}
Run Code Online (Sandbox Code Playgroud)
cuda.cu 文件:
#include <cuda.h>
__global__ void kernel(int a, int b)
{
//statements
}
void cuda_function(int a, int b){
//cuda_function
}
Run Code Online (Sandbox Code Playgroud)
构建命令:
g++ -c sample.cpp
nvcc -c cuda.cu
nvcc -o sample sample.o cuda.o
Run Code Online (Sandbox Code Playgroud)
但这会给链接器错误:
sample.o: In function `main':
sample.cpp:(.text+0x163): undefined reference to `cuda_function'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
这种C++和CUDA集成方法有什么问题?
Tom*_*Tom 11
您已声明cuda_function()为extern "C",但随后使用C++定义它.extern "C"从您的退场中移除它将起作用.
或者,但毫无意义,您可以将相同的声明添加到cuda.cu文件中.
为了详细说明,nvcc是一个包装器,它将文件分成主机代码和设备代码,然后分别调用主机编译器和设备编译器.回到CUDA编程的旧时代,nvcc在"C"模式下调用主机编译器,这意味着你需要extern "C"在从C++调用时进行重新编程.回到现在,nvcc默认使用C++作为主机代码,这意味着您不再需要这些外部代码(除非主机代码的其余部分当然在C中).
| 归档时间: |
|
| 查看次数: |
4598 次 |
| 最近记录: |