Skip to content

Commit

Permalink
Merge pull request #8313 from jjhursey/prot-enum
Browse files Browse the repository at this point in the history
Update hook component to use enum MCA parameter
  • Loading branch information
jjhursey authored Jan 11, 2021
2 parents 8115bd2 + ed0697f commit 8c89e3c
Showing 1 changed file with 52 additions and 37 deletions.
89 changes: 52 additions & 37 deletions ompi/mca/hook/comm_method/hook_comm_method_component.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,29 @@ const ompi_hook_base_component_1_0_0_t mca_hook_comm_method_component = {
.hookm_mpi_finalize_bottom = NULL,
};

enum mca_hook_comm_method_mode_flags_t {
/* Display on MPI_INIT */
OMPI_HOOK_COMM_METHOD_INIT = 0x01,
/* Display on MPI_FINALIZE */
OMPI_HOOK_COMM_METHOD_FINALIZE = 0x02,
};

int mca_hook_comm_method_verbose = 0;
int mca_hook_comm_method_output = -1;
bool mca_hook_comm_method_enable_mpi_init = false;
bool mca_hook_comm_method_enable_mpi_finalize = false;
uint32_t mca_hook_comm_method_enabled_flags = 0x00;
int mca_hook_comm_method_max = 12;
int mca_hook_comm_method_brief = 0;
char *mca_hook_comm_method_fakefile = NULL;

static mca_base_var_enum_value_flag_t mca_hook_comm_method_modes[] = {
{.flag = OMPI_HOOK_COMM_METHOD_INIT, .string = "mpi_init"},
{.flag = OMPI_HOOK_COMM_METHOD_FINALIZE, .string = "mpi_finalize"},
{0, NULL, 0}
};


static int ompi_hook_comm_method_component_open(void)
{
// Nothing to do
Expand All @@ -88,6 +103,8 @@ static int ompi_hook_comm_method_component_close(void)

static int ompi_hook_comm_method_component_register(void)
{
int ret;
mca_base_var_enum_flag_t *mca_hook_comm_method_flags = NULL;

/*
* Component verbosity level
Expand All @@ -111,63 +128,61 @@ static int ompi_hook_comm_method_component_register(void)
opal_output_set_verbosity(mca_hook_comm_method_output, mca_hook_comm_method_verbose);

/*
* If the component is active for mpi_init / mpi_finalize
* If the component is active for mpi_init / mpi_finalize via the MCA
* option: ompi_display_comm
* We created both a component level version of this parameter: hook_comm_method_display
* along with a OMPI project level version (ompi_display_comm) for ease of
* use to enable this feature. The user can fine tune the behavior of this
* feature using the additional component level MCA options.
*/
mca_hook_comm_method_enable_mpi_init = false;
(void) mca_base_component_var_register(&mca_hook_comm_method_component.hookm_version, "enable_mpi_init",
"Enable comm_method behavior on mpi_init",
MCA_BASE_VAR_TYPE_BOOL, NULL,
0, 0,
OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY,
&mca_hook_comm_method_enable_mpi_init);

mca_hook_comm_method_enable_mpi_finalize = false;
(void) mca_base_component_var_register(&mca_hook_comm_method_component.hookm_version, "enable_mpi_finalize",
"Enable comm_method behavior on mpi_finalize",
MCA_BASE_VAR_TYPE_BOOL, NULL,
0, 0,
OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY,
&mca_hook_comm_method_enable_mpi_finalize);

// User can set the comm_method mca variable too
int hook_comm_method = -1;
(void) mca_base_var_register("ompi", NULL, NULL, "comm_method",
"Enable comm_method behavior (1) mpi_init or (2) mpi_finalize",
MCA_BASE_VAR_TYPE_INT, NULL,
0, 0,
OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY,
&hook_comm_method);

if( 1 == hook_comm_method ) {
mca_hook_comm_method_enable_mpi_init = true;
mca_base_var_enum_create_flag("ompi_comm_method", mca_hook_comm_method_modes, &mca_hook_comm_method_flags);

ret = mca_base_component_var_register(&mca_hook_comm_method_component.hookm_version, "display",
"Enable the communication protocol report: when MPI_INIT is invoked (using the 'mpi_init' value) and/or when MPI_FINALIZE is invoked (using the 'mpi_finalize' value).",
MCA_BASE_VAR_TYPE_UNSIGNED_INT,
&mca_hook_comm_method_flags->super,
0, 0,
OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY,
&mca_hook_comm_method_enabled_flags);

(void) mca_base_var_register_synonym(ret, "ompi", "ompi", NULL, "display_comm", MCA_BASE_VAR_SYN_FLAG_INTERNAL);

OBJ_RELEASE(mca_hook_comm_method_flags);
if(OPAL_ERR_VALUE_OUT_OF_BOUNDS == ret) {
opal_output(0, "hook:comm_method: Warning invalid comm_method specified.");
}
else if( 2 == hook_comm_method ) {
mca_hook_comm_method_enable_mpi_finalize = true;
else {
if( mca_hook_comm_method_enabled_flags & OMPI_HOOK_COMM_METHOD_INIT ) {
mca_hook_comm_method_enable_mpi_init = true;
}
if( mca_hook_comm_method_enabled_flags & OMPI_HOOK_COMM_METHOD_FINALIZE ) {
mca_hook_comm_method_enable_mpi_finalize = true;
}
}

// comm_method_max
(void) mca_base_var_register("ompi", NULL, NULL, "comm_method_max",
// hook_comm_method_max
(void) mca_base_component_var_register(&mca_hook_comm_method_component.hookm_version, "max",
"Number of hosts for which to print unabbreviated 2d table of comm methods.",
MCA_BASE_VAR_TYPE_INT, NULL,
0, 0,
OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY,
&mca_hook_comm_method_max);
// comm_method_brief
(void) mca_base_var_register("ompi", NULL, NULL, "comm_method_brief",
// hook_comm_method_brief
(void) mca_base_component_var_register(&mca_hook_comm_method_component.hookm_version, "brief",
"Only print the comm method summary, skip the 2d table.",
MCA_BASE_VAR_TYPE_INT, NULL,
0, 0,
OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY,
&mca_hook_comm_method_brief);

// comm_method_fakefile is just for debugging, allows complete override of all the
// hook_comm_method_fakefile is just for debugging, allows complete override of all the
// comm method in the table
(void) mca_base_var_register("ompi", NULL, NULL, "comm_method_fakefile",
(void) mca_base_component_var_register(&mca_hook_comm_method_component.hookm_version, "fakefile",
"For debugging only: read comm methods from a file",
MCA_BASE_VAR_TYPE_STRING, NULL,
0, 0,
Expand Down

0 comments on commit 8c89e3c

Please sign in to comment.