2010-11-23 82 views
1

嘿有...所以我在这里使用VS2008,使用CUDA C编程。我安装了3.2工具包并正在工作。结构问题,CUDA C/C++和VS 2008

现在我的问题是,我有这样一个文件:

#ifndef _cuda_rng_cu_included_ 
#define _cuda_rng_cu_included_ 

#include <stdio.h> 


static void HandleError(cudaError_t err, 
         const char *file, 
         int line) { 
    if (err != cudaSuccess) { 
     printf("%s in %s at line %d\n", cudaGetErrorString(err), 
       file, line); 
     exit(EXIT_FAILURE); 
    } 
} 
#define HANDLE_ERROR(err) (HandleError(err, __FILE__, __LINE__)) 

//some other struct 

我从书CUDA通过实例验证码,所以它应该工作..但是当我击筑我得到这个错误(第一):

error C2065: 'cudaError_t' : undeclared identifier

,然后错误的海啸被附加,像uint2类型不被发现和变量不被声明。

可能是什么问题? cudaError_t在$(CUDA_PATH_V3_2)\ include中定义,并且此路径位于我所需的include目录中。

文件属性设置喜欢:Tool: CUDA Runtime API

我把那的#ifndef,因为我还没有想出如何使用CUDA C.像普通C之间的连接++和工作,如果我有两个一个struct CUDA C(__global__` __device__)以及一些常规方法。如果我将这个文件命名为.cu,那么在使用此结构的普通C++代码中会打印一条错误消息,说明它未被声明。

我试图手动包含driver_types.h和其他大量的头文件,但编译器找不到它们。

对不起,如果我不清楚,我很困。

回答

3

扩展名为.cu的文件由nvcc处理,该文件自动包含CUDA特定的头文件,以便声明CUDA类型。当您将其命名为.c/.cpp时,您需要包含相关标题以获取类型。由于您使用的是运行时API,请尝试包括cuda_runtime_api.h

事实上,你没有找到它们表明你的路径没有被正确设置。尝试将$(CUDA_PATH)\ include添加到包含路径中(有关更多详细信息,请参见this post)。

话虽如此,这里还有关注...

你并不需要声明一个结构(或类)作为__global____device__,该结构仅仅是一个类型,类型为交叉平台。您需要这些声明的地方是存储隐含的位置,即创建结构实例或创建必须为设备编译的代码的位置。

如果您只是声明一个结构,那么你应该能够宣称它在头文件并将其包含在这两个.cpp.cu文件没有问题,如果没有然后通过各种手段发布更多的细节一个单独的问题。

+0

我看到那篇文章一次,我忘了在这个新项目中做。但仍然无效。我现在可以包含cuda.h,cuda_runtime.h和其他,并且未声明的标识符会消失。但是现在我得到另一个错误:`'threadIdx':未声明的标识符`。他妈的..感觉就像我应该在Linux上这样做... – hfingler 2010-11-23 18:43:27

0

您是否正确设置了包含路径?这将解释为什么编译器不能找到包含文件。