13

MPI_Open_portとを使用して、MPIにピアツーピア接続を実装しましたMPI_Comm_accept。サーバーとクライアントプログラムを使用して実行します

rafael@server1:~$ mpirun server
rafael@server2:~$ mpirun client

別のコンピューターで。きがついた

rafael@server1:~$ ./server
rafael@server2:~$ ./client

また、問題なく動作します。MPI実行可能ファイルを起動する場合と起動しない場合で違いがあるかどうか知っていますmpirunか?

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

4

1 に答える 1

23

mpirun/なしで実行することmpiexecは「シングルトンMPI_INIT」と呼ばれ、最新の MPI 標準ドキュメントの §10.5.2 にある、高品質の実装のための MPI 推奨事項の一部です。

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

プロセスが開始MPI_INITされ、特別な手順が実行されていないと判断した場合 (つまり、MPI_COMM_WORLD他のプロセスとの間で を形成するための情報が与えられていない場合)、そのプロセスは成功し、シングルトン MPI プログラム、つまりMPI_COMM_WORLDサイズが 1 のプログラムを形成します。

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

于 2013-03-22T23:32:35.247 に答える