如何从C++头文件中调用CUDA文件?

ska*_*dan 1 cuda

我知道从.c文件调用.cu文件的方法.但现在我想从C头文件中调用.cu文件.有可能吗?如果是这样,我应该如何设置我的项目?请帮忙.....

Rob*_*lla 6

这是一个有效的例子:

file1.h:

int hello();
Run Code Online (Sandbox Code Playgroud)

file2.h:

#include <stdio.h>
#include "file1.h"

int myfunc(){
  hello();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

file1.cu:

#include <stdio.h>
#include "file1.h"

__global__ void mykernel(){
  printf("Hello from mykernel\n");
}

int hello(){

  mykernel<<<1,1>>>();
  cudaDeviceSynchronize();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

file2.cpp:

#include "file2.h"

int main(){
  myfunc();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

构建和测试:

$ 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
$
Run Code Online (Sandbox Code Playgroud)

假设您打算将自己file2.h包含在cpp文件中,则无法直接从该标头调用cuda内核并在cpp文件中使用它.你必须在cuda内核周围放一个包装器,并按照我的指示调用包装器.这是因为你的cpp文件将由主机编译器编译,主编译器对cuda语法一无所知(例如mykernel<<<1,1>>>();)

此外,如注释中所示,file2.h为所需原型保留头文件可能更有意义,并将实际函数定义myfunc放入某个cpp文件中.