Implement source completion for VIS puts

Issue #137 resolved
Dan Bonachea created an issue

GEX collaborator-snapshot now has support for source completion events on VIS puts, and we need to wire this up to the UPC++ VIS support (which currently implements source completion as operation completion).

The full EX spec is here , and here is the relevant text:

GEX_FLAG_VIS_WITH_LC: (gex_VIS_*Put{NB,NBI} only) This flag requests asynchronous local completion indication for the local data payload buffers comprising the source region(s) of the VIS Put operation. Without this flag, local completion behaves as GEX_EVENT_DEFER, i.e. folded into operation completion.
When this flag is passed to gex_VIS_*PutNBI, asynchronous local completion indication behaves as specified in sec:"Extended API" for lc_opt=GEX_EVENT_GROUP.
When this flag is passed to gex_VIS_*PutNB, asynchronous local completion indication behaves as specified in sec:"Extended API" for lc_opt=&(gex_Event_t variable). In the latter case, the client should retrieve the gex_Event_t corresponding to local completion by passing the root gex_Event_t returned by the Put initiation call to gex_Event_QueryLeaf(), for example:

  gex_Event_t VISput_RC = gex_VIS_VectorPutNB(..., GEX_FLAG_VIS_WITH_LC);
  gex_Event_t VISput_LC = gex_Event_QueryLeaf(VISput_RC, GEX_EC_LC);

The second call is only valid when GEX_FLAG_VIS_WITH_LC was passed to the gex_VIS_*PutNB() call, and otherwise has undefined behavior.

Final note: on some conduits, requesting LC slightly increases overhead, so we should only do so if the UPC++ user actually scheduled some source completion action.

Comments (1)

  1. Log in to comment