2016-04-03 15 views
0

からデータを取得します最後に私はプロセスで回収しましたすべてのデータはNのプロセスで詳述されています。提案分散コンピューティング、私は、私は他の<strong>N-1</strong>に読み取った情報を送信し、プロセスとストリームX</strong><strong>(別のプロセスのSTDOUT)から情報を読み取る私のソフトウェアでストリーム

私の質問は次のとおりです。「プロセス間でストリームから読み取った情報を共有する最も効率的な方法は何ですか?」

PS。プロセスは、ネットワークを介して接続された別のコンピュータに存在することもあります。

は、ここで私はいくつかの可能性リスト:ストリーム(Mライン)の

  1. カウントラインを、NファイルM/N ラインに保存し、各プロセス1ファイルに送ります。
  2. ストリームの行数(M行)は、すべての情報を格納するのに十分なメモリを割り当て、各プロセスに直接情報を送信します。

しかし、私は、これらは、いくつかの問題になることができると思います。そんなにファイルを書き込む

  1. は、オーバーヘッドも、ネットワーク経由でファイルを送信することは全く効率的ではないことができます。
  2. プロセスに十分なメモリが必要です、プロセスがボトルネックになる可能性があります。

あなたはどのような提案をしましたか、より良いアイデアはありますか? 私はこの計算を行うためにCでMPIを使用しています。

答えて

1

ファイルを使用すると、パフォーマンスに問題がなければ問題ありません。利点は、デカップリングされたインターフェイスとしてファイルをすべてモジュール化しておくことです。あなたも、非常に単純なコマンドラインツールを使用することができます。

./YOUR_COMMAND > SPLIT_ALL 
split -n l/$(N) -d SPLIT_ALL SPLIT_FILES 

はあなたのシェルでNを設定するか、適切に交換してください。 注:残念ながら、この場合はsplitに直接パイプすることはできません。これはstdinから読み取るときに行の総数を判断できないためです。 - あなたは十分なメモリを持っている場合

./YOUR_COMMAND | split -n r/$(N) -d - SPLIT_FILES 

あなた第二の溶液は罰金もある:ラウンドロビンではなく、連続した分割が細かい場合は、直接パイプすることができます。適切な集団操作を使用することを忘れないでください。 MPI_Scatter(v)、クライアントからデータを受信する場合はMPI_GatherまたはMPI_Reduceです。

メモリが不足している場合は、入力をチャンク(たとえば100,000行)でバッファし、チャンクを作業者に分散させ、計算し、結果を収集して繰り返します。

関連する問題