我知道从.c文件调用.cu文件的方法。但现在我想从C头文件中调用.cu文件。有可能吗?如果是这样,我应该如何设置我的项目?请帮助.....
答案 0 :(得分:6)
这是一个有效的例子:
file1.h:
int hello();
file2.h:
#include <stdio.h>
#include "file1.h"
int myfunc(){
hello();
return 0;
}
file1.cu:
#include <stdio.h>
#include "file1.h"
__global__ void mykernel(){
printf("Hello from mykernel\n");
}
int hello(){
mykernel<<<1,1>>>();
cudaDeviceSynchronize();
return 0;
}
file2.cpp:
#include "file2.h"
int main(){
myfunc();
return 0;
}
构建和测试:
$ nvcc -arch=sm_20 -c file1.cu
$ g++ -c file2.cpp
$ g++ -o test file1.o file2.o -L/usr/local/cuda/lib64 -lcudart
$ ./test
Hello from mykernel
$
假设您打算将file2.h
包含到cpp文件中,则无法直接从该标头调用cuda内核并在cpp文件中使用它。你必须在cuda内核周围放一个包装器,并按照我的指示调用包装器。这是因为你的cpp文件将由主机编译器编译,主编译器对cuda语法一无所知(例如mykernel<<<1,1>>>();
)
此外,如评论中所示,为所需原型保留头文件file2.h
可能更有意义,并将myfunc
的实际函数定义放入某处的cpp文件中。 / p>