如何隐藏 NVCC 的“函数已声明但从未引用”警告?
Posted
技术标签:
【中文标题】如何隐藏 NVCC 的“函数已声明但从未引用”警告?【英文标题】:How to hide NVCC's "function was declared but never referenced" warnings? 【发布时间】:2018-04-14 21:35:55 【问题描述】:在编译使用 Google Test 的 CUDA 程序时,nvcc
会发出误报警告:
函数
已声明但从未被引用
一个 MCVE:
// test.cu
#include <gtest/gtest.h>
namespace
__global__ void a_kernel()
printf("Works");
TEST(ExampleTest, ExampleTestCase)
a_kernel<<<1, 1>>>();
编译它给出:
$ nvcc test.cu -lgtest -lgtest_main
test.cu(9): warning: function "<unnamed>::ExampleTest_ExampleTestCase_Test::ExampleTest_ExampleTestCase_Test()" was declared but never referenced
google test 和 CUDA 9.1 的 master 分支证实了这一点(我相信它从 CUDA 9.0 开始发生,并且该错误在 CUDA 8.0 中不存在)。如果测试位于全局命名空间中,则不会发生此问题。
有没有办法禁用这些警告?我知道我可以使用-w
禁用所有警告,但我想保留其他类型的警告。
【问题讨论】:
不是你问题的真正答案,但如果你需要一个解决方案来删除这个警告,并且 (a) 不介意在 gtest 内部更改一行并且 (b) 你可以使用 c ++11:转到gtest-internal.h 并将
替换为= default;
。
【参考方案1】:
你可以试试蛮力方法:
#pragma push
#pragma diag_suppress 177 // suppress "function was declared but never referenced warning"
.. your function ..
#pragma pop
【讨论】:
谢谢,这行得通。幸运的是,NVIDIA 在 CUDA 9.2 中修复了该问题,因此不再出现误报,但对于使用较旧编译器的用户来说,这仍然是件好事。只是,您能否更新答案并解释此177
代码来自何处(即如何找到此代码)?万一看到这个问题的人有类似的问题,会有不同的警告。那我就接受答案了。
很高兴你问到 :) 我花了很长时间试图找到 nvcc 的代码,一旦我因缺乏信息而感到沮丧,我编写了一个脚本,生成了一系列“ diag_suppress" 行从 0 到 5000 左右,然后手动二进制搜索正确的代码...我希望 NVidia 在某处有错误列表...
@MaximMakhinya 我认为错误代码取决于前端,这里是一个列表 ssl.berkeley.edu/%7Ejimm/grizzly_docs/SSL/opt/intel/cc/9.0/lib/… ,这是一个带有数字代码的列表:ece.ualberta.ca/~cmpe490/documents/ghs/405/c_error_ref.pdf 。看起来您的数字代码与该特定警告不对应,或者数字前的零可能很重要。以上是关于如何隐藏 NVCC 的“函数已声明但从未引用”警告?的主要内容,如果未能解决你的问题,请参考以下文章