Open MPI logo

Open MPI User's Mailing List Archives

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

Subject: Re: [OMPI users] fortran and MPI_Barrier, not working?
From: Gus Correa (gus_at_[hidden])
Date: 2009-11-14 17:09:04


Alberto,
digo, Alvaro,
digo, Fernando,
digo, Ricardo Reis ...

Salve, oh pa'!

I think MPI doesn't ensure that the output will come ordered
according to process rank, as in your expected output list.
Even MPI_Barrier doesn't sync the output, I suppose.
It syncs only the communication among the processes,
but you actually have no communication on your code!
(Other than the barrier itself, of course.)

You have a different stdout buffer for each process,
and the processes probably compete for access
to the (single) output file,
when they hit "call flush", I would guess.
The Linux scheduler may set the game here,
and tell who's in first, in second, in third, etc.
But I'm not knowledgeable on these things,
I am just wildly guessing.

Note that both lists you sent have exactly the same lines,
though in different order.
I think this is telling that there is nothing wrong
with MPI_Barrier or with your code.
A shuffled output order is to be expected, no more no less.
And the order will probably vary from run to run, right?

Also, on your outer loop istep runs from 1 to 4,
and process rank zero prints an asterisk at each outer loop iteration.
Hence, I think four asterisks, not three, should be expected, right?
Four asterisks is what I see on your first list (the shuffled one),
not on the ordered one.

Now, the question is how to produce the
ordered output you want.

One way would be to send everything to process 0,
and let it order the messages, `a la mode de "hello_world",
but this would be kind of cheating.
Maybe there is a solution with MPI-IO,
to concatenate the output file they way you want first,
then flush it.

**

Arre lo'gica bina'ria impiedosa!

"Onde pode acolher-se um fraco humano,
Onde tera' segura a curta vida,
Que na~o se arme e se indigne o Ce'u sereno
contra um bicho da terra ta~o pequeno?"

Me diga?

Abrac,o
Gus
---------------------------------------------------------------------
Gustavo Correa
Lamont-Doherty Earth Observatory - Columbia University
Palisades, NY, 10964-8000 - USA
---------------------------------------------------------------------
1
Ricardo Reis wrote:
>
> 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/
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users