我已经仔细查看过,但找不到任何关于这个问题的参考。
我编写了一个 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
and MPI::Finalize
,并且文件的其他函数不应该做任何与 MPI 相关的事情。
有没有人遇到过类似的问题?
我的测试运行时间很长,因此我真的可以使用我的程序的并行版本!
谢谢你的帮助