itaps-parallel entities arg. in iMeshP_push... on non-owner side?
Onkar Sahni
osahni at scorec.rpi.edu
Fri Nov 7 13:43:26 CST 2008
Karen,
I should have mentioned that I reminded of this issue so that it stays in
the list to do (after SC08). I didn't mean to suggest to find resolution
on it before SC08.
I will look into your comments... and I agree we can re-visit this after
SC08.. to be clear for SC08 I plan to discuss iMeshP_pushTagsEnt() only in
exchange data category.
Thanks,
Onkar
>
> Onkar (and Jason):
>
> Yes, I still had your Oct 6 email in my mailbox. Thanks for bringing it
> back to my attention.
>
> Here's the short answer; more detailed comments are below.
>
> For SC08, we should probably demonstrate just the blocking tag exchange
> iMeshP_pushTags*(). The more I think about the non-blocking versions, the
> more confused I get, so we should probably take our time and really work
> out
> the details before presenting those functions. You make some good
> suggestions. Perhaps -- after SC08 -- we can write an outline of exactly
> how they should be used.
>
> I still don't understand the destination tag argument; perhaps Jason can
> help me on that. What is it, exactly? Is it a remote tag handle? If so,
> couldn't it be different on each of the receiving processors (so having
> one
> in the call would be insufficient)? Or is it a way just to specify a
> different tag name on the receiving processors (in which case the
> documentation is wrong)? Jason, would you please give an example of a
> source and destination tag so I can get the documentation right? Thanks!
>
> There are a few more comments below.
>
> On 10/6/08 4:06 PM, "Onkar Sahni" <osahni at scorec.rpi.edu> wrote:
>
>>> IMeshP_pushTagsEnt is a synchronous function, so all processors would
>>> call
>>> it. Each part would list only the entities it wanted to push. Parts
>>> with
>>> no entities to push would still call the function, but with no input
>>> entities.
>>>
>>> IMeshP_iPushTagsEnt is an asynchronous function, so Carl's answer below
>>> applies. Only P0 would call the function; the function would return a
>>> request handle. P0 would later have to check the requests to determine
>>> whether the request completed (iMeshP_Wait). P1 would have to poll for
>>> requests and perform the update as Carl describes.
>>
>> Overall it makes sense but I still have some concerns, see below:
>>
>> (0) I am assuming synchronous for iMeshP_pushTagsEnt() doesn't imply
>> usage
>> of MPI_Ssend() (on sender side) or any specific mode of send at
>> implementation level (one can say both synchronous or blocking in case
>> of
>> iMeshP_pushTagsEnt() means one and the same thing at iMeshP-level to a
>> user).
>
> Yes, when we say "synchronous" or "blocking," we are not specifying which
> MPI calls must be used. Rather, we are saying that the sender and
> receiver
> must call the function at roughly the same time.
>
>>
>> (1) Does iMeshP_pushTagsEnt() need to be called by "all processes"
>> (Karen
>> I just want to make it clear as you mentioned "all processors would call
>> it") or can it be called for a "segment" of shared entities only on
>> parts
>> sharing that segment?
>
> I don't see a reason why it couldn't be called for a segment of shared
> entities, as long as both the owners and those processes with copies of
> the
> segment both called it. Does that make it more difficult to implement?
>
>>
>> (2) iMeshP_iPushTagsEnt() implies iMeshP_RequestHandle(s) in
>> iMeshP_poll...() can be output but then why we call them "Request"
>> (considering MPI has MPI_Request and MPI_Status).
>
> Are you suggesting that iMeshP_iPushTags*() should be push-and-forget and,
> therefore, not return a request handle?
>
>>
>> I am also hoping that we can be close to MPI paradigm so that it will be
>> "easy-to-use" for users/applications (and also implementation can comply
>> to specification) so I have other related questions:
>>
>> before questions this is the map between iMeshP_ and MPI_ I have in my
>> mind:
>> iMesh_pushTagEnt...() ==> uses MPI_?send() (on sending side)
>> iMesh_pushTagEnt...() ==> uses MPI_?recv() (on receiving side)
>> iMeshP_Wait...() ==> uses MPI_wait() (for a given request)
>> iMeshP_poll...() ==> uses MPI_probe() or MPI_Iprobe()
>> (on receiving side, which uses MPI_Status)
>>
>> (where "?" implies any mode for send/recv. as per choice within
>> implementation like MPI_Ssend or MPI_Send or MPI_Isend or MPI_Recv or
>> MPI_IRecv)
>>
>> Here are further questions:
>>
>> (a) Is it an error to call iMeshP_iPushTagsEnt() (and may be also in
>> iMeshP_pushTagsEnt()) with receivers in "entities" array (i.e.,
>> non-owners
>> in case of push) as in case of iMeshP_iPushTagsEnt() one can avoid call
>> to
>> iMeshP_poll...() if receivers are provided in "entities" list?
>>
>> (b) What happens in case of iMeshP_pullT..() and iMesh_iPullT...() (as
>> per
>> my understanding non-owners sends and owner receives)? So
>> iMeshP_*pull...() is called with non-owners in "entities" list (as
>> senders/owners filled the "entities" list in the case of
>> iMesh_*push...())?
>>
>> (c) When will poll for messages end, I recall we discussed before that
>> it
>> would involve sync./collective stage. If iMeshP_poll...() leads to
>> having
>> a sync. stage then user should have the flexibility to provide
>> "entities"
>> list on receiving side in iMeshP_iPushTagsEnt() or iMeshP_iPullTagsEnt()
>> to avoid call to iMeshP_poll...()?
>>
>> There might be more questions as we implement more on these functions
>> ;)...
>>
>> Thanks,
>> Onkar
>>
>>>
>>> Karen
>>>
>>>
>>> On 10/4/08 8:39 PM, "Carl Ollivier-Gooch" <cfog at mech.ubc.ca> wrote:
>>>
>>>> Onkar Sahni wrote:
>>>>> Karen,
>>>>>
>>>>> I want to make sure that I understand, so I will ask this question in
>>>>> a
>>>>> slightly different way --- what if I want to exchange tag-data for
>>>>> only
>>>>> one entity (e0) which has copies in two parts P0 and P1, with P0 as
>>>>> owner,
>>>>> so I understand that I call iMeshP_push... from P0 (which sends) but
>>>>> do
>>>>> I
>>>>> make iMeshP_push... call on P1 or not? If so then is entities arg.
>>>>> empty
>>>>> and if not, then when is the counter-receive of point-to-point
>>>>> communication posted on non-owner side?
>>>>
>>>> This is one of the things the pollForRequests does: identify incoming,
>>>> unsolicited messages and do sensible things with them. Naturally, the
>>>> contents of the message will have to provide some info about what
>>>> "sensible" implies, because pollForRequests will have to handle not
>>>> only
>>>> receiving pushed tags, but also various parts of micro-migration.
>>>> Details will of course be implementation dependent, but
>>>> pollForRequests
>>>> is arguably the most complex function in the interface to implement.
>>>>
>>>> Carl
>>>>
>>>> --
>>>> ------------------------------------------------------------------------
>>>> Dr. Carl Ollivier-Gooch, P.Eng. Voice:
>>>> +1-604-822-1854
>>>> Associate Professor Fax:
>>>> +1-604-822-2403
>>>> Department of Mechanical Engineering email:
>>>> cfog at mech.ubc.ca
>>>> University of British Columbia
>>>> http://www.mech.ubc.ca/~cfog
>>>> Vancouver, BC V6T 1Z4
>>>> http://tetra.mech.ubc.ca/ANSLab/
>>>> ------------------------------------------------------------------------
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>>
>
>
>
>
More information about the itaps-parallel
mailing list