|
並列計算プログラムのデバッグはなかなか面倒ですね。そのためそれぞれの実装系では,デバッグを支援するための機能が用意されています。それらを有効に利用すると効率良くプログラミングが行えます。
次の解説記事にも,MPICH のデバッグ機能についての詳しい解説がありますのでご参照ください。
秋葉博,並列処理と MPI 入門 (3),計算工学,9,No.2,pp.29-34,2004.4.
|
ここでは,MPICH で用意されている デバッグやモニタリングに有用な機能について簡単に紹介します。対象とする並列環境は,主に Work Station クラスタ型 (ch_p4 デバイス) です。なお,ここで使用している MPICH のバージョンは 1.1.2 です。バージョンが違うと以下の記述と異なる場合がありますのでご注意ください。より詳しくは,MPICH 付属の User's Guide を御覧下さい。
mpicc でのコンパイル時に,以下のオプションを指定することが出来ます。
- -mpilog
ログファイルを出力します。このログファイルは,jumpshot という MPICH 付属のツールで下の図ように表示することが出来ます。jumpshot での表示は通信量が多いと厳しくなりますので,通信量を少なくして表示するほうがよいです。ただし,mpich 1.2 では通信が多くても表示できるよう,改良されています。
- -mpitrace
以下のように,呼び出した MPI の関数を表示してくれます。
% mpirun -np 2 myprog
Starting MPI_Init...
Starting MPI_Init...
[0] Ending MPI_Init
[0] Starting MPI_Comm_rank...
[0] Ending MPI_Comm_rank
[0] Starting MPI_Comm_size...
.
.
.
[0] Starting MPI_Send with count = 1, dest = 1, tag = 80...
[1] Starting MPI_Recv with count = 1, source = 0, tag = 80...
[0] Ending MPI_Send
[0] Starting MPI_Send with count = 5, dest = 1, tag = 80...
.
.
.
- -mpianim
通信状況をリアルタイムで X 上に表示します。
通信している node 間で,矢印がついたり消えたりします。
ただし,表示が速すぎて目で追うのは厳しいです...
mpianim での実行例
実行時(mpirun コマンド)に指定できるオプションとして,以下のものがあります。
- -mpiversion
mpich のバージョンを表示してくれます。
どの mpich でコンパイルしたかを確認するのに使えます。
- -gdb
rank 0 のプロセスを,GNU のデバッガ GDB のもとで実行します。
rank 0 だけですが,手軽にデバッガをつけて実行できる方法です。
コンパイル時には -g オプションをつけておきましょう。
- -dbx
rank 0 のプロセスを,デバッガ DBX のもとで実行します。
- -xxgdb
rank 0 のプロセスを,XXGDB のもとで実行します。
XXGDB は GDB に X の GUI をつけたものです。
- -ddd
rank 0 のプロセスを,DDD のもとで実行します。
DDD は GDB などのデバッガに対して
X の GUI をつけるプログラムです。
デバッガを使うなら,これがお勧めです。
- -mpedbg
エラー発生時にxterm を起動し,エラーを起こしたプロセスを
デバッグできます。
- -help
mpirun コマンドのオプションの説明などのメッセージを出力します。
- -p4help
p4 デバイスのバージョン,固有のオプションの説明を出力します。
- -p4dbg   level
rank 0 のプロセスにおける MPI の関数のデバッグメッセージを
出力します。
level には整数でデバッグレベルを指定します。
10 増やすごとに出力メッセージが増えるようです。
-p4dbg 10 での出力メッセージ例
10: p0_16885: (1.288002) sent msg of type 0 from 0 to 1 via socket 6
10: p0_16885: (1.288099) received type=0, from=1
10: p0_16885: (1.288316) sent msg of type 0 from 0 to 1 via socket 6
10: p0_16885: (1.288750) received type=0, from=1
10: p0_16885: (1.288891) sent msg of type 0 from 0 to 1 via socket 6
10: p0_16885: (1.465644) sent msg of type 0 from 0 to 1 via socket 6
10: p0_16885: (1.465832) received type=0, from=1
10: p0_16885: (1.466343) received type=0, from=1
10: p0_16885: (1.466499) received type=0, from=1
10: p0_16885: (1.466632) received type=0, from=1
10: p0_16885: (1.466770) sent msg of type 0 from 0 to 1 via socket 6
.
.
.
- -p4rdbg level
rank 0 以外のプロセスにおける MPI の関数のデバッグメッセージを
出力します。
level には整数でデバッグレベルを指定します。
10 増やすごとに出力メッセージが増えるようです。
上の -p4dbg と同時に指定可能です。
-p4rdbg 10 での出力メッセージ例
10: p1_17061: (1.092652) received type=0, from=0
10: p1_17061: (1.098911) received type=0, from=0
10: p1_17061: (1.099062) received type=0, from=0
10: p1_17061: (1.099152) received type=0, from=0
10: p1_17061: (1.099282) sent msg of type 0 from 1 to 0 via socket 3
10: p1_17061: (1.099370) received type=0, from=0
10: p1_17061: (1.099469) sent msg of type 0 from 1 to 0 via socket 3
10: p1_17061: (1.099866) received type=0, from=0
10: p1_17061: (1.100020) sent msg of type 0 from 1 to 0 via socket 3
.
.
.
- -p4norem
リモート(rank 0 以外)の各プロセスを自動的に起動するのではなく,
ユーザが手動で起動できるよう,
起動すべきコマンドを順に表示してくれます。
ユーザはここで表示されるコマンドを手動で順に入力することで
各プロセスを順番に起動していきます。
ここで,シェルプロンプトから起動する替わりに
デバッガから実行すれば,
デバッグしたいプロセスにデバッガをつけて実行できます。
最後に,mpich で使えるツール類を紹介します。
- Jumpshot
上記の mpich 付属のパフォーマンス評価用のツールです。mpicc に -mpilog をつけてコンパイルしたプログラムの実行時に出力されるログファイルを可視化してくれます。
|
お問い合せは
postmaster@alde.co.jp
までお願いします。
|