次のことを行う正当な理由があると仮定すると(私は持っていると思います)、どのように機能させるのですか?
#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!
そうする理由:
C++コードをPythonでラップしています。一部のラップされたクラスには、MPI_Init を呼び出すコンストラクターと MPI_Finalize を呼び出すデストラクタがあります。この C++ クラスをラップする Python オブジェクトを Python で自由に作成、削除、再作成できるようにしたいと考えています。最終的な目標は、完全に Python で Web サービスを作成し、Python C++ 拡張機能を一度インポートして、ユーザーの要求に応じて Python コードを実行することです。
編集: C++ コードをリファクタリングして、コンストラクターとデストラクタで MPI_Init と MPI_Finalize を使用しないようにすると思います。そのため、Python スクリプトで (mpi4py を使用して) 1 回だけ実行できます。