2012-01-25 6 views
1

私は、プロセス間でスレッドMPI呼び出しを使用するMPIアプリケーションに取り組んでいます。スレッドは負荷要件に応じて追加および削除されます。今、open-mpiフォーラムで答えが見つからない質問があります。MPI:いくつのソケット?

MPIプロセス(「ランク」)のセットがすでに接続されている場合、すなわち、彼らはすでに送信 - 受信呼び出しを作っているし、新しいスレッドが(どちらかのプロセス)に来ても、送受信の呼び出しを行いいます同じMPIピア間でMPIが新しいソケットセットを開くのだろうか?

私は詳細は実装に依存していることを知っているので、一般的な答えはないかもしれません。しかし、見つける方法はありますか?

他の理由のために選ばれたこの技術の拡張性に関する質問があります。 1接続あたりの新しいソケットの数にいくつかの統計情報を取得することは素晴らしいことでしょう。

誰でもこの方法を知っていますか?例えば、どのソケットがMPI_Sendの特定のインスタンスであるかを問い合わせると?

私はすでに--mca btl self,sm,tcp --mca btl_base_verbose 30 -v -report-pid -display-map -report-bindings -leave-session-attached

おかげで多くのことを追加してみました。

答えて

1

ここで私はオープン-MPIで華麗な人々から学んだことで、自分の質問に答えるために:

2012年1月24日には、5:34 PMで、デヴェンドラRAIは書いた:

を私はメッセージが送信されたときにMPIによって開かれている接続の数を調べようとしています。基本的には、私はスレッドMPI呼び出しを複数の異なるMPIプロセス(スレッドMPI呼び出しを持っている)に持っています。

ポイントは、スレッドが追加されるたびに、(送信者と受信者のペアが既にそれらの間に接続していても)新しいポートが開かれることですか?オープンMPIで

:なし。基礎となる接続は、持つスレッドの数に依存しません。

見つける方法はありますか?私はMPI APIを使いました。私が見つけた最も近いものは、地図製作情報に関連していました。これは、論理的な接続しか知らないので、これでは十分ではありませんか?

MPIにはユーザーレベルの接続の概念がありません。あなたはメッセージを送信し、奇跡が起こり、メッセージは相手側で受信されます。 MPIはそこにどのように到達したかについて何も言及していない(例えば、他のプロセスを通じて経路指定されているかもしれない)。

読書オープンMPIよくあるご質問は、私が "--mca BTLの自己、SM、30 -displayマップbtl_base_verbose --mca TCP" に役立つだろうmpirunのためにを追加すると思いました。しかし、私は必要なものを得ることができません。基本的には、各プロセスがアクセスしているポートの数(読み込みと書き込み)を知りたい。

Open MPIのTCP実装では、基本的に1つのTCPソケットあたり1つのTCPソケット(さらに、いくつかのユーティリティfd)があります。しかし、TCPソケットは遅れて開かれるだけです。つまり、実際にピアに送信するまでソケットを開かないということです。

- ジェフSquyresジェフSquyresへ

クレジット。

関連する問題