CUDA: 不要在一个.cpp文件中声明kernel(即以_global_和_device_的函数)

来源:互联网 发布:搜索引擎优化排名 编辑:程序博客网 时间:2024/05/29 03:33

源于网上的一个材料。

头文件kernel.h

extern __global__ void kernel();
实现文件kernel.cu

#include <stdio.h>#include "kernel.h"__global__ void kernel(){  printf("hello world!");}

测试test.cu:

#include "kernel.h"int main(void){  kernel<<<1,1>>>();  cudaDeviceSynchronize();return 0;}
问题来了, 如果将test.cu改为test.cpp, 就会出现问题

make all Building file: ../src/test2.cppInvoking: 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:16: 错误: 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

从明天起, 继续钻研深度学习了。。。。。。

0 0
原创粉丝点击