Ah, this clears things up a bit. I still feel that using shared fileseeks is a dangerous practice however, so I will steer clear of them for now. I did this small experiment on a Macbook Pro with Snow Leopard 10.6.7, so the file system is HFS+. I just did the file size example since it was simple, I do not have any real interest in the filesize read this way.
Christian <-----Original Message-----> >From: Rob Latham [r...@mcs.anl.gov] >Sent: 7/1/2011 11:13:29 PM >To: jsquy...@cisco.com >Cc: us...@open-mpi.org >Subject: Re: [OMPI users] File seeking with shared filepointer issues > >On Sat, Jun 25, 2011 at 06:54:32AM -0400, Jeff Squyres wrote: > >> Rob -- can you comment on this, perchance? Is this a bug in ROMIO, or if not, how is one supposed >to use this interface can get consistent answers in all MPI processes? > >Maybe the problem here is that shared file pointers were intended for >things like reading from a work queue or writing to a log file. > >Determining the file size or the position of the file pointer is a >little racy, since some other process can sneak in and change things >(getting the shared file pointer is independent but setting it is >collective) > >When writing a log file or reading from a work queue the exact value >of the shared file pointer is actually irrelevant. The program just >wants "the next" item, or "the last" item. > >The more robust way to do this file size determination, if that's >really what you want, is to have rank >0 do the work and broadcast the result to everyone else. > >==rob > >> >> >> On Jun 23, 2011, at 10:04 AM, Christian Anonymous wrote: >> >> > 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? >> > >> > _______________________________________________________________ >> > 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____________________________________________ ___ >> > users mailing list >> > us...@open-mpi.org >> > http://www.open-mpi.org/mailman/listinfo.cgi/users >> > >> >> > >-- >Rob Latham >Mathematics and Computer Science Division >Argonne National Lab, IL USA >_______________________________________________ >users mailing list >us...@open-mpi.org >http://www.open-mpi.org/mailman/listinfo.cgi/users >. > <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</font>