RMA-capable Multi-EP support in ibv/FAST
Paul Hargrove
Branch: PHHargrove/gasnet-public:ibv-multi-ep
Branch: berkeleylab/gasnet:memory_kinds
Merged
Merged pull request
Merge pull request #386 into memory_kinds
Merge pull request #386 into memory_kinds
Summary:
This PR provides the ability to create non-primordial endpoints with
GEX_EP_CAPABILITY_RMA
with ibv conduit (FAST segment mode only) and enhancements totesttmpair
to exercise the new endpoints. At this time, there is still no support for creating teams containing non-primordial endpoints, and all communication using them must be conducted using TM-pairs.There are no new injection resources, such as an IBV QueuePair.
Status:
Ready for review.
Fairly well tested on Dirac and Wombat (both with and without PSHM).
The ibv-conduit testing on Wombat was dual-rail.
Commits:
Implement gasneti_[ei]_tm_rank_to_ep_index
This commit implements
gasneti_[ei]_tm_rank_to_ep_index()
to lookup the index of the endpoint named by a(tm,rank)
pair. It is able to handle TM-pairs correctly and optimizes for TM0.Prior to this call, it was necessary to query the entire EP_Location and extract the index portion. This is expected to be more ammenable to optimization than that pattern, for those cases where the jobrank is not also needed.
Initial multi-EP work in Bind, Publish and QueryBound
This commit updates the conduit-independent code for
gex_EP_BindSegment()
andgex_EP_PublishBoundSegment()
to store segment bounds for non-primordial endpoints. The implementation ofgasneti_Segment_QueryBound()
is updated to use this information to answer for non-primordial endpoints.This work also updates the bounds-checking macros to use the newly maintained segment bounds data.
PSHM: initial multi-EP support
This commit updates the internal functions
gasneti_pshm_local_rank()
andgasneti_pshm_in_supernode()
to correctly consider non-primordial endpoints as "outside" the supernode.Additionally, these two functions and another peer are documented as TM-pair aware (which was already true prior to this commit).
ibv: create/allow intra-nbrhd connections
This commit changes connection and injection logic in ibv-conduit to permit intra-neighborhood communication over IBV. This is required for multi-EP support, because non-primordial EPs are not cross-mapped by PSHM. Additionally, this will be a requirement for eventual off-loaded remote atomics, which must perform all accesses via the HCA. It is the future case for atomics which motivates not retaining logic to exclude loopback.
To compensate for the loss of "!IN_NBRHD" assertions at the deepest levels of the call stack (where endpoint index info is unavailable), this commit introduces new ones in the Put, Get and AM code paths. In the case of AMs the assertions is still "!IN_NBRHD". However, for RMA operations the assertion is "!PRIMORDIAL || !IN_NBDHB".
ibv: initial multi-EP support
This commit implements initial multi-EP support in ibv-conduit, for FAST segment mode only.
The value of GASNET_MAXEPS has been raised to 8 initially.
The hook called by gex_EP_Create() has been updated to properly initialize non-primordial endpoints, but to restrict them only to GEX_EP_CAPABILITY_RMA.
The conduit-specific portion of
gex_EP_PublishBoundSegment()
has been updated to maintain a table of remote RKeys of the segments bound to non-primordial endpoints.The logic for determining which RKey is used to inject communication has been updated by replacing a function argument
rem_auxseg
withrem_epidx
. Now instead of passing a boolean to indicate if the remote address is in the aux-segment, the remote endpoint index is passed, with -1 used to indicate the aux-seg.testtmpair: initial multi-EP support
This commit adds initial support for exercising multi-EP support via
testtmpair
.Beyond removing an
#if 0
from existing code for this purpose, non-trivial changes have been made to allow for the incremental introduction of capabilities. In particular "open box" testing of a conduit's CAPABILITY support for non-primordial endpoints is included.Additionally, this eliminates special-casing of EVERYTHING segment mode in this test.
Document GASNETI_NBRHD_LOCAL* status
This commit documents the TM-pair and multi-EP awareness properties of the
GASNETI_NBRHD_LOCAL{,_ADDR,_ADDR_OR_NULL}
macros, and the lack of both for theGASNETI_NBRHD_JOBRANK_LOCAL*
versions.Additionally, the macro
GASNETI_NBRHD_JOBRANK_LOCAL_ADDR
is annotated as[DEPRECATED]
(since it is easily misused) andGASNETI_NBRHD_JOBRANK_LOCAL_ADDR_OR_NULL
is removed since is is both dangerous an unused.