MPI覚え書き(MPICH編)

MPICH(MPI CHameleon)をUNIX環境(RedHat9, FreeBSD)にインストールし、動作確認をした際の覚え書きです。 環境によって異なる可能性があるので、参考程度にしてください。
※ ここではMPICH(無印)について説明しています。
  後継?のMPICH2ではLAMと同様、実行前にデーモンを動かす必要があるようです。

MPICHの特徴

  • LAMと違い実行時にリモートシェルを起動

そのためLAMよりも起動が遅い(と言われる)

  • あらかじめデーモンを起動する必要がないので取っつき易い
  • 動作させた感じでは、通信部分に関してLAMより速い(かも)

インストール手順

  • MPICHのページからソースコード(mpich.tar.gz)をダウンロード

2007年6月8日時点では Version 1.2.7p1 でした。

% wget http://www-unix.mcs.anl.gov/mpi/mpich1/downloads/mpich.tar.gz 
  • 圧縮されているので解凍
% tar xvzf mpich.tar.gz 
  • ./configureを実行

権限がないのでとりあえず今回は自分のホームにインストール

% cd mpich-1.2.7p1
% ./configure --prefix=/home/hogehoge/mpich
(./configure --enable-f77=no --enable-f90=no) 
  • コンパイル
% make
  • インストール
% make install 
  • パスの設定
    • mpich/binにパスを通しておく
    • mpich/manをmanのパスに追加

環境設定

  • .rhosts の作成
    • 自分のホームディレクトリに .hosts という名前のファイルを作成する。
    • 内容は計算に使用するホストの列挙。
    • このファイルはMPICHとは直接関係ない(rshで使われる)
  • 記述例(~/.rhosts)
host00
host01
host02
  …
  • hostsファイルの作成
    • 計算に使用するホストを列挙する。
    • ファイル名や保存場所は実行時に指定するので何でもよい。
    • このファイルはMPICHを使用する際に使われる。
    • CPUが複数あるホストにはCPUの数を記述(ホスト名の後に:(コロン)CPU数)することが可能。
    • 記述例(hosts)
host00:4
host01:2
host02
  …

注:mpich/share/machine.* に上記のように記述することによって、実行時のホストの指定を省略できます。 * はOSによって変わります(machine.LINUX(Linuxの場合)、machine.freebsd(FreeBSDの場合))

実行方法

  • ソースコードの作成

LAMとMPICHで共通です(同じMPIなんで当たり前なんですけど)

  • コンパイル

-O2等のオプションも普通に使用できます。

% mpicc -o hogehoge hogehoge.c 
  • 実行方法
    • mpirunコマンドで実行します。
    • -machinefileオプションでhostsファイルを指定します。(mpich/share/machine.* に記述した場合は省略可)
    • -npオプションで使用するノードの数を指定します。 ノード数がホスト数よりも多い場合は、一つのホストに複数割り当てられます。
    • 例(ホスト5台でhogehogeを実行する場合)
% mpirun -machinefile hosts -np 5 hogehoge 

実行過程の表示方法

実行時の通信状況を次のようにGUI表示することができます。(要 Java環境)

  • 表示例


  • ログファイル出力設定
    • コンパイル時に -mpilog オプションを付けます。

このオプションを付けることによって、実行時に 実行ファイル名.clog というファイルを出力します。

% mpicc -mpilog -o hogehoge hogehoge.c 
  • GUI表示

上記のようにコンパイルしたプログラムを実行したときに出力されたログファイルを、次のコマンドによってGUIに表示します。

% jumpshot hogehoge.clog & 

このとき、ログの形式をslog形式に変換するように表示されるので、clog形式からslog形式に変換します。

関連項目