diff --git a/src/components/tl/ucp/tl_ucp.c b/src/components/tl/ucp/tl_ucp.c index 038c3ba4ca..051f213f2e 100644 --- a/src/components/tl/ucp/tl_ucp.c +++ b/src/components/tl/ucp/tl_ucp.c @@ -194,6 +194,11 @@ ucc_config_field_t ucc_tl_ucp_lib_config_table[] = { ucc_offsetof(ucc_tl_ucp_lib_config_t, use_dynamic_segments), UCC_CONFIG_TYPE_BOOL}, + {"USE_XGVMI", "n", + "Use XGVMI for onesided collectives", + ucc_offsetof(ucc_tl_ucp_lib_config_t, use_xgvmi), + UCC_CONFIG_TYPE_BOOL}, + {NULL}}; static ucs_config_field_t ucc_tl_ucp_context_config_table[] = { diff --git a/src/components/tl/ucp/tl_ucp.h b/src/components/tl/ucp/tl_ucp.h index 67b3d73d4d..e8edef393f 100644 --- a/src/components/tl/ucp/tl_ucp.h +++ b/src/components/tl/ucp/tl_ucp.h @@ -75,6 +75,7 @@ typedef struct ucc_tl_ucp_lib_config { ucc_ternary_auto_value_t use_topo; int use_reordering; int use_dynamic_segments; + int use_xgvmi; } ucc_tl_ucp_lib_config_t; typedef struct ucc_tl_ucp_context_config { diff --git a/src/components/tl/ucp/tl_ucp_context.c b/src/components/tl/ucp/tl_ucp_context.c index c6ec78cf4e..4516814bcc 100644 --- a/src/components/tl/ucp/tl_ucp_context.c +++ b/src/components/tl/ucp/tl_ucp_context.c @@ -164,10 +164,12 @@ UCC_CLASS_INIT_FUNC(ucc_tl_ucp_context_t, ucp_params.field_mask = UCP_PARAM_FIELD_FEATURES | UCP_PARAM_FIELD_TAG_SENDER_MASK | UCP_PARAM_FIELD_NAME; ucp_params.features = UCP_FEATURE_TAG | UCP_FEATURE_AM; - if ((params->params.mask & UCC_CONTEXT_PARAM_FIELD_MEM_PARAMS) || - lib->cfg.use_dynamic_segments) { - ucp_params.features |= UCP_FEATURE_RMA | UCP_FEATURE_AMO64 | - UCP_FEATURE_EXPORTED_MEMH; + if (((params->params.mask & UCC_CONTEXT_PARAM_FIELD_MEM_PARAMS) || + lib->cfg.use_dynamic_segments)) { + ucp_params.features |= UCP_FEATURE_RMA | UCP_FEATURE_AMO64; + } + if (lib->cfg.use_xgvmi) { + ucp_params.features |= UCP_FEATURE_EXPORTED_MEMH; } ucp_params.tag_sender_mask = UCC_TL_UCP_TAG_SENDER_MASK; ucp_params.name = "UCC_UCP_CONTEXT";