首页 > 解决方案 > 没有像我预期的那样在 Visual Studio 中使用 nvcc 定义 uint="unsigned int"

问题描述

抱歉,坚持使用 VS2013,但我认为这不是问题。相同的代码在 linux 上可以正确编译。我假设我需要定义 uint 而不是编辑 100 多行代码。我在下面代码的第一行收到“错误:缺少显式类型(假定为“int”)”

__device__ uint inline get_smid(void)
{
  uint ret;
  asm("mov.u32 %0, %%smid ;" : "=r"(ret) );
  return ret; 
}

在应用程序的属性中,我输入的只有 CUDA => Host => Preprocessor Definitions

WIN32;uint="unsigned int"

这似乎修复了“假定的 int”,但现在我得到“错误:预期的声明”在源代码中用 unsigned int 替换 uint 将编译没有错误。有很多 uint,这与 linux 构建不同。除了'uint="unsigned int"'之外还需要更多吗?也许是一个开关导致 NVCC 接受 uint 而不给出错误?

刚刚发现了很多 ushort,我猜同样的问题。此外,查看 Linux 版本,源代码是使用 gcc 编译的,但链接是使用 nvcc 完成的,因此存在差异。

====示例 CUDA 有 ushort==== 我一定没有正确设置包含,因为这些变量可能可以使用。

标签: c++cudanvcc

解决方案


我放弃了尝试像示例 CUDA 程序那样定义 uint 或 ushort

typedef unsigned int uint;
typedef unsigned short ushort;

所以我只是把它们放在每个需要它的 cu 文件中。


推荐阅读