c - 如何设置我的代码/VS10 以识别 .c 文件中的 CUDA 函数调用?

标签 c visual-studio-2010 build compiler-errors cuda

基本上,我让编译器编译我的 .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 有一个错误:“error C2059: syntax error : 'string'” 在“extern...”行。 (这可能是因为我从 C++ 示例中获取了它吗?)

main.c 出现错误:“error C2065: 'kernel': undeclared identifier”

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

但是当我注释掉内核调用时,它只是 cudaMalloc,我得到:“error LNK2019: unresolved external symbol _cudaMalloc@8 referenced in function _main”

和:“ fatal error LNK1120:1 个 Unresolved external 因素”

它是 Visual Studio 2010 的东西,还是我没有包括的东西?从 SDK 示例中,我无法判断我做错了什么,除此之外,我认为他们找到了一种不使用三重括号的方法(CTRL+F 没有找到)。任何帮助表示赞赏。提前致谢!

编辑:在查看了更多示例之后,他们确实很好地使用了三重括号语法。

编辑:对于那些以此为引用的人__global__函数只能返回 void。如果您像我一样尝试返回任何其他内容,您将收到编译器错误。

最佳答案

  1. 将调用CUDA内核的函数放在.cu文件中。

  2. 设置 VS2010 以使用 CUDA 编译器编译 CU 文件,而不是内置编译器(使用位于 CUDA SDK 中的 CUDA 规则文件(Cuda.props、Cuda.xml、Cuda.targets))。

  3. 我建议将内核放在具有不同扩展名的文件中(例如 .curnel 文件),这样它们就不会被直接编译(仅在调用时)。

    <
  4. 我建议将调用 CUDA 内核的函数的声明放在 .cuh 文件中。

关于c - 如何设置我的代码/VS10 以识别 .c 文件中的 CUDA 函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10886104/

相关文章:

你能解释一下这段代码对我来说是如何工作的吗?

c++ - c++ : fread() 中奇怪的文件读取问题

mysql - 从 datagridview 中删除记录

asp.net - (ASP.NET) 项目文件必须包含 'WindowsBase, PresentationCore, PresentationFramework'

android - Gradle构建永远不会在Android Studio中停止

ios - 博览会:没有为具有捆绑标识符的应用程序配置凭据

c - 检索可用的 YouTube 视频格式

c# - 使用任务在多线程 C# 中进行异常跟踪

c++ - #error 请为 _AFXDLL 构建使用/MD 开关

c - 外部变量