CUDA:一つにしないでください.cppファイルでkernelを宣言する(すなわち_global_と_device_の関数)

1419 ワード

ネット上の材料に由来する.
ヘッダファイルh
extern __global__ void kernel();
はファイルkernelを実現する.cu
#include 
#include "kernel.h"
__global__ void kernel()
{
  printf("hello world!");
}

テストcu:
#include "kernel.h"
int main(void)
{
  kernel<<<1,1>>>();
  cudaDeviceSynchronize();
return 0;
}
質問が来ました.test.Cuをtestに変更した.cpp、問題が発生します
make all 
Building file: ../src/test2.cpp
Invoking: NVCC Compiler
/usr/local/cuda-5.5/bin/nvcc -G -g -O0 -gencode arch=compute_35,code=sm_35 -odir "src" -M -o "src/test2.d" "../src/test2.cpp"
/usr/local/cuda-5.5/bin/nvcc -G -g -O0 --compile  -x c++ -o  "src/test2.o" "../src/test2.cpp"
In file included from ../src/test2.cpp:3:0:
../src/kernel.h:5:8:  : ‘__global__’ 
../src/test2.cpp:  ‘int main()’ :
../src/test2.cpp:10:2:  : ‘kernel’ 
../src/test2.cpp:10:10:  : expected primary-expression before ‘’ token
../src/test2.cpp:10:18:  : expected primary-expression before ‘)’ token
../src/test2.cpp:11:24:  : ‘cudaDeviceSynchronize’ 
make: *** [src/test2.o]   1

問題の分析:
cppはデフォルトでホストコンパイラであるc++のコンパイラで処理されるためです.
そしてtestではcppにはkernelが含まれている.h,kernel.hで宣言しました_global__で行ないます.
NOTE:上記主な参考:
http://blog.csdn.net/lingerlanlan/article/details/25063331?utm_source=tuicool
明日から、研鑽を続けて勉強になります...