"warning: __host__ annotation on a defaulted function is ignored" <- 为什么?

"warning: __host__ annotation on a defaulted function is ignored" <- why?

从 CUDA 8.0 切换到 CUDA 9.0 RC,我收到一条警告:

__host__ __device__ ~Foo() = default;

警告是:

path/to/Foo.cuh(69): warning: __host__ annotation on a defaulted function("~Foo") is ignored

我以前没用过。我真的应该收到这个警告吗?指示您想要设备端和主机端的默认析构函数有什么问题?

What's wrong with indicating you want the default destructor on both the device and the host side?

但这不是代码所说的。它说你想要主机和设备中的 same 琐碎的默认析构函数,这就是为什么会有警告,因为编译器(主机和设备)都不会发出相同的默认析构函数(并且因为编译轨迹的工作方式是不可能发生的)。

NVIDIA 声称最近的设备工​​具链支持 N2346。如果你想要这种行为(并且真正理解它需要什么),那么正确的代码应该是:

~Foo() = default;

两个编译器都会自动在两个代码中发出它们自己的默认析构函数,一切都会正常工作。

如果您想要针对现有代码库的 hacky 解决方法,请添加

-Xcudafe="--diag_suppress=2886" 

你的 nvcc 构建命令应该消除警告,尽管我建议不要抑制警告。

[答案已添加为评论讨论的摘要,以便将问题从 CUDA 标记的未回答列表中删除。 ]