アライドエンジニアリング

技術情報
並列計算プログラムのデバッグはなかなか面倒ですね。そのためそれぞれの実装系では,デバッグを支援するための機能が用意されています。それらを有効に利用すると効率良くプログラミングが行えます。

次の解説記事にも,MPICH のデバッグ機能についての詳しい解説がありますのでご参照ください。

秋葉博,並列処理と MPI 入門 (3),計算工学,9,No.2,pp.29-34,2004.4.

mpich のデバッグ機能
ここでは,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

までお願いします。


技術情報へ戻る

(C) 2001-2012 Allied Engineering Corporation. All rights reserved.