Ricardo,

I can't reproduce your problem with the latest version (trunk r21734). If I run the provided program on two nodes I get the following answer.
[***]$ mpif77 inplace.f -o inplace -g
[***]$ mpirun -bynode -np 2 ./inplace
 Result:
   3.0000000       3.0000000       3.0000000       3.0000000

This seems correct and in sync with the C answer.

  george.


On Jul 27, 2009, at 09:42 , Ricardo Fonseca wrote:

program inplace

  use mpi

  implicit none

  integer :: ierr, rank, rsize, bsize
  real, dimension( 2, 2 ) :: buffer, out
  integer :: rc

  call MPI_INIT(ierr)
  call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
  call MPI_COMM_SIZE(MPI_COMM_WORLD, rsize, ierr)

  buffer = rank + 1
  bsize = size(buffer,1) * size(buffer,2)

  if ( rank == 0 ) then
call mpi_reduce( MPI_IN_PLACE, buffer, bsize, MPI_REAL, MPI_SUM, 0, MPI_COMM_WORLD, ierr )
  else
call mpi_reduce( buffer, 0, bsize, MPI_REAL, MPI_SUM, 0, MPI_COMM_WORLD, ierr )
  endif

  ! use allreduce instead
! call mpi_allreduce( MPI_IN_PLACE, buffer, bsize, MPI_REAL, MPI_SUM, MPI_COMM_WORLD, ierr )

  if ( rank == 0 ) then
    print *, 'Result:'
    print *, buffer
  endif

  rc = 0
  call mpi_finalize( rc )

end program


Reply via email to