[MPI3-IO] shared file pointer
Mohamad Chaarawi
chaarawi at hdfgroup.org
Thu Feb 23 15:48:02 CST 2012
Hi Adam,
On 2/22/2012 7:25 PM, Adam T. Moody wrote:
> I will say, though, given that we can now have multiple outstanding
> non-blocking collective I/O calls, it would be really nice to be able
> to do the following:
>
> MPI_File_iread_ordered()
> MPI_File_iread_ordered()
> MPI_File_iread_ordered()
> MPI_Waitall()
>
> This provides a natural way for someone to read in three different
> sections from a file -- just issue all the calls and sit back and
> wait. However, this can only be done if the pointer is updated in the
> initiation call.
I don't see how the current proposal would prevent you from doing this..
The only ordering that we say is undefined is when you mix collective
and independent operations..
Thanks,
Mohamad
> -Adam
>
>
> Adam T. Moody wrote:
>
>> Hi Mohamad and Dries,
>> Yes, I see your point now about "using the corresponding blocking
>> collective routines when ... the end call is issued". I don't think
>> that's what the standard intended, but you're very right in that the
>> text says two different things. Some statements say the pointer is
>> updated by the call that initiates the operation, i.e., the _begin
>> call, but this says the opposite in that an implementation is allowed
>> to do all the work (including updating of the pointer) in the _end
>> call. Thus, it's not clear whether the pointer will always be
>> updated after returning from the _begin call.
>> -Adam
>>
>>
>> Mohamad Chaarawi wrote:
>>
>>
>>
>>> Hi Adam,
>>>
>>>
>>>
>>>
>>>> This statement says that an app can't know whether the begin call
>>>> will synchronize or not, so a portable app must assume that the
>>>> call does synchronize. However, the earlier statements say that
>>>> regardless of whether the MPI library implements the begin call as
>>>> blocking or non-blocking, the app is always guaranteed that the
>>>> shared file pointer will be updated upon return from the begin call.
>>>>
>>>>
>>> Yes but I agree with Dries that there is a contradiction, and it can
>>> be interpreted by a developer either way, i.e. the pointer can be
>>> either updated in the begin or end call..
>>>
>>>
>>>
>>>
>>>> With split collectives, the "begin" call that initiates the
>>>> operation *can* block, but with non-blocking collectives (as
>>>> currently defined), the "i" call that initiates the operation
>>>> *never* blocks. It's this difference between split collectives and
>>>> non-blocking collectives that causes the difficulty here. To
>>>> efficiently meet the requirements of updating the shared file
>>>> pointer, we'd really like to update the pointer during the "i"
>>>> call, but this would require the "i" call to block.
>>>>
>>>>
>>> I do not have a strong opinion here, as we don't really use this
>>> feature.. But I can see how this could complicate things more to the
>>> user and the developer, which makes me more inclined to keep the
>>> ordering undefined.
>>> That said, we do want to start working on a ticket for new MPI-I/O
>>> features that would actually track order inside the implementation
>>> for nonblocking file access and manipulation routines (more like
>>> queuing).. We discussed that at the last Chicago meeting.. This is
>>> not MPI-3.0 bound though :)
>>>
>>> Thanks,
>>> Mohamad
>>>
>>>
>>> _______________________________________________
>>> MPI3-IO mailing list
>>> MPI3-IO at lists.mpi-forum.org
>>> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-io
>>>
>>>
>>>
>>
>>
>>
>>
>
> _______________________________________________
> MPI3-IO mailing list
> MPI3-IO at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-io
More information about the mpiwg-io
mailing list