PC-UNIX上でMPI(Message-Passing Interface)を使う方法について:2
(2002/4/8 改訂)
1に引き続き,MPIについて述べます。尚,MPICHのインストールは終わったものとして話を進めます。ここで,もしも複数台のマシンで並列計算をするということであれば,すべてのマシンにおいて1の作業を行ってください。但し,ファイルサーバなどがあって,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