0

[MPi-C++]

特定の条件下で、すべてのプロセスでアプリケーションを閉じる必要があるアプリケーションを作成しました。ルートプロセスを使用して作成しようとしましたが、他のすべてのプロセスにもメッセージを送信して終了させたいです。どうやってこれを作ることができますか?

4

1 に答える 1

1

通信なしですべてのプロセスでMPI アプリケーションを完全に終了する方法はありませんつまり、MPI アプリケーションのプロセスのサブセットでのみ発生する状態がある場合 (たとえば、プロセスの 1 つでエラーが発生した場合)、アプリケーションを一方的に終了する唯一の方法は、 を呼び出すことMPI_Abortです。これにより、各ランクがその時点でコードのどこにあったかに関係なく、すべての MPI プロセスが突然終了します。は集合的なルーチンではないためMPI_Abort、他のランクでクリーンアップを実行することはできません。

クリーンな終了を希望する場合は、すべてのランクですべてがまだ機能しているかどうか、または終了する時期であるかどうか、すべてのランク間で定期的に通信する必要があります。たとえば、操作として を定期的に呼び出すことができMPI_AllreduceますMPI_SUM。プロセスで終了条件が満たされた場合は1、データとして送信し、そうでない場合は send にします0MPI_Allreduceこれで、合計が よりも大きいかどうかを確認するだけで済み0、大きい場合は、アプリケーションを適切に終了します。

于 2012-07-04T22:29:48.170 に答える