私は徹底的に調べましたが、この問題への言及を見つけることができませんでした。
ブースト/ユニットでテストしているc ++プログラムを作成しました。シリアル バージョンは正常に動作し、単体テストは動作しています。
これで、MPI で恥ずかしいほど並列処理を行う関数を使用して、プログラムを並列化しました。並列関数 (パラ関数と呼びましょう) を呼び出している自分のテストを書き留めておけば、正常に機能しており、MPI は問題なく実行されます。
コンパイルは mpic++ で行い、mpixec を使用してプログラムを実行します。
ただし、ブースト テスト ケースで parafunction を呼び出すと、MPI がすべてうまくいかず、テストが複数回起動され、複数回MPI::Init
呼び出されるとプロセスがクラッシュします。これが私が得るエラーの例です:
MPI_FINALIZE が呼び出された後に、MPI_comm_size() 関数が呼び出されました。
これは、MPI 標準では許可されていません。
MPI ジョブが中止されます。
私のテスト ケースは、master_test_suite によって自動的に処理される test_unit にあります。並列化なしで言ったように、完全にうまく機能します。
Parafunction はMPI::Init
とMPI::Finalize
を呼び出します。ファイルのその他の関数は、MPI 関連のものを実行することは想定されていません。
誰かが以前に同様の問題に遭遇したことがありますか?
私のテスト実行はかなり長いので、プログラムの並列バージョンを実際に使用することができました!
ご協力いただきありがとうございます