ここでは、単一のマスターと多くの作業者で構成されるアプリケーションがあります。アプリケーションの要件は非常に単純です。作業者はいくつかのジョブを終了し、データをマスターに送信し、マスターはこれらのデータをファイルに別々に保管します。作業者側のMPI_Sendを使用してデータをマスタに送信するだけで済みます。しかし、マスターはデータ送信シーケンスを知らない。一部の労働者は速く、一部は遅い。より具体的には、5人の労働者が存在すると仮定すると、データ送信順序は1,3,4,5,2または2,5,4,1,3であり得る。私がデータを得るためにMPI_Recvでマスタ側にfor(i = 1〜5)のようなforループを書くと、マスターとより速い作業者が長時間待たなければなりません。私はMPI_Gatherがこれを実装できることを知っています。しかし、私はMPI_Gatherが並行して動作するのか、MPI_Recvのいくつかの連続した呼び出しだけで動作するのかどうか分かりません。もう1つの問題は、私のデータが非常に大きく、1GB以上のデータをマスタに送る必要があることです。データをトランクに分割すると、複雑になる可能性があります。私はMPI_Gatherがうまくいくとは思わない。私もrawソケットプログラミングについて考えようとしましたが、それは良い方法ではないと思います。私にいくつかの提案をお願いしますか?多くの作業者から大量のデータ収集を実装するためのMPIプログラミング
1
A
答えて
2
私があなたの質問を正しく理解したら、データをマスターに戻したいが、各タスクが完了するのに異なる時間がかかるので、すべてのプロセッサを順番にループしたくないプロセス5の受信(完了している場合)はプロセス3(まだ実行中)からの受信を待機していません。
メッセージを送信するプロセッサのランクとして、MPI_ANY_SOURCE
定数を使用して、mpi_recv
を使用することができます。返されたステータスを検査して、どのプロセッサがメッセージを送信してより多くの作業を送信するかを判断することができます。すべてのプロセッサーをループするのではなく、ワークループ内に単一のreceiveステートメントを置くだけです。
0
作業員はデータをマスターに返送する代わりにファイルを書き出すことができますか?作業者が終了すると、マスターに「完了しました」というメッセージを送信することができます。マスターは次に、次の仕事のチャンクをそのワーカーに送ることができます。手渡されていない作業がない場合、マスタに作業者に「これ以上の作業」メッセージを送信させ、MPI Finalizeを呼び出すことができます。
関連する問題
- 1. 大量のデータを収集してフィルタリングする
- 2. ForkJoinPoolは膨大な量の作業者を作成します
- 3. eclipseからUDC(使用量データ収集)をシャットダウンする方法
- 4. 多くの用途と大量のデータ(MSMQ?)のためのスケーラブルなアーキテクチャ
- 5. スレッドプールの実装:condition_variables対収量()
- 6. libpcapで大量のDNS統計を収集する
- 7. チェックボックスリストからデータを収集
- 8. 複数のテーブルからデータを収集するためのMySQLループ
- 9. 熟練した開発者のための初歩的なJavaScriptプログラミング作業
- 10. 複数のソースからデータを収集
- 11. 複数のワークステーションからのデータ収集
- 12. jQuery Mobileでデータを収集するための正しいアプローチ
- 13. データを収集して埋め込み可能なPDFにデータを集めるためのWebベースのフォーム
- 14. プログラミング(PHP)を使用してRefresh(F5、Ctrl + F5)の作業を実装したい
- 15. データの収集:ダイナミックテキストボックス
- 16. データ収集のUITableViewCell
- 17. 大量のグラフを扱う - 旅行者営業員
- 18. リストから複数の最大値を収集する方法
- 19. 多くのユーザーが大量の写真をたくさんアップロードすることをお勧めしますか?
- 20. 多くのgitリポジトリでリリースバージョンを収集する方法
- 21. 作業を掻き集めるためのURLの解析
- 22. iOS 4加速度計/ジャイロスコープのデータ収集のためのテストケースの作成
- 23. .NET MPI実装ですか?
- 24. 大量のデータをJ2MEで保存するためのベストプラクティス
- 25. sqlite dbから大量のデータをロード
- 26. レコード収集タイプからデータを選択
- 27. ユーザーIDを取得するためにユーザーのアイフォーンからどのデータを収集できるのですか
- 28. カサンドラまたはMongoDBは、スケーリングが大きくクエリの量が多いため
- 29. 価格比較のための高速データ収集
- 30. 検索のためにiPad上でローカルでデータを収集
'MPI_ANY_SOURCE'では+1が最も簡単な解決策です。あるいは、マスター側で5つの非同期受信( 'MPI_Irecv')を使用し、ときにはそれらをポーリングして完了したかどうかを確認することができますが、実際には' MPI_ANY_SOURCE'を使用します。 – suszterpatt
あなたが正しいです - 私が非同期受信で持っているもう一つの問題は、それがあなたの意図を不明瞭にすることです。あなたが本当に心配しているのは*どこかからメッセージを受け取っていて、 'mpi_any_source'はそのことを強調しています。 –
こんにちはティム、あなたの答えをありがとう。私は数日間MPI_Waitanyを使うのに苦労しました。さて、私はMPI_ANY_SOURCEでMPI_Recvを使用することもかなり簡単だと思います。 – Xiao