Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |  

This web mail archive is frozen.

This page is part of a frozen web archive of this mailing list.

You can still navigate around this archive, but know that no new mails have been added to it since July of 2016.

Click here to be taken to the new web archives of this list; it includes all the mails that are in this frozen archive plus all new mails that have been sent to the list since it was migrated to the new archives.

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/