[MPi-C++]
特定の条件下で、すべてのプロセスでアプリケーションを閉じる必要があるアプリケーションを作成しました。ルートプロセスを使用して作成しようとしましたが、他のすべてのプロセスにもメッセージを送信して終了させたいです。どうやってこれを作ることができますか?
[MPi-C++]
特定の条件下で、すべてのプロセスでアプリケーションを閉じる必要があるアプリケーションを作成しました。ルートプロセスを使用して作成しようとしましたが、他のすべてのプロセスにもメッセージを送信して終了させたいです。どうやってこれを作ることができますか?
通信なしですべてのプロセスでMPI アプリケーションを完全に終了する方法はありません。つまり、MPI アプリケーションのプロセスのサブセットでのみ発生する状態がある場合 (たとえば、プロセスの 1 つでエラーが発生した場合)、アプリケーションを一方的に終了する唯一の方法は、 を呼び出すことMPI_Abort
です。これにより、各ランクがその時点でコードのどこにあったかに関係なく、すべての MPI プロセスが突然終了します。は集合的なルーチンではないためMPI_Abort
、他のランクでクリーンアップを実行することはできません。
クリーンな終了を希望する場合は、すべてのランクですべてがまだ機能しているかどうか、または終了する時期であるかどうか、すべてのランク間で定期的に通信する必要があります。たとえば、操作として を定期的に呼び出すことができMPI_Allreduce
ますMPI_SUM
。プロセスで終了条件が満たされた場合は1
、データとして送信し、そうでない場合は send にします0
。MPI_Allreduce
これで、合計が よりも大きいかどうかを確認するだけで済み0
、大きい場合は、アプリケーションを適切に終了します。