メイン

クラスタ アーカイブ

2006年11月12日

ふつうのLinuxマシンでの姫野ベンチマークの利用方法

CPUやOSなどの違いにより性能がどう違うのかを知るための
一つの手段がベンチマークだ。
クラスタ環境でなくても利用する価値はあると思う。

姫野ベンチマークは以下のURLからプログラムをダウンロード

http://accc.riken.jp/HPC/HimenoBMT/index.html

Windows用のソースファイルの「C, static allocate version」をダウンロード。
サイズはSかMでいいでしょう。

取ってきたファイルは圧縮されているので解凍する。

$ lha -e ./cc_himenoBMTxp_m.lzh

TurboLinux10の場合lhaコマンドがないのでredhat9用のlhaパッケージがそのまま使えるので取ってくる。

解凍したらhimenobmtxps.cというファイルが出来るが小文字に変換されてしまうので、
himenoBMTxps.cと名前を変える。

$ mv himenobmtxps.c himenoBMTxps.c

あとはmakeして出来たbmtファイルを実行する。

$ make
$./bmt

結果が表示されるからいろいろなマシン上で試してみるといいかも。

以下私のTurboLinux10マシン上でのテスト結果。
pentium3 600MHzの1.5倍となっているのはなかなかぴったりです。

---
Loop executed for 54 times
Gosa : 1.471492e-03
MFLOPS measured : 125.128854 cpu : 59.168426
Score based on Pentium III 600MHz : 1.525962
---

同じマシンでOSをredhat9,CentOS4,CentOS3,FedoraCore5と試したがCentOS4が一番早かった。
Fedora5の遅さにはびっくりした。

2006年11月19日

rshの設定

CentOS4でrshサーバを構築するにはrsh-serverパッケージが必要。
xinetd配下で管理されるので以下のようにファイルを書き換える。

# vi /etc/xinetd.d/rsh
---
disable = no
---

そして再起動。

# service xinetd restart

rshを使えるリモートホストを記述する。

# vi /etc/hosts.equiv
---
111.111.111.111
---

これでIPアドレス111.111.111.111からのrshコマンドを受け付けるようになる。
うまくいかない場合は /etc/hosts.allow と /etc/hosts.deny の設定に問題があるかもしれない。

$ rsh ホスト名 date

上のコマンドの結果が正常に表示されたらOK。
ただしこのままではrootでrshが使えない。

rshサーバのrootのホームディレクトリに以下のようにファイルを作成する。

# vi ~/.rhosts
---
111.111.111.111
---

さらに、以下のようにpamの認証設定の一部をコメント化する。

# vi /etc/pam.d/rsh
---
#auth required pam_securetty.so
---

これで許可したリモートホストからroot権限でパスワードなしにコマンドを打つことが出来るようになる。
しかしifconfigコマンドなど一部のコマンドパスが通っていないのでパスを通しておく必要がある。
bashを利用する場合は以下の要領でパスを追加記述しておく。

# vi /etc/bashrc
---
PATH=$PATH:/sbin:/usr/sbin
---

これで許可したリモートホストからroot権限でパスワードなしでコマンドが打てるようになる。
セキュリティレベルがかなり低下するので注意が必要。

許可されたCentOS4マシンからrshコマンドを打ってみたら /usr/kerberos/bin/rsh が実行される。
これではうまくいかないので以下のコマンドで待避する。ほかにいい方法もあると思うが・・・

# mv /usr/kerberos/bin/rsh /usr/kerberos/bin/rsh.nouse

これでログインし直すと /usr/bin/rsh が使われるようになる。

LAMを使った並列プログラミング環境の構築

MPI(Message Passing Interface)ライブラリとしてLAMを使って並列プログラミング環境を構築する。

ノードとホストの設定がある。
ホストはプログラムを投入するマシンでノードは計算するマシン。
今回はホストにも計算をさせるのですべてに同じ設定をすればいい。

↓公式HPはこちら
http://www.lam-mpi.org/

OSはCentOS4。
候補としてredhat9,turbolinux8,fedoracore5,centos3など考えたが
姫野ベンチでテストした結果が一番よかったのがCentOS4だった。

公式HPから lam-7.1.2.tar.gz をダウンロードして作業を進める。

# tar zxvf lam-7.1.2.tar.gz -C /usr/local/src/ (-C:解凍先の指定)
# cd /usr/local/src/lam-7.1.2/
# ./configure --prefix=/usr/local/lam (--prefix:インストール先の指定)
# make
# make install

LAMをrshで利用するのでrshサーバの設定をする必要がある。
詳細はhttp://max01.skr.jp/blog/2006/11/rsh.htmlに書いた。
ただ、パスは以下のように /usr/local/lam/bin を追加する。

# vi /etc/bashrc
---
PATH=/usr/local/lam/bin:$PATH
---

一般ユーザhogeで利用する場合hogeのホームディレクトリに以下のファイルを作成。
LAMが利用可能なIPを記述するんです。
$ vi ~/lamhosts
---
xxx.xxx.xxx.xxx
xxx.xxx.xxx.yyy
---

LAMが使えるようになったか確認する。

$ recon -v ~/lamhosts

Woo hoo! というメッセージがでたらOK。

さっそくLAMを軌道しよう。

$ lamboot -v ~/lamhosts
---
LAM 7.1.2/MPI 2 C++/ROMIO - Indiana University

n-1<4780> ssi:boot:base:linear: booting n0 (xxx.xxx.xxx.xxx)
n-1<4780> ssi:boot:base:linear: booting n1 (xxx.xxx.xxx.yyy)
n-1<4780> ssi:boot:base:linear: booting n2 (xxx.xxx.xxx.zzz)
n-1<4780> ssi:boot:base:linear: finished
---
このようなメッセージが表示されればOK。
念のため確認のコマンドを打つ。

$ lamnodes
---
n0 hostname1:1:origin,this_node
n1 hostname2:1:
n2 hostname3:1:
---

今回3つのノードで試してみた。
あとはMPIプログラムを投入するだけだ。

$ mpirun -np 3 -s n0 program
(-np 3:3つのノードで処理する, -s n0:ノード番号0の実行プログラムを各ノードにコピー)

これでprogramが3台のマシンで実行されているはず!

-s オプションがあるおかげでNIS,NFS環境を構築しなくていいのでLAMは便利です。

プログラムの実行が終わったら以下のコマンドを実行してLAMを終了させる。

$ lamclean
$ wipe -v ~/lamhosts

2006年11月29日

MPICH2を使った並列プログラミング環境の構築

MPI(Message Passing Interface)ライブラリとしてMPICH2を使って並列プログラミング環境を構築する。HPC(High Performance Computing)クラスタの構築でもある。

↓MPICH2のHPから最新版をダウンロードしてくる。
http://www-unix.mcs.anl.gov/mpi/mpich/

現時点では mpich2-1.0.4p1.tar.gz になる。

早速ダウンロードしてインストールをすませる。

# tar zxvf mpich2-1.0.4p1.tar.gz -C /usr/local/src/
# cd /usr/local/src/mpich2-1.0.4p1/
# ./configure --prefix=/usr/local/mpich2

(prefix: 好みに応じてインストール場所を指定)
いろんなオプションがあるので確認してみるといいかと思う。

# make
# make install

インストールが終わったら環境の整理です。
今回mpich2の実行にrshを使うので計算マシンから各ノードマシンへrshが正常に機能するように設定しておく。rshクライアントを実行ホストに、rshサーバを計算ホストに構築する。
詳細は↓に記述した。

http://max01.skr.jp/blog/2006/11/rsh.html


次にmpich2用のコマンドが使えるようにパスを通しておきます。

# vi /etc/bashrc
---
PATH=/usr/local/mpich2/bin:$PATH
---

これで全ユーザのパスに追加出来ます。
もし自分だけでいい場合はホームディレクトリ直下にある .bash_profile を編集する。

$ vi ~/.bash_profile
---
PATH=/usr/local/mpich2/bin:$PATH
export PATH
---

次にホームディレクトリ直下に.mpd.hostsを以下のように記述する。

# vi ~/.mpd.conf
---
MPD_SECRETWORD=password
---

パスワードは任意。ただし全ノードで同じパスワードを指定しておく必要がある。
パーミッションの設定もしないとおこられる。

# chmod 600 ~/.mpd.conf

rootでもmpich2を使いたい場合は/etc/mpd.confを作る必要がある。

次はmpd.hostsに計算をさせるノードのIPアドレスを記入する。

# vi ~/mpd.hosts
---
xxx.xxx.xxx.11
xxx.xxx.xxx.12
---

念のため/etc/hostsファイルを見直す。エラーの原因になることが多い。
私は "failed to ping mpd on ..." というようなエラーに苦しめられた。
あと、無線LANではうまくいかないようで有線でやるとうまくいった。

# more /etc/hosts
---
127.0.0.1 localhost
192.168.0.x myhost.domain myhost
192.168.0.y remotehost1
---

127.0.0.1のところはlocalhostにしてホスト名は行を追加してIPアドレスといっしょに書きましょう。
これで準備OK。今回は2つのマシンで起動してみよう。

$ mpdboot (-v) -r rsh -n 2 (-f ~/mpd.hosts)

(-v:詳細表示 -n:ノード数)

確認は以下のコマンドを入力。

$ mpdtrace (-l)
---
hostname1
hostname2
---

確認できたらmpiプログラムを実行させてもいいしシェルコマンドを打ってもいい。

$ mpirun (-l) -n 2 hostname (-l:詳細表示 -n:実行ノード数)
---
hostname1
hostname2
---

rootだったらshutdownコマンドが打てて便利。
プログラムの実行が終わったら終了コマンドを入力。

$ mpdallexit

確認は ps aux | grep mpd などと打ってmpdプログラムが残っていないかみることが出来る。