問題タブ [communicator]
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.
mpi - コミュニケーターとMPIのグループの違いは何ですか?
私はこれらの用語の定義を読みましたが、私の解釈では、グループとコミュニケーターの間には1対1の関係があります。グループは、相互に通信することを望む一連のプロセスであり、コミュニケーターはグループの実装です。
これは正しいです?もしそうなら、なぜ2つの異なる用語があるのですか?
mpi - MPI_COMM_split を使用した後のプロセスのランク間の関係
MPI_Comm_split を使用して、デフォルトの MPI コミュニケーターを分割しました。最初にデフォルトのコミュニケーター MPI_COMM_WORLD に 10 個のプロセスがあった場合、それらのランクは id_original によって識別されました。新しいコミュニケーターは、id_original 6,7,8,9 を持つ 4 つのプロセスで構成されていました。これらのプロセスは、新しいコミュニケーターの id_new によって定義されたランクを持ちます。これら 2 つのコミュニケーターにおけるプロセスのランク間の関係はどうなるでしょうか。id_original が 6,7,8,9 のプロセスは、新しいコミュニケーターでそれぞれ新しいランク 0,1,2,3になりますか、それとも順序が異なる可能性がありますか?
mpi - MPIタスクをホストごとにグループ化
クラスターの各マシンで個別に集合通信を簡単に実行したい。それぞれに8コアのマシンが4台あるとすると、MPIプログラムは32個のMPIタスクを実行します。私が欲しいのは、与えられた関数についてです:
- 各ホストでは、1つのタスクのみが計算を実行し、他のタスクはこの計算中に何も実行しません。私の例では、4つのMPIタスクが計算を行い、他の28のタスクが待機しています。
- 計算が完了すると、それぞれの各MPIタスクは、ローカルタスク(同じホストで実行されているタスク)に対してのみ集合通信を実行します。
概念的には、ホストごとに1つのコミュニケーターを作成する必要があることを理解しています。私は周りを検索しましたが、それを明示的に行っているものは何も見つかりませんでした。私はMPIグループやコミュニケーターにあまり慣れていません。ここに私の2つの質問があります:
MPI_Get_processor_name
そのような振る舞いには十分にユニークですか?- より一般的には、それを行うコードがありますか?
c - MPI:コミュニケーター内の(プロセスではなく)ノードの数を取得する
私はSMPスーパーコンピューターでMPIプログラムを使用しています。たとえば、同じノード上のすべてのプロセスで等しく、ノードごとに異なる整数キーを設定することによって、どのプロセスが同じノードを共有しているかを特定したいと思います。目標は、このキーを使用してコミュニケーターを分割し、サブコミュニケーターが同じノード内のプロセスのみを収集するようにすることです。
したがって、関数は次のようになります
node_1の0,1,2,3、node_2の4,5,6,7などの単純なプロセスの分散を想定すると、単純な式の問題ですが、想定せずに同じ結果を達成したいと思います。配布について。
私はMPI_Get_processor_nameを使用してそれを行う方法を知っています:名前のハッシュを計算し、2つの名前が同じハッシュを取得しないと仮定します(ある日、同じハッシュを持つ2つの名前がある場合、これは好きではありません問題を追跡するのが難しい)、またはプロセス間で何らかの合意アルゴリズムを使用する(どれですか?まだわかりません)。
それをどのように行いますか(可能であれば効率的に)?
マシュー
c - あるコミュニケーターから別のコミュニケーターへのmpi集合操作
MPIと並列化され、いくつかの異なるタスクに分割されたアプリケーションがあります。各プロセッサには1つのタスクのみが割り当てられ、同じタスクが割り当てられているプロセッサのグループには、独自のコミュニケータが割り当てられます。定期的に、タスクを同期する必要があります。現在、同期はMPI_COMM_WORLDを介して行われますが、他のタスクがそのコードブロックに到達することが保証されていないため、集合的な操作を使用できないという欠点があります。
より具体的な例として:
task1で配列をMPI_SUMして、結果をtask3に表示させたいと思います。これを行うための効率的な方法はありますか?(これがばかげた質問である場合は申し訳ありませんが、カスタムMPIコミュニケーターの作成と使用の経験はあまりありません)
c# - C# .NET AS2 通信
.NET C# 実装を介して AS2 または AS3 通信プロトコルを介してファイルを送受信するというこのトピックについて、いくつかのガイダンスをお願いしたいと思います。この通信レイヤーを実装して EDI ドキュメントやその他の種類のドキュメントを送受信する方法の例または説明を検索しました。独自の EDI ドキュメント ジェネレーターとリーダーを構築しました。それは私の e コマース システムにリンクされています。私たちは何年もの間、VCommerce と CommerceHUB と協力してきました。私が多くの情報を見つけることができないように見えるのは、AS2 の通信層がどのように見えるかの実装です。このすべての2番目の部分は、暗号化と復号化のための証明書の生成であることを認識していますが、それを実装する方法、または可能であれば証明書を手動で作成する方法について考えていると思います. HTTP メッセージの送信に使用する標準の例などを教えていただけますか? 今まで通信部分に /n ソフトウェアを使用していましたが、100% 統合されるように自分でやりたいと思っています。サーバーだけが必要な人にとっては、コストに見合うだけの価値があります。非常に安定しており、実装が簡単です。私にとっては、それらを使用する能力を超えて成長しており、自分で構築する必要があります。
助けてくれてありがとう。
c - MPIスター(ハブアンドスポーク)コミュニケーターは、MPI_COMM_WORLDよりもパフォーマンスが優れていますか?
MPIアプリケーションの次の単純なシナリオを考えてみましょう。ルートプロセスがいくつかのパラメータをブロードキャストし(MPI_Bcast
)いくつかのパラメータ(数十バイト-固定サイズ)、次にすべてのノードがいくつかの計算の実行を開始し、ルートが結果を収集します(MPI_Gather
-おそらく非常に大きなデータセット)。ルートによってデータが保存された後、プログラムは終了します。
どのような状況(プロセスの数、遅延など)(存在する場合)で、仮想スタートポロジを使用して作成されたコミュニケーターを使用すると、使用するよりも優れたパフォーマンスが得MPI_COMM_WORLD
られますか?その理由は何ですか?コミュニケーターは実際のチャネルに遅延初期化を使用しますか(つまり、最初に必要になったときにのみ、パイプ、ソケットなどを開きます)。この動作の実装は依存していますか?
注:私はopenmpi1.4.3-2
プレーンCを使用しています。
process - 別のコミュニケータで MPI_Barrier を使用するには?
私は MPI プログラミング ( mpich2 fedora ) の初心者です。MPI_COMM_WORLD とは別のコミュニケータで MPI_Barrier を使用すると、デッドロックが発生しました。
私はこのような2つのコミュニケーターを作ります:
MPI_Comm_split (MPI_COMM_WORLD, 色, ランク, &split_comm);
すべての色が通過できる MPI_Barrier を配置すれば、問題ありません。
しかし、color == 1 のみが通過できる MPI_Barrier を配置すると、デッドロックが発生しました。
別のコミュニケータで MPI_Barrier を使用するには? 私も MPI_Bcast() を (別のコミュニケーター MPI_COMM_WORLD で) 使用していましたが、誰も MPI_Bcast を呼び出さない場合でもブロックされませんでした。MPI_COMM_WORLD への 1 つの異なるコミュニケーターで、独自のプロセスを同期できますか?
c# - スレッドが停止している間、pcap.netコミュニケーターはパケットをバッファリングします
パケットをキャプチャするために pcap.net を使用しています。パケットをキャプチャするメソッドは、新しいスレッドで実行されています。キャプチャを停止/再開したい場合は、ManualResetEvent を使用してスレッドを停止/再開します。
それは正常に動作します。問題は、キャプチャを中断して再度開始するときです (スレッドを停止して再開する) - コミュニケーターは、スレッドが停止している間に受信したパケットを受信しました。コミュニケータのバッファが原因だと思います。
スレッドが停止している間はコミュニケーターがパケットを取得しないようにし、スレッドが再開されると再びパケットを取得するようにします。助けはありますか?
私のコード:
どうもありがとう!