每当我尝试作为发送缓冲区调用mpi_reduce
时mpi_in_place
,它都会崩溃。谷歌的拖网显示这是 OMPI 1.3.3 在 Mac OS 上的一个问题 - 但我在 CentOS 上使用 OMPI 1.6.3(使用 gfortran 4.4.6)。
以下程序崩溃:
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 实现?