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 [robl@mcs.anl.gov]
>Sent: 7/1/2011 11:13:29 PM
>To: jsquyres@cisco.com
>Cc: users@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
>> > users@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
>users@open-mpi.org
>http://www.open-mpi.org/mailman/listinfo.cgi/users
>.
>

_______________________________________________________________
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