|
|
|||||||||||||||||||||
|
●プロセス起動の流れ
host0> mpirun -np 4 -machinefile machines myprog -myopt1 -myopt2 ここで,myprog が並列で実行したいプログラム名で, -np 4 で 4 つのプロセスで実行することを指定しています。 -machinefile で指定している machines は使用するホストを 指定するファイルで,以下のようになっているとします。
これで,host0 から host3 の 4つのホストに対して それぞれ1プロセスずつ合計4つのプロセスにて並列計算を行うことになります。 また,-myopt1 や -myopt2 は myprog に対するオプションです。 この mpirun というプログラムはシェルスクリプトで, 主に以下のようなことを行います。
myprog -myopt1 -myopt2 -p4pg /home/foo/work/PI1234 -p4wd /home/foo/workここで /home/foo/work/PI1234 は mpirun が作成した pg ファイルで, "1234" の部分は mpirun のプロセス番号となります。 また,-p4wd の後のディレクトリ名は,mpirun を起動したディレクトリ です。 mpirun が起動するプロセスは,この host0 でのひとつだけで, ここではこれをマスタプロセスと呼ぶことにします。 他のリモートホスト上のプロセスは,mpirun ではなく, このマスタプロセスより起動されます。 リモートのプロセスを起動するのは,マスタプロセスの MPI_Init の中で, マスタプロセスが読み込んだ pg ファイルにしたがい (デフォルトでは) rsh を使用して起動されます。 リモートで起動されるプロセス(スレイブプロセスと呼ぶことにします)には,
myprog host0 2345 -p4amslaveといったオプションがつけられます。 ここで,host0 はマスタプロセスのホスト名,"2345" はマスタプロセス が使うTCP/IPのポート番号で,-p4amslave でこのプロセスがスレイブ であることを示しています。 ここまでの起動プロセスをまとめると,以下のようになります。
このようにして,各ホスト上で myprog が起動されます。 補足. 上記の例のように各ホスト毎にひとつのプロセスを起動しようとすると,実際には各ホストにもうひとつ別のプロセスが起動されます。 これは MPI_Init 中で fork により起動されるもので,Listener と呼ばれる外部プログラムをさらに 起動するために用いられるもののようです。 ただし,当社が普段使用している Linux のクラスタ環境では,特に何もしていないようで,途中で kill しても問題ないようです。
●コマンドラインオプション MPI のプログラムでは,下のようにまずプログラムの冒頭で MPI_Init() を呼ぶことになっています。
●実行ディレクトリ 上で見たようにこの -p4wd オプションがついているのはマスタプロセスに対して だけなわけですが, スレイブプロセスにはマスタプロセスと通信して 作業ディレクトリ名を取得します。 スレイブプロセス起動時にはマスタプロセスのホスト名とポート番号が 指定されていますので,これによりマスタプロセスとの通信を 開始することが可能となっているわけです。 ここで疑問に思われた方もいらっしゃるかも知れませんが, host0 で mpirun を実行したディレクトリが, 他のホスト上にも存在するとは限りません。 このように,-p4wd で指定されたディレクトリが見つからない場合は, 実行プログラム myprog があるディレクトリが実行ディレクトリ となります。 実行するには myprog はどこかに必ずあるわけですので, このディレクトリは必ず存在するはずですね。
●ファイルのオープン
|
postmaster@alde.co.jp
までお願いします。 |
|||||||||||||||||||
|
技術情報へ戻る
(C) 2001-2012 Allied Engineering Corporation. All rights reserved. |
|||||||||||||||||||||