mpi_reduce
とmpi_in_place
を送信バッファとして呼び出しようとすると、クラッシュします。 Googleのトロールは、これがOMPI 1.3.3のMac OSで問題になっていることを明らかにしていますが、CentOSとOMPI 1.6.3(gfortran 4.4.6)を使用しています。場所mpi_reduceがOpenMPIでクラッシュする
次のプログラムがクラッシュ:
PROGRAM reduce
USE mpi
IMPLICIT NONE
REAL, DIMENSION(2, 3) :: buffer, gbuffer
INTEGER :: ierr, me_world
INTEGER :: buf_shape(2), counts
CALL mpi_init(ierr)
CALL mpi_comm_rank(mpi_comm_world, me_world, ierr)
buffer = 1.
IF (me_world .EQ. 0) PRINT*, "buffer: ", buffer
buf_shape = SHAPE(buffer)
counts = buf_shape(1)*buf_shape(2)
CALL mpi_reduce(MPI_IN_PLACE, buffer, counts, mpi_real, mpi_sum, 0, mpi_comm_world, ierr)
IF (me_world .EQ. 0) PRINT*, "buffer: ", buffer
CALL mpi_finalize(ierr)
END PROGRAM reduce
MPIエラーがある:
MPI_ERR_ARG: invalid argument of some other kind
非常に有用ではありません。
mpi_reduce
をどのように呼び出す必要がありますか?これは他のコンパイラ/ MPI実装でも機能しますか?
ありがとうございました。私は 'MPI_IN_PLACE'のドキュメントを誤って解釈しました。集合的なコミュニケーションは、全く同じ議論ですべてのプロセスによって呼び出されなければならないと思っていました。 – Yossarian
本当によろしいですか?私の生産コードを調べたところ、間違った使い方の例が多く、これまでに問題は発生していません。 –
@VladimirFには、 'MPI_IN_PLACE'を' MPI_ALLTOALL'や 'MPI_ALLREDUCE'のようなすべてのランクで送信バッファとして指定しなければならないいくつかの集合的な操作があります。標準では、各操作の適切な使用方法を個別に示しています。 –