MPI計算でのエラー
配布されているライブラリをリンクしたプログラムを書き、「mpiexec -n 2」で実行したときのエラーメッセージ。メッセージを見ても解決方法が検討つかない。
/usr/local/gcc/mpich2-1.0.7/bin/mpdlib.py:8: DeprecationWarning: The popen2 module is deprecated. Use the subprocess module. import sys, os, signal, popen2, socket, select, inspect /usr/local/gcc/mpich2-1.0.7/bin/mpdlib.py:15: DeprecationWarning: the md5 module is deprecated; use hashlib instead from md5 import new as md5new Fatal error in MPI_Comm_size: Invalid communicator, error stack: MPI_Comm_size(112): MPI_Comm_size(comm=0x5b, size=0xc9c5ec) failed MPI_Comm_size(70).: Invalid communicator[cli_0]: aborting job: Fatal error in MPI_Comm_size: Invalid communicator, error stack: MPI_Comm_size(112): MPI_Comm_size(comm=0x5b, size=0xc9c5ec) failed MPI_Comm_size(70).: Invalid communicator Fatal error in MPI_Comm_size: Invalid communicator, error stack: MPI_Comm_size(112): MPI_Comm_size(comm=0x5b, size=0xc9c5ec) failed MPI_Comm_size(70).: Invalid communicator[cli_1]: aborting job: Fatal error in MPI_Comm_size: Invalid communicator, error stack: MPI_Comm_size(112): MPI_Comm_size(comm=0x5b, size=0xc9c5ec) failed MPI_Comm_size(70).: Invalid communicator rank 1 in job 127 g207_46938 caused collective abort of all ranks exit status of rank 1: return code 1 rank 0 in job 127 g207_46938 caused collective abort of all ranks exit status of rank 0: killed by signal 9
- 考えられること
- 64ビットでなく32ビット用のライブラリを使わなければいけない。
- ライブラリがmpich2には対応していない。
- 環境変数の定義が適切でない。
- ライブラリがスレッドセーフ(複数のスレッドが並行にコールしても、正常に動作する関数の性質)でないのに、1CPUの複数スレッドで計算しようとしている。
- 考えられる原因を順番に試してみた。
- 「gcc -v」で調べると、確かに64ビット環境を使っている。64ビット用のライブラリで間違いない。
- mpich_ifortでやったら動いた。「mpirun -np 8」はOK。「mpirun -np 4」だとプロセスが中断する。(全く動かないという問題は)これで解決した。
- 念のため。WARNINGでちゃんと設定するように言われた。上のエラーの直接の原因ではない。
- 1スレッドは1CPUに割り当てられている。