本当は怖いHPC

HPC屋の趣味&実益ブログ

mpirunとmpiexecの違いは何か

MPIプログラムを起動する方法として,mpirunmpiexecがあります.プログラムを普通に起動するだけなら,どちらのコマンドでも困ることはありません.実行するノードとプロセス数の指定をする程度なら,どの実装のどちらのコマンドを使っても大差ないからです.

初期のMPI標準(MPI-1)には,プログラムの起動方法は言及されていませんでした.よって,それぞれのMPI実装はmpirunと呼ばれるコマンドを実装しましたが,コマンドラインオプションはそれぞれ異なるものでした.

これは不便だということで、MPI-2においてmpiexecが標準として定められました.現在の標準である MPI-3.1 では,「8.8 Portable MPI Process Startup」でmpiexecコマンドが述べられています.

標準なのだから黙ってmpiexecを使えばいいのですが,残念ながら話はそこまで単純ではありません.現実には,mpiexecに定められているのは最大公約数的なオプションだけで,詳細は実装に任されています.

オプション 意味
-n プロセス数
-host MPIプログラムを実行するホストが指定されたファイル(書式は実装依存)
-arch アーキテクチャ名.よくわからん
-wdir プロセスが実行される実行ディレクトリ名
-file 実行に関する追加情報が書かれたファイルを指定.中身は実装依存(なんじゃそりゃ)
-sort MPI_COMM_SPAWNなどが作れるプロセス数を指定.詳細省略

標準なので仕方ないのですが,これではいかにも物足りません.

現実的に重要なのは,プロセスのリソースへのマッピングバインディング,それから環境変数の指定です.MPI実装の事実上の二強である Open MPI と Mpich では,--map-by--bind-to-x-genvなどのオプションが実装されていますが,それぞれ詳細は異なります.これらについてのまとめは非常に少ないので,時間を見つけてまとめてみたいと思います.

余談だが,世の中の殆どのMPI実装は Open MPIか Mpichの派生で、mpichの派生としては mvapich, Intel MPI,またOpen MPIの派生としてはFujitsu MPIなどがあります.この2つのmpiexecの文法を身につければ怖くないと言えるでしょう.

MPI並列プログラミング

MPI並列プログラミング

【広告】