如何将标志设置 nvcc pragma 仅应用于几行代码?

How do I apply a flag-setting nvcc pragma to only a few lines of code?

我想应用某个标志设置 nvcc pragma,比如关闭 noreturn_function_does_return 类型的警告 - 但仅适用于我的某个功能。

现在,在 this answer here on SO 中,它说我应该可以写:

#pragma push
#pragma diag_suppress = noreturn_function_does_return
...
#pragma pop

这确实可以解决我的问题;除了推送和弹出不起作用:我收到关于这两个编译指示被忽略的警告。另外,我无法弄清楚这应该如何影响其他警告标志(因为我猜它是 = 而不是 +=

那么有没有实际的方法来推送和弹出?或者至少 - 抑制然后取消抑制某个警告?

注意:我在 Devuan ASCII (~= Debian Stretch) 系统上使用 CUDA 9.2.88 nvcc 和 gcc 6.3.0。

无需赘述,使用最新版本的 CUDA(9.2.88、10.x 及更高版本)- 这应该可以解决问题:

#pragma diag_suppress = noreturn_function_does_return

... your code here ...

#pragma diag_default = noreturn_function_does_return

有关详细信息,请查看 the answer 最初链接到的问题,已更新...