netpipeの紹介
netpipe(NETwork Protocol Independent Performance Evaluator)はTCP,MPI,PVMを使用して通信性能を計測するベンチマークである.PCクラスタでの並列計算は多くの場合MPIで行なわれる.したがって,MPIやPVMを使用したnetpipeでの計測結果はnttcpでの計測結果よりも,実際の並列計算に与える影響を反映したものになる(もちろん,nttcpでの計測結果は考察に必要な材料である).
netpipeはプロトコルから独立してネットワーク性能を計測できるツールである.Debianパッケージには
- netpipe-mpich
- netpipe-lam
- netpipe-pvm
- netpipe-tcp
- ネットワークのスループット
- レイテンシ
- 最適なブロックサイズ
- 通信のオーバーヘッドがプロトコルの組合せにどの程度依存するか
- 他
netpipeは単にメッセージのピンポン伝送を繰り返すだけである.そして一定回数繰り返すとメッセージサイズをちょっとずつ増加させていく.レイテンシはメッセージが行って帰ってきた時間(round trip time)を半分にした時間として計算する.
今回はtcp,lam,mpichを使用して計測をするので,あらかじめlam,mpichをインストールしておく.以下,mpich構築時のメモ.
./configure --prefix=どっか --with-device=ch_p4 --with-arch=LINUX --enable-sharedlib ; make ; make installそしてlam構築時のメモ.今回のシステムはSMPなので,lamをmakeする際に
export CFLAGS=-D_REENTRANTしておく.そして
export CFLAGS=-D_REENTRANT ; ./configure --prefix=/home/matsu/usr/local/lam --with-threads --with-rpi=usysv; make ; make installconfigureのhelpには--with-threadとあるが--with-threadsが正しい雰囲気.で,本題のnetpipe.まずはtcp用のMakefile
TARGETS = NPtcpそしてmpi用のMakefile
TARGETS = NPmpi MPI_HOME = lamかmpichのインストールディレクトリでmakeするとNPtcpとかNPmpiができる.ただし,lamの場合は,
NPmpi: NPmpi.o MPI.o
$(CC) $(CFLAGS) NPmpi.o MPI.o -o NPmpi -L $(MPI_HOME)/lib/$(MPI_ARCH)/\
$(MPI_DEVICE) -lmpi -llam -lpmpi $(EXTRA_LIBS)
と-lオプションを足す必要がある気がする.今回はlamの共有ライブラリがなんだかうまくいかなかった(liblam.so: undefined reference to `openpty'とか出る)ので,静的ライブラリを使用.すなわち
NPmpi: NPmpi.o MPI.o
$(CC) $(CFLAGS) NPmpi.o MPI.o $(MPI_HOME)/lib/libmpi.a $(MPI_HOME)/lib/liblam.a -o NPmpi
実行方法はtcpとmpiでは異なる.まずはtcp.一方のマシンAで
NPtcp -rしておいて,もう一方のマシンで
NPtcp -t -h A -o output.data -Pなどとする.オプションについて以下に示す.
- -A
- バッファの連合体の指定.
- -a
- 非同期受信(先に送信して受信?).このオプションはTCPでは無効.
- -b
- TCPバッファサイズの指定.
- -h
- 受信マシンの指定.
- -i
- 増幅サイズの指定.デフォルトでは実行時に指数関数的に増える.
- -l
- サイズの下限の指定.
- -O
- バッファのオフセットの指定
- -o
- 出力ファイルの指定
- -P
- 標準出力にリアルタイム出力をする.
- -p
- ポートの指定
- -r
- 受信側に付ける.
- -s
- ストリームオプション.デフォルトでは"ping pong".このオプションを使用するときは送信側と受信側の両方で指定しなければならない.
- -t
- 送信側に付ける.
- -u
- サイズの上限の指定
次にNPmpiの実行方法.まずlamならlambootしておく.そして
mpirun -machinefile machines -np 2 NPmpiなどとする.NPtcpで示したオプションのうちのいくつかはNPmpiでも指定できる.以下にそれらを示す.
- -A
- -a
- -i
- -l
- -O
- -o
- -P
- -s
- -u
netpipeの出力ファイルはこんな感じになっている.
0.000068 0.111597 8 1 0.000000 0.000070 0.219092 16 2 0.000000 0.000070 0.328070 24 3 0.000000 ....各行はそれぞれ5列からなる.各列の値は順に以下のようになっている.
- ブロックの転送にかかった時間
- バンド幅(bps)
- ブロックあたりのビット数
- ブロックあたりのバイト数.
- 違い(通信誤り?)

