代码之家  ›  专栏  ›  技术社区  ›  hfingler Jim Puls

结构故障,CUDA C/C++和VS 2008

  •  1
  • hfingler Jim Puls  · 技术社区  · 15 年前

    嘿,那里……所以我在这里使用的是VS2008,用CUDAC编程。我已经安装了3.2工具包并开始工作。

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

    #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一书中得到了这个代码,所以它应该是有效的。但当我点击build时,我会得到这个错误(第一个):

    error C2065: 'cudaError_t' : undeclared identifier

    然后,一场错误的海啸被附加,就像 uint2 未找到类型且未声明变量。

    有什么问题?cudarror_t在$(cuda_path_v3_2)include中定义,此路径位于我所需的include目录中。

    文件属性设置如下: Tool: CUDA Runtime API

    我之所以把它叫做IFNDEF,是因为我还没有弄明白如何在普通C++和CUDA C之间使用链接器,就像我有一个CUDA C的结构一样。 __global__ ` __device__ )还有一些正常的方法。如果我命名这个文件 .cu 然后在使用这个结构的普通C++代码中,打印一个错误,声明它没有被声明。

    我试图手动包括 driver_types.h 以及大量其他头文件,但编译器找不到任何头文件。

    对不起,如果我不清楚,我就困了。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    文件 .cu 扩展由nvcc处理,它自动包含CUDA特定的头,以便声明CUDA类型。当你说出名字的时候 .c / .cpp 您需要包含相关的头来获取类型。由于您使用的是运行时API,请尝试使用include cuda_runtime_api.h .

    事实上,你没有找到它们,这表明你的路径设置不正确。尝试向include路径中添加$(cuda_path)\include(请参见 this post 了解更多详细信息)。

    尽管如此,这里还是有一些顾虑…

    不需要将结构(或类)声明为 __global__ __device__ ,结构只是一个类型,类型是跨平台的。需要这些声明的地方是隐含存储的地方,即创建结构的实例或创建必须为设备编译的代码的地方。

    如果您只是声明一个结构,那么您应该能够在一个头文件中声明它,并将它包含在两个头文件中 CPP 没有问题的文件,如果没有问题,那么一定要发布一个包含更多细节的单独问题。

        2
  •  0
  •   Henry H    15 年前

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