从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
我以前没用过。我真的应该得到这个警告吗?在设备和主机端都需要默认的析构函数有什么问题?
答案 0 :(得分:2)
指示在设备和主机端都需要默认析构函数有什么问题?
但这不是代码所说的。它说您要在主机和设备中都使用 same 普通的默认析构函数,这就是为什么会有警告的原因,因为这两个编译器(主机和设备)都不会发出相同的普通的默认析构函数(并且因为编译轨迹无法正常运行的方式。
NVIDIA声称最近的设备工具链支持N2346。如果您想要这种行为(并且实际上了解了它的含义),那么正确的代码应该是:
~Foo() = default;
两个编译器都会自动在两个代码中发出自己的琐碎析构函数,一切都将正常工作。
如果您想要现有代码库的变通办法,请添加
-Xcudafe="--diag_suppress=2886"
您的nvcc构建命令应消除该警告,尽管我建议不要抑制警告。
[回答添加为评论讨论的摘要,以消除CUDA标签未回答列表中的问题。 ]