[mpich-discuss] need for MPI_Barrier in code using romio

Rajeev Thakur thakur at mcs.anl.gov
Thu Jul 1 18:06:04 CDT 2010


If different processes are writing and reading in this manner, MPI-IO's consistency semantics do not guarantee that the reader will see the data written. Just a barrier is not sufficient either. To see what you need to do, you can look at the slides attached as pdf at the bottom of this thread:
http://lists.mcs.anl.gov/pipermail/mpich-discuss/2007-January/001805.html

Rajeev


----- Original Message -----
From: "shankha" <shankhabanerjee at gmail.com>
To: mpich-discuss at mcs.anl.gov
Sent: Thursday, July 1, 2010 3:17:57 PM GMT -06:00 US/Canada Central
Subject: [mpich-discuss] need for MPI_Barrier in code using romio

Hi,
I have the following piece of code which writes a array ( buf ) on to
the file and tries to read it back from a different offset.
Is a MPI_Barrier call ( line no : 36 ) necessary after we have written
the array to the file and want to read it back. Logically it seems yes
because
unless the previous process has written on to the file one would read
erroneous values.

I tested my code with and without the Barrier. It seems to work fine
in both cases.
My question is do we need the Barrier call at line no  : 36

   1 #include <stdio.h>
  2 #include <mpi.h>
  3 #include <stdlib.h>
  4 #include <string.h>
  5 #include <assert.h>
  6 #include <stdbool.h>
  7
  8 #define BUF_SIZE 3
  9
 10
 11
 12 static void
 13 print_read_buf ( int myrank, int *read_buf, int buf_size );
 14
 15   int
 16 main ( int argc , char **argv )
 17 {
 18   int myrank , size , i = 0;
 19   MPI_File thefile;
 20   int buf [ BUF_SIZE ];
 21   MPI_Init(&argc, &argv);
 22   MPI_Comm_rank ( MPI_COMM_WORLD, &myrank );
 23   MPI_Comm_size ( MPI_COMM_WORLD, &size );
 24
 25   i = 0;
 26   while ( i < BUF_SIZE )
 27     buf [ i++ ] = myrank;
 28
 29   MPI_File_open ( MPI_COMM_WORLD, "testfile", MPI_MODE_CREATE |
MPI_MODE_RDWR,
 30       MPI_INFO_NULL, &thefile );
 31   MPI_File_set_view ( thefile, (( myrank + 4 ) % size ) * BUF_SIZE
*  sizeof ( int ), MPI_INT,
 32       MPI_INT, "native", MPI_INFO_NULL );
 33   MPI_File_write ( thefile, buf, BUF_SIZE, MPI_INT, MPI_STATUS_IGNORE );
 34   MPI_File_set_view ( thefile,  myrank * BUF_SIZE *  sizeof ( int
) , MPI_INT,
 35       MPI_INT, "native", MPI_INFO_NULL );

 36   MPI_Barrier ( MPI_COMM_WORLD );

 37   MPI_File_read_all ( thefile , buf, BUF_SIZE , MPI_INT,
MPI_STATUS_IGNORE );
 38   if ( myrank == 7 )
 39     print_read_buf ( myrank, buf , BUF_SIZE );
 40   MPI_File_close ( &thefile );
 41   MPI_Finalize ();
 42   return 0;
 43 }
 44
 45 static void
 46 print_read_buf ( int myrank, int *read_buf, int buf_size )
 47 {
 48   int i = 0;
 49   printf ( " READ BUF : MYRANK = %d \n", myrank );
 50   while ( i < buf_size )
 51     printf ( " %d ", read_buf [ i++ ] );
 52   printf ( "\n" );
 53 }
 54

Thanks
Shankha
_______________________________________________
mpich-discuss mailing list
mpich-discuss at mcs.anl.gov
https://lists.mcs.anl.gov/mailman/listinfo/mpich-discuss


More information about the mpich-discuss mailing list