MPI_Publish_name
には、Open MPI 固有のブール値 key を持つことができる MPI 情報オブジェクトが付属していますompi_global_scope
。このキーが true に設定されている場合、名前はグローバル スコープ、つまり既に実行中の のインスタンスに公開されますompi-server
。MPI_Lookup_name
デフォルトでは、 の URI が指定されている場合、最初にグローバル名のルックアップompi-server
が行われます。
専用の Open MPI サーバーを使用
このプロセスには、いくつかの手順が含まれます。
1)ompi-server
すべてのノードからアクセスできるクラスター内のどこかで開始します。--no-daemonize -r +
デバッグ目的で、引数を渡すことができます。これは、次のような URI を開始して標準出力に出力します。
$ ompi-server --no-daemonize -r +
1221656576.0;tcp://10.1.13.164:36351;tcp://192.168.221.41:36351
2) サーバーで、MPI 情報オブジェクトを作成し、ompi_global_scope
キーを trueに設定します。
MPI_Info info;
MPI_Info_create(&info);
MPI_Info_set(info, "ompi_global_scope", "true");
次に、info オブジェクトを に渡しますMPI_Publish_name
。
MPI_Publish_name("server", info, port_name);
3) クライアントでは、 への呼び出しはMPI_Lookup_name
最初にグローバル コンテキストで自動的にルックアップを実行します (これは、MPI 情報オブジェクトに適切なキーを指定することで変更できますが、この場合はデフォルトの動作で十分です)。
クライアント コードとサーバー コードの両方が の場所を認識できるようにするには、オプションを使用ompi-server
して両方のmpirun
コマンドにその URI を指定する必要があり--ompi-server 1221656576.0;tcp://10.1.13.164:36351;tcp://192.168.221.41:36351
ます。
もう 1 つのオプションはompi-server
、URI をファイルに書き込んで、 を実行するノードで読み取ることができるmpirun
ようにすることです。たとえば、両方のmpirun
コマンドが実行される同じノードでサーバーを起動すると、 /tmp
. 別のノードでを起動する場合ompi-server
は、共有ファイル システム (NFS、Lustre など) で十分です。いずれにせよ、一連のコマンドは次のようになります。
$ ompi-server [--no-daemonize] -r file:/path/to/urifile
...
$ mpirun --ompi-server file:/path/to/urifile server
...
$ mpirun --ompi-server file:/path/to/urifile client
サーバーレス方式
両方mpirun
を同じノードで実行する場合--ompi-server
、 はすでに実行中のインスタンスの PID をmpirun
ネーム サーバーとして使用するように指定することもできます。サーバーでローカル名の発行を使用できます (つまり、「ompi サーバーの実行」と「情報オブジェクトの作成」の部分をスキップします)。コマンドのシーケンスは次のようになります。
head-node$ mpirun --report-pid server
[ note the PID of this mpirun instance ]
...
head-node$ mpirun --ompi-server pid:12345 client
は12345
、サーバーの実際の PID に置き換える必要がありますmpirun
。
また、サーバーmpirun
に URI を印刷させ、その URI をクライアントの に渡すこともできmpirun
ます。
$ mpirun --report-uri + server
[ note the URI ]
...
$ mpirun --ompi-server URI client
オプションの後に指定するのでは/path/to/file
なく (注:file:
ここでは接頭辞なし)を指定すると、URI をファイルに書き込むこともできます。+
--report-uri
$ mpirun --report-uri /path/to/urifile server
...
$ mpirun --ompi-server file:/path/to/urifile client
によって返される URI はmpirun
のフォーマットと同じであることに注意してくださいompi-server
。つまり、ホストの IP アドレスが含まれているため、2 番目mpirun
のノードが別のノードで実行された場合にも機能します。このノードは、TCP/IP 経由で最初のノードと通信できます。 (そして/path/to/urifile
共有ファイルシステムに住んでいます)。
上記のすべてを Open MPI 1.6.1 でテストしました。一部のバリアントは、以前のバージョンでは機能しない可能性があります。