ctest 和 MPI 并行测试

ctest and MPI parallel tests

我正在尝试使用 googleTest 构建一些测试,这些测试应该测试一些 MPI 并行代码。理想情况下,我希望我们的 CI 服务器通过 ctest.

执行它们

我天真的方法是用 MPI:

简单地调用 ctest
mpirun -n 3 ctest

但是,只要至少执行了两个测试,即使是微不足道的测试也会失败。

简单测试示例:

TEST(TestSuite, DummyTest1) {
  EXPECT_TRUE(true);
}
TEST(TestSuite, DummyTest2) {
  EXPECT_TRUE(true);
}

我应该以其他方式启动 ctest 吗?还是我必须完全不同地处理这个问题?

附加信息:

根据 this CMake 论坛 post,链接到合并请求和 CMake GitLab 存储库中的问题,gtest_discover_tests() 目前根本不支持 MPI。

一个可能的解决方法是滥用 CROSSCOMPILING_EMULATOR 属性 将包装器注入测试命令。但是,这会改变整个目标,而不仅仅是测试,因此您的里程可能会有所不同。

set_property(TARGET TheExe PROPERTY CROSSCOMPILING_EMULATOR '${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} 3')
gtest_discover_tests(TheExe)

有关完整的最小示例,请参阅论坛 post。