Open MPI logo

Open MPI User's Mailing List Archives

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

Subject: [OMPI users] File seeking with shared filepointer issues
From: Christian Anonymous (mpibot_at_[hidden])
Date: 2011-06-23 10:04:22


I'm having some issues with MPI_File_seek_shared. Consider the following
small test C++ program

#include <iostream>
#include <mpi.h>

#define PATH "simdata.bin"

using namespace std;

int ThisTask;

int main(int argc, char *argv[])
{
MPI_Init(&argc,&argv); /* Initialize MPI */
MPI_Comm_rank(MPI_COMM_WORLD,&ThisTask);

MPI_File fh;
int success;
MPI_File_open(MPI_COMM_WORLD,(char *)
PATH,MPI_MODE_RDONLY,MPI_INFO_NULL,&fh);

if(success != MPI_SUCCESS){ //Successfull open?
char err[256];
int err_length, err_class;

MPI_Error_class(success,&err_class);
MPI_Error_string(err_class,err,&err_length);
cout << "Task " << ThisTask << ": " << err << endl;
MPI_Error_string(success,err,&err_length);
cout << "Task " << ThisTask << ": " << err << endl;

MPI_Abort(MPI_COMM_WORLD,success);
}

/* START SEEK TEST */
MPI_Offset cur_filepos, eof_filepos;

MPI_File_get_position_shared(fh,&cur_filepos);

//MPI_Barrier(MPI_COMM_WORLD);
MPI_File_seek_shared(fh,0,MPI_SEEK_END); /* Seek is collective */

MPI_File_get_position_shared(fh,&eof_filepos);

//MPI_Barrier(MPI_COMM_WORLD);
MPI_File_seek_shared(fh,0,MPI_SEEK_SET);

cout << "Task " << ThisTask << " reports a filesize of " << eof_filepos
<< "-" << cur_filepos << "=" << eof_filepos-cur_filepos << endl;
/* END SEEK TEST */

/* Finalizing */
MPI_File_close(&fh);
MPI_Finalize();
return 0;
}

Note the comments before each MPI_Barrier. When the program is run by
mpirun -np N (N strictly greater than 1), task 0 reports the correct
filesize, while every other process reports either 0, minus the filesize
or the correct filesize. Uncommenting the MPI_Barrier makes each process
report the correct filesize. Is this working as intended? Since
MPI_File_seek_shared is a collective, blocking function each process
have to synchronise at the return point of the function, but not when
the function is called. It seems that the use of MPI_File_seek_shared
without an MPI_Barrier call first is very dangerous, or am I missing
something?

<P><p><font face="Arial, Helvetica, sans-serif" size="2" style="font-size:13.5px">_______________________________________________________________<BR>Care2 makes it easy for everyone to live a healthy, green lifestyle
and impact the causes you care about most. Over 12 Million members!
http://www.care2.com

Feed a child by searching the web! Learn how http://www.care2.com/toolbar>