1

私は徹底的に調べましたが、この問題への言及を見つけることができませんでした。

ブースト/ユニットでテストしているc ++プログラムを作成しました。シリアル バージョンは正常に動作し、単体テストは動作しています。
これで、MPI で恥ずかしいほど並列処理を行う関数を使用して、プログラムを並列化しました。並列関数 (パラ関数と呼びましょう) を呼び出している自分のテストを書き留めておけば、正常に機能しており、MPI は問題なく実行されます。
コンパイルは mpic++ で行い、mpixec を使用してプログラムを実行します。

ただし、ブースト テスト ケースで parafunction を呼び出すと、MPI がすべてうまくいかず、テストが複数回起動され、複数回MPI::Init呼び出されるとプロセスがクラッシュします。これが私が得るエラーの例です:

MPI_FINALIZE が呼び出された後に、MPI_comm_size() 関数が呼び出されました。

これは、MPI 標準では許可されていません。

MPI ジョブが中止されます。

私のテスト ケースは、master_test_suite によって自動的に処理される te​​st_unit にあります。並列化なしで言ったように、完全にうまく機能します。

Parafunction はMPI::InitMPI::Finalizeを呼び出します。ファイルのその他の関数は、MPI 関連のものを実行することは想定されていません。

誰かが以前に同様の問題に遭遇したことがありますか?

私のテスト実行はかなり長いので、プログラムの並列バージョンを実際に使用することができました!

ご協力いただきありがとうございます

4

1 に答える 1