Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: [OMPI users] fortran and MPI_Barrier, not working?
From: Ricardo Reis (rreis_at_[hidden])
Date: 2009-11-14 06:53:53


  Hi

  I'm testing this in a debian box, openmpi 1.3-2, compiled with gcc suite
(all from packages). After compiling and running the code I'm baffled with
the output, it seems MPI_Barrier is not working. Maybe it is such a basic
error I'm doing that I can't figure it out... See the code below, the
output it gives (one of because it's a bit erratic) and what I would
expect as output. Any help would be aprecciated...

  Code was compiled with

  mpif90 -O0 -g -fbounds-check -Wall test_mpi.f90 -o test_mpi

  - > code - cut here ----------------------

program testmpi

   use iso_fortran_env

   implicit none

   include 'mpif.h'

   integer, parameter :: ni=16,nj=16,nk=16

   integer, parameter :: stdout=output_unit, stderr=error_unit, &
        stdin=input_unit

   integer :: istep, idest, idx, &
        ierr, my_rank, world, nprocs

   ! > CODE STARTS ----------------------------------------------- *

   call MPI_Init(ierr)

   world = MPI_COMM_WORLD
   call MPI_comm_rank(world, my_rank, ierr)
   call MPI_comm_size(world, nprocs, ierr)

   call MPI_Barrier(world, ierr)

   do istep=1, nprocs

      idest=ieor(my_rank, istep)

      if(my_rank.eq.0) print '("*",/)'
      call flush(stdout)

      call MPI_Barrier(world, ierr)

      do idx=0,nprocs-1

         if(idx.eq.my_rank .and. idest.lt.nprocs)then
            print '("ISTEP",I2," IDX",I2," my_rank ",I5," idest ",I5)', &
                istep, idx, my_rank, idest
            call flush(stdout)
         endif

         call MPI_Barrier(world, ierr)
      enddo

       call MPI_Barrier(world, ierr)

   enddo

   call MPI_Barrier(world, ierr)
   call MPI_Finalize(ierr)

end program testmpi

  - < code - cut here ----------------------

  - > output - cut here ----------------------

*

ISTEP 1 IDX 1 my_rank 1 idest 0
ISTEP 2 IDX 1 my_rank 1 idest 3
ISTEP 1 IDX 2 my_rank 2 idest 3
ISTEP 2 IDX 2 my_rank 2 idest 0
ISTEP 1 IDX 3 my_rank 3 idest 2
ISTEP 1 IDX 0 my_rank 0 idest 1
*

ISTEP 2 IDX 0 my_rank 0 idest 2
ISTEP 2 IDX 3 my_rank 3 idest 1
ISTEP 3 IDX 3 my_rank 3 idest 0
ISTEP 3 IDX 1 my_rank 1 idest 2
ISTEP 3 IDX 2 my_rank 2 idest 1
*

ISTEP 3 IDX 0 my_rank 0 idest 3
*

  - < output - cut here ----------------------

  - > expected output - cut here ----------------------

*

ISTEP 1 IDX 0 my_rank 0 idest 1
ISTEP 1 IDX 1 my_rank 1 idest 0
ISTEP 1 IDX 2 my_rank 2 idest 3
ISTEP 1 IDX 3 my_rank 3 idest 2

*

ISTEP 2 IDX 0 my_rank 0 idest 2
ISTEP 2 IDX 1 my_rank 1 idest 3
ISTEP 2 IDX 2 my_rank 2 idest 0
ISTEP 2 IDX 3 my_rank 3 idest 1

*

ISTEP 3 IDX 0 my_rank 0 idest 3
ISTEP 3 IDX 1 my_rank 1 idest 2
ISTEP 3 IDX 2 my_rank 2 idest 1
ISTEP 3 IDX 3 my_rank 3 idest 0

  - < expected output - cut here ----------------------

  Ricardo Reis

  'Non Serviam'

  PhD candidate @ Lasef
  Computational Fluid Dynamics, High Performance Computing, Turbulence
  http://www.lasef.ist.utl.pt

  Cultural Instigator @ Rádio Zero
  http://www.radiozero.pt

  Keep them Flying! Ajude a/help Aero Fénix!

  http://www.aeronauta.com/aero.fenix

  http://www.flickr.com/photos/rreis/