itaps-parallel entities arg. in iMeshP_push... on non-owner side?

Onkar Sahni osahni at scorec.rpi.edu
Mon Oct 6 17:06:47 CDT 2008


>
> 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).

(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?

(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).

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