如何设置代码/VS10以识别.c文件中的CUDA函数调用?
基本上,我让编译器编译我的.cu文件,并且(我认为)在这些.cu文件中有完整的操作,但是当我尝试调用它们时(如何设置代码/VS10以识别.c文件中的CUDA函数调用?,c,visual-studio-2010,build,compiler-errors,cuda,C,Visual Studio 2010,Build,Compiler Errors,Cuda,基本上,我让编译器编译我的.cu文件,并且(我认为)在这些.cu文件中有完整的操作,但是当我尝试调用它们时(kernel(void)),编译器会注册由于CUDA语法而导致的语法错误。此外,像cudamaloc这样的调用在c文件中失败 这里有三个很短的文件,所以我可以告诉你哪里出错 //kernel.cu #include "kernel.h" #include <cuda.h> #include <cuda_runtime_api.h> __global__ i
kernel(void)
),编译器会注册由于CUDA语法而导致的语法错误。此外,像cudamaloc这样的调用在c文件中失败
这里有三个很短的文件,所以我可以告诉你哪里出错
//kernel.cu
#include "kernel.h"
#include <cuda.h>
#include <cuda_runtime_api.h>
__global__ int kernel(void){
return 5;
}
及
//main.c
#包括“kernel.h”
#包括
#包括
int main(){
int*设备_a;
Cudamaloc((void**)和设备_a,sizeof(int));
内核();
}
我从一些SDK示例中获得了头文件。此外,我的构建配置设置为CUDA 4.2,因此.cu文件可以编译。如果我偶然犯了语法错误,那是因为我为了发布而简化了它,而不是因为它实际上在源代码中,尽管为了以防万一请提及它
kernel.cu编译得很好
h有一个错误:“错误C2059:语法错误:'string'”在“extern…”行上。(这是因为我从C++例子中得到的吗?)< /P>
c有一个错误:“错误C2065:‘内核’:未声明的标识符”
和:“错误C2059:语法错误:”
搜索结果产生了这个指南(我没有读过,所以我对它的正确性不承担任何责任):我想,我已经设置了编译配置,可以用CUDA编译器编译.cu文件。我在.cu文件中放了一个调用内核的函数,但该函数的括号中仍然有语法错误。在我看来,.cu和.c文件似乎互不了解,因为即使在.cu文件编译时,主要的乐趣还是存在的Action无法调用.cu和.c文件中的普通c函数。这些.cu和.c文件应该只看到它们在includes部分中引用的.cuh和.h文件。链接器将它们连接起来。添加35; ifdef CUDACC(不记得确切的语法-检查SDK)请在每个.cu文件的上方单击以确保编译定义正确。@EricThoma:您是否记得为.cu文件中的函数创建一个头文件并#将其包含在您的.c文件中?@EricThoma:Re.语法错误,只要该文件编译.VC++就可以像检查.c文件一样检查该文件的语法错误。您可以可以让它保持原样,但如果您想修复它:您如何成功编译并运行内核不会返回void?我没有。这是我后来发现的另一个缺陷。不过它注册了一个非常明显的编译器错误。
//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>>>();
}