Skip to content

Commit

Permalink
Update hook component to use enum MCA parameter
Browse files Browse the repository at this point in the history
 * `--mca ompi_comm_method VALUE` where `VALUE` is one or more of:
   - `mpi_init` : Display during `MPI_Init`
   - `mpi_finalize` : Display during `MPI_Finalize`
 * hook/comm_method: Use enum flags to select protocols

Signed-off-by: Joshua Hursey <[email protected]>
  • Loading branch information
jjhursey committed Jan 7, 2021
1 parent d489030 commit 315d79d
Showing 1 changed file with 48 additions and 37 deletions.
85 changes: 48 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,33 @@ 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 {
/* Default: Display nothing */
OMPI_HOOK_COMM_METHOD_NONE = 0x01,
/* Display on MPI_INIT */
OMPI_HOOK_COMM_METHOD_INIT = 0x02,
/* Display on MPI_FINALIZE */
OMPI_HOOK_COMM_METHOD_FINALIZE = 0x04,
};

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 = OMPI_HOOK_COMM_METHOD_NONE;
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_NONE, .string = "none",
.conflicting_flag = OMPI_HOOK_COMM_METHOD_INIT | OMPI_HOOK_COMM_METHOD_FINALIZE},
{.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 +107,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 +132,53 @@ 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 'ompi_comm_method'
*/
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_var_register("ompi", "ompi", NULL, "comm_method",
"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);
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 315d79d

Please sign in to comment.