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 
  • 考えられること
    1. 64ビットでなく32ビット用のライブラリを使わなければいけない。
    2. ライブラリがmpich2には対応していない。
    3. 環境変数の定義が適切でない。
    4. ライブラリがスレッドセーフ(複数のスレッドが並行にコールしても、正常に動作する関数の性質)でないのに、1CPUの複数スレッドで計算しようとしている。
  • 考えられる原因を順番に試してみた。
    1. gcc -v」で調べると、確かに64ビット環境を使っている。64ビット用のライブラリで間違いない。
    2. mpich_ifortでやったら動いた。「mpirun -np 8」はOK。「mpirun -np 4」だとプロセスが中断する。(全く動かないという問題は)これで解決した。
    3. 念のため。WARNINGでちゃんと設定するように言われた。上のエラーの直接の原因ではない。
    4. 1スレッドは1CPUに割り当てられている。