ここでは、単一のマスターと多くの作業者で構成されるアプリケーションがあります。アプリケーションの要件は非常に単純です。作業者はいくつかのジョブを終了し、データをマスターに送信し、マスターはこれらのデータをファイルに別々に保管します。作業者側の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. MPIルートプロセスからの収集のみを集める
- 2. 大量のデータを収集してフィルタリングする
- 3. 多くのファイルからJSONデータを収集するためにRamdaを使用してください
- 4. ForkJoinPoolは膨大な量の作業者を作成します
- 5. eclipseからUDC(使用量データ収集)をシャットダウンする方法
- 6. 多くの用途と大量のデータ(MSMQ?)のためのスケーラブルなアーキテクチャ
- 7. MPIの各ノードのリストからグローバルtop-kを収集
- 8. Firebaseからのデータ収集
- 9. スレッドプールの実装:condition_variables対収量()
- 10. スパークの摂取経路:「作業者から作業者へのソース」または「作業者からのソース」
- 11. Excel VBA今日の作業者のスケジュールから名前を集める
- 12. 研究参加者からのFacebook投稿データを収集するための最善のアプローチ
- 13. libpcapで大量のDNS統計を収集する
- 14. 実行中のプログラムからデータを収集する
- 15. 熟練した開発者のための初歩的なJavaScriptプログラミング作業
- 16. カフカストリームを使用して大量のデータを集める
- 17. Meteor methods - サーバーからのストリーム/収量データ
- 18. 大量収集クエリの速度を向上させる
- 19. 複数のテーブルからデータを収集するためのMySQLループ
- 20. サブスクリプションのGraylogサーバからデータを収集するためのMaster Graylogサーバ
- 21. チェックボックスリストからデータを収集
- 22. パフォーマンスメトリクスを収集するための収集フレームワーク
- 23. 複数のソースからデータを収集
- 24. 昨日からファイルを収集するためのスクリプトを作成する
- 25. Cassandra 3.7からデータを読み込んだときに多くのスパーク作業者が終了する
- 26. ビデオデータからのRGBデータの収集
- 27. 複数のワークステーションからのデータ収集
- 28. テーブルビューからデータを収集するswift
- 29. 大量のデータをリアルタイムで集計して集計する
- 30. プログラミング(PHP)を使用してRefresh(F5、Ctrl + F5)の作業を実装したい
'MPI_ANY_SOURCE'では+1が最も簡単な解決策です。あるいは、マスター側で5つの非同期受信( 'MPI_Irecv')を使用し、ときにはそれらをポーリングして完了したかどうかを確認することができますが、実際には' MPI_ANY_SOURCE'を使用します。 – suszterpatt
あなたが正しいです - 私が非同期受信で持っているもう一つの問題は、それがあなたの意図を不明瞭にすることです。あなたが本当に心配しているのは*どこかからメッセージを受け取っていて、 'mpi_any_source'はそのことを強調しています。 –
こんにちはティム、あなたの答えをありがとう。私は数日間MPI_Waitanyを使うのに苦労しました。さて、私はMPI_ANY_SOURCEでMPI_Recvを使用することもかなり簡単だと思います。 – Xiao