LoginSignup
5
8

More than 5 years have passed since last update.

MPIプログラムのデバッグ

Posted at

MPIプログラムの開発

MPI(Message Passing Interface)のデバッグが難しいというお話。

世のMPIライブラリ利用者ってデバッグをどうやっているのでしょうか…?
MPIを使ったプログラムだとデバッグの基本中の基本、Printfデバッグが一筋縄ではできません。

#include <stdio.h>
#include "mpi.h"

int main(int argc, char *argv[]) {
    int numprocs, myid;
    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
    MPI_Comm_rank(MPI_COMM_WORLD,&myid);

    printf("Hello World.\n");
    MPI_Finalize();
    return 0;
}

例えば、上のようなプログラムを実行します。

$ mpiexec -np 4 ./a.out
Hello World.
Hello World.
Hello World.
Hello World.

とか出てくるはずです。
普通にやると複数のプロセスの出力が一つにまとまるせいで、どのプロセスが変な出力を出したのか全く見えません。
かと言って以下のように、毎度毎度ランク番号を出すわけにもいきません。
printf("[%d], Hello World.\n", myid);

MPIのOSS実装の一つであるOpen MPIには以下のようなオプションがあり、このオプション付きで実行するとランク番号ごとに出力を行うようになります。

$ mpiexec --output-filename hogehoge -np 4 ./a.out

これで、各プロセスごとに出力ファイルが別ファイルに出力されるようになり、printfデバッグがしやすくなると思います。

まぁデバッグならプロセスにアタッチするとか、coreファイルデバッグとかあると思いますが、最も単純なデバッグ方法をMPIプログラムでも使える方法を書いてみました。

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8