PC-UNIX上でMPI(Message-Passing Interface)を使う方法について:2

(2002/4/8 改訂)


に引き続き,MPIについて述べます。尚,MPICHのインストールは終わったものとして話を進めます。ここで,もしも複数台のマシンで並列計算をするということであれば,すべてのマシンにおいての作業を行ってください。但し,ファイルサーバなどがあって,NFSでファイルシステムを共有しているような環境であれば,プログラムを実行するマシンのみにインストールしておくだけで構いません。

並列計算のための準備

とりあえずのテストなら,1台のマシンでも出来ます。自分のマシンのホスト名が

orange.ogi-net.or.jp

だったとしましょう。 まず,/usr/local/mpich/shareの中の「machines.LINUX」というファイルを見てみましょう(以下の作業はrootで行ってください)。場合によっては,(MPICHをインストールしたディレクトリ)/utils/machinesの中かもしれません。

# vi /usr/local/mpich/share/machines.LINUX

すると(viが使えない場合は他のエディタで ),

orange.ogi-net.or.jp
orange.ogi-net.or.jp
orange.ogi-net.or.jp
orange.ogi-net.or.jp

のようになっているはずです(最初はたぶん4つくらい同じホスト名が書いてあるはず)。ここにMPIでの並列計算に使用したいマシンのホスト名とCPU数(デュアルなら2とか)を書いておきます。CPU数は省略すると1とみなされると思います。

orange.ogi-net.or.jp
apple.ogi-net.or.jp:2
melon.ogi-net.or.jp

また,/etc/hostsで適当な設定がしてあれば,

orange
apple:2
melon

のようにしても構いません。また,1台しかマシンがなかったりする場合でも,1つのCPUで擬似的な並列環境にすることも可能です。例えば,4並列にしたい場合は

orange:4

などとしておきます。次に,一般ユーザで自分のホームディレクトリに戻り,「.rhosts」ファイルを以下のように作成します。

% cd
% vi .rhosts

orange.ogi-net.or.jp
apple.ogi-net.or.jp
melon.ogi-net.or.jp

つまり,先ほど作った「machines.LINUX」と同じホスト名を書いておきます。ここも,/etc/hostsで適当な設定がしてあれば

orange
apple
melon

で構いません。書き終わったら

% chmod 600 .rhosts

としてファイルの属性を変えておきましょう. 試しにrloginで

% rlogin apple

などとしてパスワード無しでログインできるようになっていればO.K。これで作業は一旦終了です。最近のLinuxでは,デフォルトではtelnet等を受け付けないような設定となっていることがあるので(つまり,sshを使いなさい,ということでしょうか),/etc/xinetd.d/ にある login あるいは rlogin あるいは rsh というファイルをエディタで開き,disable = yes という項目を disable = no と変更して,さらに,/etc/hosts.allow というファイルを,例えばLAN内で 192.168.1.* というローカルなIPアドレスを持っている環境のときは,以下のように編集します。

ALL : 192.168.1.

これにより,クライアントに対するすべてのサービスをLAN内のすべてのマシンに許可することになります(当然,セキュリティレベルが下がります)。本当は必要なサービスだけを指定すれば良いのですが,後々にNFS等を使いたいな,と思ったりすることもあるかと思うので,これで良しとしておきましょう。
では,サンプルプログラムを動かして見ます。

% cd ~/temp/mpich-1.2.1/examples/basic
% mpiCC hello++.cc -o hello

もしも複数台のマシンでMPIを使うのならば,ここまでの手順をすべてのマシンで行ってください(但し,NFSを使用する場合は,プログラムを実行するマシンのみで良い)。また,実行ファイルの位置は,すべてのマシンにおいて自分のホームディレクトリから考えて同じ位置に無ければいけません。上の例だと,orangeで作った実行ファイルと同じものをappleやmelon側でも作って,それぞれのマシン上で ~/temp/mpich-1.2.1/examples/basic に置いておかなければいけないということです(そろそろNFSを使いたくなってきましたか?)。
さて,準備が出来たらいよいよ実行します。

% mpirun -np 3 hello

これで,実行結果が

Hello World! I am 0 of 3
Hello World! I am 2 of 3
Hello World! I am 1 of 3

のようになれば成功です。出力の順番はタイミングによるので毎回変わります。さて,ここでエラーが出てうまくいかない場合は,rshが有効になっていない可能性があります。TurboLinux6.0の場合はターボセントロとかいう環境設定ツールのturboportcfgでrshを管理するdaemonを有効にして,アクセステーブルにappleとmelonのIPアドレスを加えておいてください。Redhatなどの場合も,それと同様のことをしてください。rshでなくsshを使用している場合はこれではできないので,sshの認証自動化のためにssh-agentというものを導入しなければならないでしょう。それについてはここでは触れません。

これで並列計算によるハッピィライフがスタートするかもしれませんね。 次回は「NFS」について書いてみましょうか。
Go back