2

最近、単一のマシン (Ubuntu 12.04 - 64 ビット コア i7 2670 QM) で mpi コードをコンパイルして実行しようとしていました。次の構成を使用して mpich2 バージョン 1.2 をインストールしました。

./configure --prefix=/opt/mpich2 --enable-f77 --enable-fc --enable-cxx --with-device=ch3:sock --with-pm=mpd CC=icc CXX=icpc F77=ifort FC=ifort 2>&1 | tee configure.log

インストールは問題なく、mpd はうまく動作しました。サンプルで mpd をテストしましたが、すべてが完璧です。

mpich2 をコンパイルしたときに mpif90 が作成されなかった理由がわからないため、mpif77 を使用してコードをコンパイルします。しかし、mpif77 を使用しても、エラーなしでコードをコンパイルできました。

コードをコンパイルするために使用しているフラグは次のとおりです。

コンパイラの場合:

LN_FLAGS= -lm -larpack -lsparskit -lfftw3 -lrt -llapack -lblas

MPI リンカーの場合:

LN_FLAGS_MPI= $(LN_FLAGS) -I$(MPIHOME)/include -L$(MPIHOME) $(MPIHOME)/lib/libmpich.a -lfmpich -lopa -lmpe

問題は、自分のマシンでコードを実行しようとしたときです。

まず、次のように mpd を呼び出します。

mpd &

次に、コードを次のように実行します。

mpirun -np 4 ./code_mpi

私は次のように多くのバリエーションを試しました:

mpiexec -np 4 ./code_mpi
mpirun -n 2 ./code_mpi
mpiexec -n 2 ./code_mpi

そして、すべて同じエラーになります。

Fatal error in MPI_Comm_rank: Invalid communicator, error stack:
MPI_Comm_rank(106): MPI_Comm_rank(MPI_COMM_NULL, rank=0x14b46a0) failed
MPI_Comm_rank(64).: Null communicator
Fatal error in MPI_Comm_rank: Invalid communicator, error stack:
MPI_Comm_rank(106): MPI_Comm_rank(MPI_COMM_NULL, rank=0x14b46a0) failed
MPI_Comm_rank(64).: Null communicator
[cli_2]: aborting job:
Fatal error in MPI_Comm_rank: Invalid communicator, error stack:
MPI_Comm_rank(106): MPI_Comm_rank(MPI_COMM_NULL, rank=0x14b46a0) failed
MPI_Comm_rank(64).: Null communicator
[cli_1]: aborting job:
Fatal error in MPI_Comm_rank: Invalid communicator, error stack:
MPI_Comm_rank(106): MPI_Comm_rank(MPI_COMM_NULL, rank=0x14b46a0) failed
MPI_Comm_rank(64).: Null communicator
rank 2 in job 1  ubuntu_38132   caused collective abort of all ranks
  exit status of rank 2: killed by signal 9 
Fatal error in MPI_Comm_rank: Invalid communicator, error stack:
MPI_Comm_rank(106): MPI_Comm_rank(MPI_COMM_NULL, rank=0x14b46a0) failed
MPI_Comm_rank(64).: Null communicator
[cli_3]: aborting job:
Fatal error in MPI_Comm_rank: Invalid communicator, error stack:
MPI_Comm_rank(106): MPI_Comm_rank(MPI_COMM_NULL, rank=0x14b46a0) failed
MPI_Comm_rank(64).: Null communicator
Fatal error in MPI_Comm_rank: Invalid communicator, error stack:
MPI_Comm_rank(106): MPI_Comm_rank(MPI_COMM_NULL, rank=0x14b46a0) failed
MPI_Comm_rank(64).: Null communicator
[cli_0]: aborting job:
Fatal error in MPI_Comm_rank: Invalid communicator, error stack:
MPI_Comm_rank(106): MPI_Comm_rank(MPI_COMM_NULL, rank=0x14b46a0) failed
MPI_Comm_rank(64).: Null communicator
rank 1 in job 1  ubuntu_38132   caused collective abort of all ranks
  exit status of rank 1: return code 1 

自宅で作業するには、このコードを自分のパソコンで実行する必要があるため、この問題を解決するためにほぼ 2 週間を費やしました。私を助けることができるすべてに感謝します!


MPI ライブラリを初期化する方法は次のとおりです。

subroutine init()
integer                      :: provided
call mpi_init(mpi_err)
call mpi_comm_rank(mpi_comm_world,rank,mpi_err)
call mpi_comm_size(mpi_comm_world,an_proc,mpi_err)
call MPI_BARRIER(MPI_COMM_WORLD,mpi_err)
end subroutine init
4

1 に答える 1

4

問題は、サブルーチンが何でmpi_comm_worldあるかを知らないことです。この整数値は、mpif.hヘッダー (またはmpif90 のモジュール) に設定されます。コードが作成されると、 はコンパイラによってランダムに割り当てられ、によって提供される実際のコミュニケータ ハンドルmpi_comm_worldとは関連付けられません。 mpi_comm_worldmpi

implicit none一般に、これらのタイプのエラーを警告するコードを使用するのが最善です。次のことを試してください。

subroutine init()
!use mpi   !This one is for f90
implicit none
include 'mpif.h'   !use this for f77
integer  :: provided,rank,an_proc,ierr
call mpi_init(ierr)
call mpi_comm_rank(mpi_comm_world,rank,ierr)
call mpi_comm_size(mpi_comm_world,an_proc,ierr)
call MPI_BARRIER(MPI_COMM_WORLD,ierr)
end subroutine init
于 2012-10-20T01:47:07.390 に答える