假设我有充分的理由做以下事情(我想我有),如何让它发挥作用?
#include "mpi.h"
int main( int argc, char *argv[] )
{
int myid, numprocs;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
// ...
MPI_Finalize();
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
// ...
MPI_Finalize();
return 0;
}
我得到了错误:
--------------------------------------------------------------------------
Calling any MPI-function after calling MPI_Finalize is erroneous.
The only exceptions are MPI_Initialized, MPI_Finalized and MPI_Get_version.
--------------------------------------------------------------------------
*** An error occurred in MPI_Init
*** after MPI was finalized
*** MPI_ERRORS_ARE_FATAL (your MPI job will now abort)
[ange:13049] Abort after MPI_FINALIZE completed successfully; not able to guarantee that all other processes were killed!
这样做的原因:
我用 Python 封装了 C++ 代码。一些包装类具有调用 MPI_Init 的构造函数和调用 MPI_Finalize 的析构函数。我希望能够在 Python 中自由创建、删除重新创建包装这个 C++ 类的 Python 对象。最终目标是完全在 Python 中创建一个 Web 服务,一次导入 Python C++ 扩展,并根据用户请求执行一些 Python 代码。
编辑:我想我会重构 C++ 代码,以便在构造函数和析构函数中不使用 MPI_Init 和 MPI_Finalize,因此可以在 Python 脚本中只执行一次(使用 mpi4py)。