gpt4 book ai didi

c++ - 结构、CUDA C/C++ 和 VS 2008 的问题

转载 作者:行者123 更新时间:2023-11-30 03:09:15 24 4
gpt4 key购买 nike

嘿...所以我在这里使用 VS2008,使用 CUDA C 编程。我安装了 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 书中获得了这段代码,所以它应该可以工作..但是当我点击构建时,我得到了这个错误(第一个):

error C2065: 'cudaError_t' : undeclared identifier

然后会附加大量错误,例如 uint2未找到类型且未声明变量。

可能是什么问题? cudaError_t 在 $(CUDA_PATH_V3_2)\include 中定义,此路径在我需要的包含目录中。

文件属性设置为:Tool: CUDA Runtime API

我放#ifndef 是因为我还没有弄清楚如何使用普通 C++ 和 CUDA C 之间的链接器。就像如果我有一个同时包含 CUDA C(__global__` __device__)和一些普通的结构方法。如果我将此文件命名为 .cu然后在使用此结构的普通 C++ 代码中会打印一个错误,说明它未声明。

我试图手动包含 driver_types.h和大量其他 header ,但编译器都找不到。

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

最佳答案

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

您找不到它们的事实表明您的路径设置不正确。尝试将 $(CUDA_PATH)\include 添加到包含路径(有关详细信息,请参阅 this post)。

话虽如此,这里还是有些顾虑……

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

如果您只是简单地声明一个结构,那么您应该能够在头文件中声明它并将其包含在 .cpp.cu 文件中,没有任何问题,如果没有,则一定要发布一个包含更多详细信息的单独问题。

关于c++ - 结构、CUDA C/C++ 和 VS 2008 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4253158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com