在编译使用Google Test的CUDA程序时,nvcc
会发出误报警告:
功能< name>被宣布但从未被引用
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
谷歌测试和CUDA 9.1的主分支证实了这一点(我相信它开始发生在CUDA 9.0中,并且CUDA 8.0中没有该错误)。如果测试位于全局命名空间中,则不会发生此问题。
有没有办法禁用这些警告?我知道我可以使用-w
来停用所有警告,但我想保留其他类型的警告。
答案 0 :(得分:2)
您可以尝试蛮力方式:
#pragma push
#pragma diag_suppress 177 // suppress "function was declared but never referenced warning"
.. your function ..
#pragma pop