ベンチマーク
以下にはベンチマークの取り方を説明を行う。
使用したソフトウェア等
今回のベンチマークを取るにあたって使用したソフトウェア
ベンチマークを測定するソフト
計算ライブラリ
MPI
- LAM/MPI http://www.lam-mpi.org/
測定方法
事前準備
クラスタのベンチマークを計測するには、並列処理を実行する必要がある。
並列処理を実行させる為に必要な実行環境(環境というかライブラリ?)がMPIである。
pwにはMPIの実装としてLAM/MPIを導入している。(その他のMPIの実装にはMPICHがある)
LAMはroot権限で実行することを推奨していないため、一般ユーザでベンチマークを測定することになる。
RSA認証
LAMでは並列処理を実行する全てのマシンにログインする必要がある。(以下のlamboot時にマシン毎にパスワードを要求される)
全てのマシンにパスワードを打ち込むのは効率的ではないので、RSA認証を使ってパスワードなしでログインできるようにしよう。
また、ベンチマークはdomain0で計測するので、domain0でRSA認証するようにしておく。
domain0への入り方
通常のログインだとdomainUにいってしまうので下記のようにポート指定が必要である
%ssh -p 50022 e0?????@pw???
lamdの起動
LAMを使用するには、並列処理させるpw毎にlamdを起動させる必要がある。
lamdを起動させるには専用のコマンドが用意されていて、以下のコマンドとなる。
%lamboot -v hostlist.txt
コマンドlambootの後にlamdを起動させるマシンのホスト名またはIPアドレスを書いてあるファイルを指定する。(今回はhostlist.txtだが、ファイル名は自由にすることができます)
- ファイル記述の例
pw001.cs.ie.u-ryukyu.ac.jp pw002.cs.ie.u-ryukyu.ac.jp pw003.cs.ie.u-ryukyu.ac.jp ~ pw180.cs.ie.u-ryukyu.ac.jp
上記のように使用するホスト名を指定する。
lamdが起動しているかどうかは以下のコマンドで確認できる。
%lamnodes -v
上記のコマンドを実行すると、lamdが起動しているホスト名(またはIPアドレス)が表示される。
注意:ホスト名を記述するファイルには必ず、lambootを実行させるホスト名を含める。
(pw001でlambootを実行させるなら、リストにもpw001が書いていないといけない)
これも180台全てを記述するのは面倒なので、スクリプトを書いた方が効率が良いです。
測定
測定準備
ここでは既にhplがコンパイルされ、lamdが起動しているとして話を進める。
hplをコンパイルすると、以下の二つのファイルが作成される。
xhpl HPL.dat
xhplはベンチマークを測定する実行ファイルで、HPL.datはxhplのパラメータが書いてあるファイルである。
xhplは並列処理させる全てのマシンの同じディレクトリに存在しないといけない。
(pw001の/User/student/e04/e045748/bench/xhplにあるなら、pw002でも同じディレクトリに無いといけない)
全てのマシンにxhplをコピーするのは面倒なので、/net/home/にある、自分のディレクトリにxhplを置くことを勧める。
測定
/net/home以下の自分のディレクトリにxhplを置いたら、実際にベンチマークを測定してみよう。
並列処理を行うには以下のコマンドを実行する。
%mpirun -np 36 xhpl
mpirunは並列処理を行うコマンドである。-np 36 は並列処理に使用するマシン台数の指定を行っている。xhplは実行ファイル。
初期設定ではベンチマークが行われると、結果が画面に表示される。
パラメータの変更方法
HPL.datの中身は以下のようになっている。また、主に変化させるパラメータも示す。
HPLinpack benchmark input file Innovative Computing Laboratory, University of Tennessee HPL.out output file name (if any) ←出力ファイルの名前 6 device out (6=stdout,7=stderr,file) ←出力先(行の先頭の"6"を"file"にするとファイルに出力) 4 # of problems sizes (N) ←問題サイズの数 29 30 34 35 Ns ←問題サイズ 4 # of NBs ←ブロックサイズの数 1 2 3 4 NBs ←ブロックサイズ 0 PMAP process mapping (0=Row-,1=Column-major) 3 # of process grids (P x Q) ←プロセスグリッドの数(PxQの数で並列処理に使うマシンの台数が決まる) 2 1 4 Ps ←Pの数(詳細は不明) 2 4 1 Qs ←Qの数(詳細は不明) 16.0 threshold 3 # of panel fact 0 1 2 PFACTs (0=left, 1=Crout, 2=Right) 2 # of recursive stopping criterium 2 4 NBMINs (>= 1) 1 # of panels in recursion 2 NDIVs 3 # of recursive panel fact. 0 1 2 RFACTs (0=left, 1=Crout, 2=Right) 1 # of broadcast 0 BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM) 1 # of lookahead depth 0 DEPTHs (>=0) 2 SWAP (0=bin-exch,1=long,2=mix) 64 swapping threshold 0 L1 in (0=transposed,1=no-transposed) form 0 U in (0=transposed,1=no-transposed) form 1 Equilibration (0=no,1=yes) 8 memory alignment in double (> 0)
主に変更するのは上記で説明が書いてあるパラメータである。パラメータを変化させ、ベンチマークを計測していく。
ベンチマークの出力先はログを残しておくため”file”にしておくこと。また、ファイル名もベンチマークを取るたびに変えていく。
パラメータの変化のさせ方としては、(とは言っても2006年度後期サーバ班の時の取り方ですが。。。)
- NB(ブロックサイズ)
- PxQ(プロセスグリッド)
- N(問題サイズ)
の順番で変化させていきます。
- NB
- N,PxQを固定し、NBの値を1~512まで変化させる。(1~32までは2の累乗、32~512までは32飛びで)
- NBの値を変化させ,一番良い値を出したブロックサイズを求める
- PxQ
- N,NB(上で決まった値)を固定し、PxQの構成を変えてゆく
- PとQを掛けた値が使用するマシン台数になる組み合わせを全てで計測する(20台なら1と20、2と10、4と5など)
- PとQの値を変化させ、一番良い値を出した組み合わせを求める
- N
- NB,PxQを固定(上で決まった値)し、Nの値を変化させる
- Nの値を変化させ、一番良い値を出した問題サイズを求める
注:基本的に問題サイズは増加すれば増加するほど良い値になっていきます。ただし、問題サイズがメモリの容量を超えてしまうと一気に測定方法結果が落ちますので、メモリを使いきるまで問題サイズを増加させてください。
注:○○の数といったパラメータがありますが、そこは基本的に1としました。ここを2や他の値にすると、その数だけ○○のパラメータの測定が出来ます。(例えば、問題サイズが1000と2000を同時に測定できる)
この方法を使用すると、一つのファイルに複数の結果がまとめられるので、後の解析で面倒なのと、一つのファイルに一つの結果がある方が、管理しやすい為です。
上にも書きましたが、上の方法は2006年度後期サーバ班のやり方ですので、各自で色々と工夫してみて下さい。
測定終了後
ベンチマークを測定し終えたら、lamdを終了させる必要がある。 lamdを終了させるには以下のコマンドで終了させる
%lamhalt -v
解析
解析方法
解析方法ですが、出力されたファイルの測定値を合計し、平均を求める簡単なスクリプトを作成しました。
/net/open/bench/bench_average.pl
このスクリプトを使うことによって簡単に平均値を求めることができます。
使用法は以下の通り
./bench_average.pl HPL.out
これにより、平均値が出力されます。
平均値を他のファイルに書き込み、gnuplot、Excel等でグラフにして視覚的に見やすいように整理してください。
その他
ベンチマークの取り方は以上です。
intelコンパイラ、ATLAS、hplのコンパイルの方法が確定したらこのwikiを編集してくれるとありがたいです。