【发布时间】:2021-02-21 07:23:58
【问题描述】:
E0020 标识符“__ffs”未定义
所有各种整数内在函数都相同。
失败的代码(它是一个方法定义;类定义了x,y,z):
__device__ uint32 lowbit()
{
if (x) return __ffs(x);
if (y) return 32 + __ffs(y);
if (z) return 64 + __ffs(z);
return 96;
}
我也试过这个(在我添加 __ffs 行之前一切正常:
__global__ void addKernel(int* c, const int* a, const int* b)
{
int i = threadIdx.x;
c[i] += a[i] + b[i];
int foo = __ffs(i);
}
之前的一个问题是关于智能的。就我而言,nvcc 编译器也看不到它们。
根据 CUDA 文档:
1.9。整数内在函数 本节介绍仅在设备代码中支持的整数内在函数。要使用这些函数,您不需要在程序中包含任何额外的头文件。
我正在使用 Visual Studio Community 2019,CUDA 11.2.0
【问题讨论】:
-
E0020 是 Visual Studio 错误而不是 nvcc 错误。您真的在正确设置的 CUDA 项目中的 .cu 文件中执行此操作吗?
-
是的,它是 .cu 文件包含的 .h 文件,该文件基于 VS 向导中的新 CUDA 项目。在添加该行之前,代码已编译并在我的设备上运行。但有趣的是,E0020 是一个 VS 错误。不知道该怎么做。
-
在VS中,有两个日志需要注意,错误日志和控制台日志。如果您将来询问 VS 构建失败,我的建议是包含由构建命令产生的完整控制台日志。这将使其他人有最好的能力来帮助你。在此处提取单行的单个部分(如果这是您所做的):
E0020 identifier "__ffs" is undefined不太有用。如果您实际上将其从错误日志中提取出来(通常只有 1 行这样的行),那么您可能会对 Intellisense 错误感到困惑,具体取决于日志设置/下拉列表
标签: cuda