Document

MPIのインストール

MPIのインストール

ここでは、MPICH2のインストールについて書きます。
環境によっていろいろ違うかもしれませんが その辺は、自力でがんばってください。 他にも詳しく書いてあるサイトはありますので そのあたりのサイトと見比べながら、インストールを行ってください。

想定する環境

標準的なLinux環境を想定しています
実際に行った環境はRed Hat Enterprise Linux(RHEL) 5.4
PCは4台あり、それぞれ192.168.100.1 2 3 4と固定のIPが振られ
すでにLANで接続されている状況。
SSHでの接続を行いたい場合

MPICH2のダウンロード

http://www.mcs.anl.gov/research/projects/mpich2/downloads/index.php?s=downloads
ここから、Sourceを落としてくる。
wgetでもちろんOK。

展開、configure

適当なディレクトリにアーカイブを送ったら、展開。
$tar xvzf mpich2-1.0.4p1.tar.gz のコマンド実行を行う)

$./conigure --prefix=/usr/local/mpich2 --with-device=ch3:ssm
を実行、Makefileを生成する

--with-device=ch3:ssmはマルチスレッドをやるとき。
コアごとにもそれぞれ動作させるときは--with-device=ch3:sock
ssmだとプロセッサごとにrankが振られて、sockだとコアごとに振られる。
mpiccでのコンパイル時に決まるらしい
適宜、環境に合わせて、選ぶこと。
普通は、ch3:ssmでよいと思う。

コンパイル

$make
$sudo make install
でインストールを行う。

パスを通す

とりあえず、MPIを使う人が${HOME}/.bashrcを編集。末尾に
export PATH=/usr/local/mpich2/bin:$PATH
を追加。

mpd.confの作成

ホーム上で.mpd.confファイルを作成。
MPD_SECRETWORD=Haifukiya
と入力し保存する。(何でもいいが、つなぐPCごとに同じものにすること)
$ chmod 600 .mpd.conf
として、.mpd.confのパーミッションを変更しておく。

mpd.hostsの作成

ホームディレクトリに.mpd.hostsファイルを作成
MPICH を導入する全てのホストのIP アドレスを記述する
192.168.1.101:4
192.168.1.102:4
192.168.1.103:4
192.168.1.104:4
と記述しておく。(自機も含むのが大事らしい)
:4は、4コアあるという意味。
(一応、物理の個数を指定したがこれでよいか…… HTがあるとめんどい)

/etc/hostsにホスト名を記述

/etc/hosts を編集し、繋がる計算機のホスト名とIPアドレスを記述する。
192.168.1.101 server01
192.168.1.102 server02
192.168.1.103 server03
192.168.1.104 server04
を追加。
127.0.0.1 localhost.localdomain localhost
の行を
127.0.0.1 localhost
とする。

テスト

この時点で、テストとして、一台だけで起動できる。
$ mpd &
とし
$ mpdtrace
として、ホスト名が返ってくれば成功。

$ mpdallexit
でmpdを終了させる

sshでの接続設定を行う

$ssh-keygen -t rsa
で、鍵を生成。(パスフレーズには何も入れない)
$cat ~/.ssh/id_rsa.pub >> authorized_keys
として、公開鍵をコピーして、これを、そのほかのマシーンの~/.ssh に入れておく。
こうすると、例えば
$ssh server02 date
などと打つと、パスワードなしにsshで操作できるようになる。
4台でやるときは、それぞれの公開鍵をすべてまとめたauthorized_keysをおくこと。
うまくいかないときはchmodでパーミッションをディレクトリは755,ファイルは600にすると
うまくいくようになるかもしれない

ポートを開ける

このままだと、パケットフィルタリングでPC同士の通信が遮断されるのでポートを開ける。
とりあえず、テスト用に
$sudo /etc/init.d/iptables stop(ファイアーウォール無効化)
を各マシーンに適用させる。再起動すれば、元の設定を読み込むので問題ない。
(テスト終了後は速やかに、sudo /etc/init.d/iptables restartをかける)
やっぱり、荒い方法なのでいい方法があればそっちを使いたい

MPIのテスト

ホストマシーン上(どれか一機で、ここではserver01とすると)
$ mpdcheck -s
と打つ。すると、
server listening at INADDR_ANY on: server01 50323
などのように、ポート番号が出てくるので、もう一台の方で
$ mpdcheck -c server01 port
(portは先ほど表示されたポート番号=50323)と打つ。
成功すれば、ホスト、クライアント共に成功っぽい表示が出る。

MPIの実行

とりあえず、サンプルプログラムを適当に書く
$ mpicc testmpi.c
で、コンパイルができるはず。
ホスト上で
$ mpdboot -n 2 -f .mpd.hosts
と入力。(-nは起動する計算機の数、-f は先ほど作ったつなげる計算機のリスト)
これで、各計算機上でmpdが起動されている。
$ mpdtrace
で確認すると、繋がっている計算機のホスト名が表示されるはず。
ここで、各計算機の同じパスにMPIで作った実行ファイルをおいて
$ mpiexec -n 8 ./a.out
(-n はプロセスの数)などと打てば、それぞれ実行されるはず。

ここまでちゃんと動けばおしまいです。
お疲れ様でした。