如何设置我的代码/ VS10识别.c文件中的CUDA函数调用?(How do I set up my

2019-09-17 18:21发布

基本上,我有编译器在编译我的.CU文件,我已(我认为).CU那些文件中的全部操作,但是当我尝试打电话给他们( kernel<<<1,1>>>(void) )中,编译器寄存器由于CUDA句法语法错误。 此外,呼吁像cudaMalloc C文件中失败。

这里有三个非常短的文件,所以我可以告诉你在那里示数。

//kernel.cu    
#include "kernel.h"
#include <cuda.h>
#include <cuda_runtime_api.h>

__global__ int kernel(void){     
    return 5;
}

//kernel.h
#ifndef _KERNEL_h_
#define _KERNEL_h_

extern "C" int kernel(void);

#endif

//main.c
#include "kernel.h"
#include <cuda.h>
#include <cuda_runtime_api.h>

int main() {
   int* device_a;

   cudaMalloc( (void**)&device_a, sizeof(int) );

   kernel<<<1,1>>>();
}

我从一些SDK例子拿到了头文件。 另外,我有我的构建配置设置与CUDA 4.2,所以为什么.CU文件编译。 如果我做了任何意外的语法错误,那是因为我简化它张贴,不,它实际上是在源,但请注明以防万一。

kernel.cu编译罚款。

kernel.h当有一个错误:在“外部...”行“‘串’错误C2059:语法错误”。 (难道这是因为我把从C ++的例子吗?)

main.c中有一个错误:“错误C2065:内核:未声明的标识符”

和: “错误C2059:语法错误: '<'”

但是当我注释掉内核调用,所以它只是cudaMalloc,我得到:“错误LNK2019:解析外部符号_cudaMalloc @ 8函数_main中引用”

和:“致命错误LNK1120:1周无法解析的外部”

它说的是使用Visual Studio 2010,或者是什么我不包括? 从SDK的例子,我不知道我做错了什么,其他然后他们找到了一种方法,我认为,不使用三架(CTRL + F没有发现任何)。 任何帮助表示赞赏。 先感谢您!

编辑:在看一些例子后,他们用三重括号语法就好了。

编辑: 对于使用此作为参考的__global__函数只能返回void。 如果您尝试其他任何回报,像我一样,你会收到编译器错误。

Answer 1:

  1. 把那个调用CUDA内核.CU文件的功能。

  2. 设置VS2010编译CU文件与CUDA编译器,而不是建立在一个(使用CUDA规则文件(Cuda.props,Cuda.xml,Cuda.targets)位于CUDA SDK内)。

  3. 我建议将内核中的文件扩展名不同(如.curnel文件),因此它们不会被直接编译(仅当调用)。

  4. 我建议把来调用CUDA内核中.cuh文件中的函数的声明。



文章来源: How do I set up my code/VS10 to recognize CUDA function calls within .c files?