読者です 読者をやめる 読者になる 読者になる

本当は怖い情報科学

情報系大学院生の趣味&実益ブログ。

mpirunとmpiexecの違いは何か

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

不覚にも最近知ったのだが,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の派生なので,この2つのmpiexecの文法を身に付ければ他は怖くない. 具体的には,mpichの派生としては mvapich, Intel MPI,Open MPIの派生としてはFujitsu MPIなどがある.

MPI並列プログラミング

MPI並列プログラミング

【広告】