我知道从 .c 文件调用 .cu 文件的方法。但现在我想从 C 头文件中调用 .cu 文件。有可能吗?如果是这样,我应该如何设置我的项目?请帮忙.....
问问题
6547 次
1 回答
8
这是一个工作示例:
文件1.h:
int hello();
文件2.h:
#include <stdio.h>
#include "file1.h"
int myfunc(){
hello();
return 0;
}
文件 1.cu:
#include <stdio.h>
#include "file1.h"
__global__ void mykernel(){
printf("Hello from mykernel\n");
}
int hello(){
mykernel<<<1,1>>>();
cudaDeviceSynchronize();
return 0;
}
文件 2.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 文件中的某个地方。
于 2013-07-22T01:29:53.837 回答