2

私がやりたいことは次のとおりです。

1 つのサーバー プロセスと複数のクライアント プロセスの間に、クライアント サーバー型の関係を持たせたいと考えています。しかし、私の問題は、これらのクライアント プロセスが異なるターミナル ウィンドウで実行され、標準入力が必要になることです。したがって、同じmpirun呼び出しで MPI プログラムを実行しても、次のようにはなりません。

mpirun -np 2 --stdin 1 ./server : -np 3 ./client

この例では、標準入力も 1 つのプロセスにのみ送られますが、これはもちろん私にとってもう 1 つの欠点です。

最後のポイントは、実行中のサーバー プロセスと通信できる新しいクライアント プロセスをいつでも作成できるようにしたいということです。

では、これらを達成するには、どのようなアプローチに従う必要があるのでしょうか? 私は数日間検索してきましたが、別のチュートリアルを読むたびに混乱するだけです.

必要に応じて背景情報: Ubuntu 12.04 で実行し、Boost MPI を使用しています。それでも、プラットフォーム/MPI の実装に関する提案は大歓迎です。

4

1 に答える 1

2

できることの 1 つは、FIFO を設定することです。次のようになります: 1 つの端末で、次のようにします。

mkfifo a.fifo
tee a.fifo | mpirun -np 2 ./server

そして、もう一方のターミナルで次のようにします。

mpirun -np 3 ./client < a.fifo

ただし、最もエレガントなソリューションではありません。また、これは標準入力部分のみを処理し、それらを同じコミュニケーターの一部にする部分は処理しません。

MPI-2 では、動的プロセス管理コマンドを使用して MPI タスクをコミュニケーターに動的に追加および削除できますが、私はそれらを使用したことがなく、どれほど実用的かはわかりません。何をしようとしているのかによっては、zeromqの方が適している場合があります。これにより、可変で動的に変化するタスク数に対するデータのブロードキャストと収集を簡単にセットアップできます。

于 2012-11-12T15:38:23.277 に答える