【发布时间】:2013-02-14 03:05:59
【问题描述】:
我已经仔细查看过,但找不到任何关于这个问题的参考。
我编写了一个 c++ 程序,我正在使用 boost/unit 进行测试。串行版本工作正常,单元测试工作正常。
现在,我通过一个函数使程序并行化,该函数与 MPI 进行了令人尴尬的并行工作。如果写下我自己的调用并行函数的测试——让我们称之为 parafunction——它运行良好,MPI 运行正常。
编译是用mpic++完成的,我用mpixec来运行程序。
但是,如果我在 boost 测试用例中调用 parafunction,MPI 就会出错,测试会多次启动,并且在调用多个 MPI::Init 时进程会崩溃。
这是我得到的错误示例:
在调用 MPI_FINALIZE 之后调用了 MPI_comm_size() 函数。
MPI 标准不允许这样做。
您的 MPI 作业现在将中止。
我的测试用例在 test_unit 上,由 master_test_suite 自动处理。正如我所说,如果没有并行化,它可以很好地工作。
函数调用MPI::Init 和MPI::Finalize,并且文件的其他函数不应该做任何与MPI 相关的事情。
有没有人遇到过类似的问题?
我的测试运行时间很长,因此我真的可以使用我的程序的并行版本!
感谢您的帮助
【问题讨论】:
-
如果我在 BOOST_AUTO_TEST_CASE 中执行所有并行化而不是调用 parafunction ...,也会发生同样的事情
标签: c++ testing mpi boost-test