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
吗?还是我必须完全不同地处理这个问题?
附加信息:
- 测试是通过
gtest_discover_tests()
添加的。
- 直接使用 MPI (
mpirun -n 3 testExe
) 启动测试可执行文件会产生成功的测试,但我更喜欢使用 ctest
.
- 版本信息:
- 谷歌测试:1.11.0
- MPI:OpenMPI 4.0.3 和 MPICH 3.3.2
根据 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。
我正在尝试使用 googleTest 构建一些测试,这些测试应该测试一些 MPI 并行代码。理想情况下,我希望我们的 CI 服务器通过 ctest
.
我天真的方法是用 MPI
:
mpirun -n 3 ctest
但是,只要至少执行了两个测试,即使是微不足道的测试也会失败。
简单测试示例:
TEST(TestSuite, DummyTest1) {
EXPECT_TRUE(true);
}
TEST(TestSuite, DummyTest2) {
EXPECT_TRUE(true);
}
我应该以其他方式启动 ctest
吗?还是我必须完全不同地处理这个问题?
附加信息:
- 测试是通过
gtest_discover_tests()
添加的。 - 直接使用 MPI (
mpirun -n 3 testExe
) 启动测试可执行文件会产生成功的测试,但我更喜欢使用ctest
. - 版本信息:
- 谷歌测试:1.11.0
- MPI:OpenMPI 4.0.3 和 MPICH 3.3.2
根据 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。