【发布时间】:2019-07-10 14:24:50
【问题描述】:
我正在开发一个使用 CUDA 开发工具包版本 10.1 的程序,并且我正在使用 Visual Studio 2012。 我在 Windows 上工作,但我与 linux 用户共享代码。所有代码在这两种情况下都可以正常工作,除了一些在 linux 上工作但在 windows 上不工作的代码行。所以每次我都必须改变这些行。我会避免这样做,并且由于在 linux 上代码编译良好,我认为在 windows 上无法编译有一些原因,但这些原因肯定不是关于代码,而是关于一些 Visual Studio 设置或相似的。你能帮助我吗? 特别是代码行是:
int n_devices = 0;
cudaGetDeviceCount(&n_devices);
cudaDeviceProp props[n_devices];
在最后一行我有错误:
错误:表达式必须有一个常量值
我可以修复这个错误,定义const int n_devices = 1; 并注释函数cudaGetDeviceCount(&n_devices);。它之所以有效,是因为我已经知道正确数量的设备,但肯定比前一个解决方案更不正确。
另一个问题是我有一个 utils.cuh 文件,其中定义了两个 const 值
const float PI = 3.141592654f;
const float EPS = 1e-3f;
我在 utils.cu 文件中调用这两个值,在编译时出现错误:
错误:设备代码中未定义“PI”
错误:设备代码中未定义“EPS”
我可以用这种方式声明这两个变量来解决这个问题:
#define PI 3.141592654f
#define EPS 1e-3f
因此,即使我可以解决所有两个问题,我也真的希望将代码保留在第一个配置中(因为它适用于 linux)。可能是与编译器版本有关的问题?真不知道是什么原因。
【问题讨论】:
标签: c++ visual-studio-2012 compiler-errors cuda