【问题标题】:Defining uint="unsigned int" is not being applied as I expected using nvcc in Visual Studio没有像我预期的那样在 Visual Studio 中使用 nvcc 定义 uint="unsigned int"
【发布时间】:2020-01-02 07:15:47
【问题描述】:

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

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

在应用程序的属性中,只有 CUDA => 主机 => 我放入的预处理器定义

WIN32;uint="unsigned int"

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

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

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

【问题讨论】:

  • 老式的typedef unsigned int uint;,或者简单的#define uint unsigned int有什么问题?
  • 这没有错。维护 Linux 版本代码的人会简单地将其删除。希望他们会在我构建完我的 Windows 版本后将其删除。

标签: c++ cuda nvcc


【解决方案1】:

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

typedef unsigned int uint;
typedef unsigned short ushort;

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

【讨论】:

    猜你喜欢
    • 2022-12-29
    • 2016-11-27
    • 2016-06-19
    • 2013-04-11
    • 1970-01-01
    • 2019-11-18
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多