ein*_*ica 5 destructor cuda compiler-warnings nvcc
从CUDA 8.0切换到CUDA 9.0 RC,我收到以下警告:
__host__ __device__ ~Foo() = default;
Run Code Online (Sandbox Code Playgroud)
警告是:
path/to/Foo.cuh(69): warning: __host__ annotation on a defaulted function("~Foo") is ignored
Run Code Online (Sandbox Code Playgroud)
我以前没用过。我真的应该得到这个警告吗?指示要在设备和主机端都使用默认析构函数有什么问题?
指示您希望在设备端和主机端都使用默认析构函数有什么问题?
但这不是代码所说的。它表示您希望在主机和设备中使用相同的简单默认析构函数,这就是为什么会出现警告,因为编译器(主机和设备)都不会潜在地发出相同的默认析构函数(并且因为编译轨迹的工作方式是不可能发生)。
NVIDIA声称最近的设备工具链支持N2346。如果您想要这种行为(并且真正理解它的含义),那么正确的代码应该是:
~Foo() = default;
Run Code Online (Sandbox Code Playgroud)
两个编译器都会在代码中自动发出自己的默认析构函数,一切都会正常工作。
如果您想要对现有代码库采取一种巧妙的解决方法,请添加
-Xcudafe="--diag_suppress=2886"
Run Code Online (Sandbox Code Playgroud)
尽管我建议不要抑制警告,但您的 nvcc 构建命令应该消除警告。
[添加答案作为评论讨论摘要,以将问题从 CUDA 标签的未答复列表中删除。]
归档时间: |
|
查看次数: |
758 次 |
最近记录: |