【发布时间】:2013-07-18 11:20:35
【问题描述】:
每当我尝试使用mpi_in_place 作为发送缓冲区调用mpi_reduce 时,它都会崩溃。谷歌搜索显示这在 Mac OS 上是 OMPI 1.3.3 的问题 - 但我在 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 实现?
【问题讨论】: