2013-03-22 12 views
7

MPI_Open_portMPI_Comm_acceptを使用してMPIでピアツーピア接続を実装しました。私はサーバーとクライアントプログラムを実行して、mpirunのあるプログラムとないプログラムの実行の違い

[email protected]:~$ mpirun server 
[email protected]:~$ mpirun client 

異なるコンピュータに実行します。私は気づいた

[email protected]:~$ ./server 
[email protected]:~$ ./client 

もうまくいきます。 mpirunの有無にかかわらずMPI実行ファイルを開始するときに違いがあるかどうかを知っていますか?

もちろん、追加のパラメータ(例:mpirun --mca btl self,openib)を指定することはできません。すべてのプロセスのランクは0ですが、これはまったく問題ありません。しかし、それほど明白ではないものはありますか? mpirun/mpiexecせずに実行

答えて

15

は「シングルトンMPI_INIT」と呼ばれ、最新のMPI標準文書で§10.5.2の下に見られる高品質の実装のためのMPI勧告の一部です:

高品質実装により、MPI_INITを呼び出すことによって、どのプロセス(「並列アプリケーション」メカニズムで開始されていないプロセスを含む)もMPIプロセスになることが可能になります。そのようなプロセスは、MPI_COMM_ACCEPTおよびMPI_COMM_CONNECTルーチンを使用して他のMPIプロセスに接続したり、他のMPIプロセスを起動することができます。 MPIはこの動作を強制するものではありませんが、技術的に実現可能な場合は強く推奨します。

プロセスがMPI_INITと入力し、特別な手順がとられていないと判断された場合(つまり、他のプロセスとMPI_COMM_WORLDを形成する情報が与えられていない場合)、シングルトンMPIプログラムを作成します。 MPI_COMM_WORLDはあなたのケースでサイズ1 mpirunを使用して

を持っている標準的なテキストに記載された「並列アプリケーション」メカニズム、です。開始されたすべてのプロセスに対してMPI_COMM_WORLDを確立するために必要な情報をMPI_INITに提供します。 mpirunの情報がなければ、プロセスはシングルトンMPIインスタンスとしてしか実行できないため、すべてが0のランクを持ちます(それぞれMPI_COMM_WORLDは別のものです)。

関連する問題