問題タブ [barrier]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - カスタム MPI Communicator を使用した MPI_Barrier
次のように、MPI_COMM_WORLD のプロセスのサブセットに MPI_Barrier を設定しようとしています。
(ranks
は必要なランクの配列で、num
はこの配列のサイズです) 上記のコードは、MPI_Barrier で NULL コミュニケーター エラーになります。
私も次のことを試しました:
(color
現在のランクが必要なサブセットにある場合は 1 に設定され、それ以外の場合は 0 に設定されます) 上記のコードは効果がなく、バリアはまったく機能していないようです。
どんな助けでも大歓迎です、ありがとう:)
c - MPI_Barrier - 一部のプロセスのみがバリアを通過する
一部のプロセスのみが関数をバイパスする状況に直面していMPI_Barrier
ます。
この問題は、次のコード フラグメントに現れます。
4 つのプロセスで実行した後、次の出力が得られます。
そして、アプリケーションがフリーズします。
すべてのプロセスがメッセージを出力できることを期待していましたが、[id] After barrier
プロセスのみがメッセージを1
出力しました。
すべてのプロセスがバリアを通過しないのはなぜですか?
次のような出力を期待していました。
Docker内のcentosでopenmpiを使用しています。アプリケーションはいくつかのスレッドを開始しますが、表示されたフラグメントはその中にありません。
java - 待機中のすべてのスレッドを解放する
バリアポイントをシミュレートするこのクラスを書いています。スレッドがこのバリア ポイントに到達すると、他のスレッドもこのポイントに到達するまで先に進むことができません。この時点で到着したスレッドの数を追跡するためにカウンターを使用しています。クラスは N+1 スレッドを想定しているが、N スレッドしか与えられていないと仮定します。この場合、プログラムは、到着するスレッドがまだ 1 つあると見なすため、すべてのスレッドを待機させます。
バリア ポイントに到達するスレッドがまだあるとプログラムが認識しているかどうかに関係なく、待機中のすべてのスレッドを解放できるメソッドを作成したいと考えています。
すべてのスレッドを待機する私のプログラム、
メソッドを呼び出すメソッドを作成するだけでsignalAll()
、すべてのスレッドが解放されると考えていました。ただし、私が抱えている問題は、プログラムがより多くのスレッドを期待している場合、20 行目で待機するため、ロックを維持することです。
このロックを回避する方法はありますか? この問題にどのようにアプローチすればよいですか?