From 22c87435572e99811e8b676c2f70fbf1d1df80f9 Mon Sep 17 00:00:00 2001 From: Howard Pritchard Date: Wed, 29 Jun 2016 13:17:19 -0600 Subject: [PATCH] mtl/ofi: add some more mca parameters allow for toggling of both control/data progress models. allow for using FI_AV_TABLE or FI_AV_MAP for av type. Signed-off-by: Howard Pritchard --- ompi/mca/mtl/ofi/mtl_ofi_component.c | 108 ++++++++++++++++++++++++++- 1 file changed, 105 insertions(+), 3 deletions(-) diff --git a/ompi/mca/mtl/ofi/mtl_ofi_component.c b/ompi/mca/mtl/ofi/mtl_ofi_component.c index 7cbe60bc63..6227171350 100644 --- a/ompi/mca/mtl/ofi/mtl_ofi_component.c +++ b/ompi/mca/mtl/ofi/mtl_ofi_component.c @@ -3,7 +3,7 @@ * Copyright (c) 2013-2016 Intel, Inc. All rights reserved * * Copyright (c) 2014-2015 Cisco Systems, Inc. All rights reserved. - * Copyright (c) 2015 Los Alamos National Security, LLC. All rights + * Copyright (c) 2015-2016 Los Alamos National Security, LLC. All rights * reserved. * $COPYRIGHT$ * @@ -27,6 +27,43 @@ ompi_mtl_ofi_component_init(bool enable_progress_threads, static int param_priority; static char *prov_include; static char *prov_exclude; +static int control_progress; +static int data_progress; +static int av_type; + +/* + * Enumerators + */ + +enum { + MTL_OFI_PROG_AUTO=1, + MTL_OFI_PROG_MANUAL, + MTL_OFI_PROG_UNKNOWN, +}; + +mca_base_var_enum_value_t control_prog_type[] = { + {MTL_OFI_PROG_AUTO, "auto"}, + {MTL_OFI_PROG_MANUAL, "manual"}, + {0, NULL} +}; + +mca_base_var_enum_value_t data_prog_type[] = { + {MTL_OFI_PROG_AUTO, "auto"}, + {MTL_OFI_PROG_MANUAL, "manual"}, + {0, NULL} +}; + +enum { + MTL_OFI_AV_MAP=1, + MTL_OFI_AV_TABLE, + MTL_OFI_AV_UNKNOWN, +}; + +mca_base_var_enum_value_t av_table_type[] = { + {MTL_OFI_AV_MAP, "map"}, + {MTL_OFI_AV_TABLE, "table"}, + {0, NULL} +}; mca_mtl_ofi_component_t mca_mtl_ofi_component = { { @@ -56,6 +93,9 @@ mca_mtl_ofi_component_t mca_mtl_ofi_component = { static int ompi_mtl_ofi_component_register(void) { + int ret; + mca_base_var_enum_t *new_enum = NULL; + param_priority = 25; /* for now give a lower priority than the psm mtl */ mca_base_component_var_register(&mca_mtl_ofi_component.super.mtl_version, "priority", "Priority of the OFI MTL component", @@ -82,6 +122,51 @@ ompi_mtl_ofi_component_register(void) MCA_BASE_VAR_SCOPE_READONLY, &prov_exclude); + ret = mca_base_var_enum_create ("control_prog_type", control_prog_type, &new_enum); + if (OPAL_SUCCESS != ret) { + return ret; + } + + control_progress = MTL_OFI_PROG_MANUAL; + mca_base_component_var_register (&mca_mtl_ofi_component.super.mtl_version, + "control_progress", + "Specify control progress model (default: manual). Set to auto for auto progress.", + MCA_BASE_VAR_TYPE_INT, new_enum, 0, 0, + OPAL_INFO_LVL_3, + MCA_BASE_VAR_SCOPE_READONLY, + &control_progress); + OBJ_RELEASE(new_enum); + + ret = mca_base_var_enum_create ("data_prog_type", data_prog_type, &new_enum); + if (OPAL_SUCCESS != ret) { + return ret; + } + + data_progress = MTL_OFI_PROG_AUTO; + mca_base_component_var_register(&mca_mtl_ofi_component.super.mtl_version, + "data_progress", + "Specify data progress model (default: auto). Set to manual for manual progress.", + MCA_BASE_VAR_TYPE_INT, new_enum, 0, 0, + OPAL_INFO_LVL_3, + MCA_BASE_VAR_SCOPE_READONLY, + &data_progress); + OBJ_RELEASE(new_enum); + + ret = mca_base_var_enum_create ("av_type", av_table_type, &new_enum); + if (OPAL_SUCCESS != ret) { + return ret; + } + + av_type = MTL_OFI_AV_MAP; + mca_base_component_var_register (&mca_mtl_ofi_component.super.mtl_version, + "av", + "Specify AV type to use (default: map). Set to table for FI_AV_TABLE AV type.", + MCA_BASE_VAR_TYPE_INT, new_enum, 0, 0, + OPAL_INFO_LVL_3, + MCA_BASE_VAR_SCOPE_READONLY, + &av_type); + OBJ_RELEASE(new_enum); + return OMPI_SUCCESS; } @@ -239,9 +324,26 @@ ompi_mtl_ofi_component_init(bool enable_progress_threads, hints->rx_attr->msg_order = FI_ORDER_SAS; hints->domain_attr->threading = FI_THREAD_UNSPEC; - hints->domain_attr->control_progress = FI_PROGRESS_MANUAL; + + if (MTL_OFI_PROG_AUTO == control_progress) { + hints->domain_attr->control_progress = FI_PROGRESS_AUTO; + } else { + hints->domain_attr->control_progress = FI_PROGRESS_MANUAL; + } + + if (MTL_OFI_PROG_MANUAL == data_progress) { + hints->domain_attr->data_progress = FI_PROGRESS_MANUAL; + } else { + hints->domain_attr->data_progress = FI_PROGRESS_AUTO; + } + + if (MTL_OFI_AV_TABLE == av_type) { + hints->domain_attr->av_type = FI_AV_TABLE; + } else { + hints->domain_attr->av_type = FI_AV_MAP; + } + hints->domain_attr->resource_mgmt = FI_RM_ENABLED; - hints->domain_attr->av_type = FI_AV_MAP; /** * FI_VERSION provides binary backward and forward compatibility support