2001 年 9 月 2 日
共有メモリ用にコンフィグレーションした MPICH の性能はどれくらいなのか?IA-32 PC は メモリバンド幅が小さいため、MPI プログラムを SMP マシン上で実行するのはやや厳しい環境である。
ここでは Pentium III 800MHz の 2 SMP マシンで性能測定を行った。マシン仕様は以下の通り。
測定環境
| CPU | Pentium III 800MHz(Coppermine)2SMP |
| メモリ | 128MB |
| ネットワークカード | Intel Corporation 82557 [Ethernet Pro 100] (rev 08) |
| Linux | LASER5 Linux 6.4 / Kernel 2.2.16-22LL6smp |
| MPICH | Version 1.2.1 + patch.all |
| gcc | version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) |
MPICH を 共有メモリを使用するようにコンフィグレーションし、簡単ではあるが、pingpong プログラムで性能を評価してみる。なお、pingpong プログラムとは 2 ノード間で通信性能を計測するときによく使用されるプログラムである。このプログラムは、以下の処理を行う。
- ノード 0 がノード 1 にデータを送信する。
- ノード 1 は受信後、直ちにノード 1 へ返信する。
- ノード 0 がデータを受信する。
ノード 0 で 1 から 3 までに要した時間を計測する。この時間を‘round-trip time’、round-trip time を 2 で割った値を‘one-way transit time’と定義する。one-way transit time が小さいほど高速にメッセージ通信が行える。
MPI で記述された pingpong プログラムを上記環境で実行した測定結果を示す。なお、MPI ライブラリはソケット用にコンフィグレーションした MPICH と共有メモリ用にコンフィグレーションした MPICH をそれぞれ使用した。
| pingpong プログラムによるソケットと共有メモリの one-way transit time |
今回のテストでは 40KB までの転送を行ったが、全域において 共有メモリ用にコンフィグレーションした MPICH が高速化されていることが分かる。参考までに 100Base/TX で接続されたノード間で pingpong プログラムを実行した場合、メッセージ長 1KB 時の one-way transit time は 255us である。
pingpong プログラムから通信性能が向上したことが分かるが、実際には IA-32 SMP システムでは実アプリの性能向上はあまり期待できない。メモリバンド幅が小さいことと、メモリアクセス機構が貧弱(Alpha ワークステーションなどと比較して)であるからである。
(補足)グラフからメッセージ長が 16KB を超えると性能に変化があることが分かる。これは MPICH がメッセージ通信に使用するプロトコルを切り替えているためである。デフォルトの設定では 16KB までがショートメッセージ用プロトコル、それを超えるとロングメッセージ用プロトコルに切り替わる。このしきい値も configure コマンドで変更することができるので、ネットワークの特性に合わせて調整するといいだろう。