“警告:默认函数上的__host__注释被忽略”< - 为什么?

时间:2017-09-28 12:22:13

标签: cuda destructor compiler-warnings nvcc

从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

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

1 个答案:

答案 0 :(得分:2)

  

指示在设备和主机端都需要默认析构函数有什么问题?

但这不是代码所说的。它说您要在主机和设备中都使用 same 普通的默认析构函数,这就是为什么会有警告的原因,因为这两个编译器(主机和设备)都不会发出相同的普通的默认析构函数(并且因为编译轨迹无法正常运行的方式。

NVIDIA声称最近的设备工​​具链支持N2346。如果您想要这种行为(并且实际上了解了它的含义),那么正确的代码应该是:

~Foo() = default;

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

如果您想要现有代码库的变通办法,请添加

-Xcudafe="--diag_suppress=2886" 

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

[回答添加为评论讨论的摘要,以消除CUDA标签未回答列表中的问题。 ]