@@ -66,14 +66,33 @@ const ompi_hook_base_component_1_0_0_t mca_hook_comm_method_component = {
6666 .hookm_mpi_finalize_bottom = NULL ,
6767};
6868
69+ enum mca_hook_comm_method_mode_flags_t {
70+ /* Default: Display nothing */
71+ OMPI_HOOK_COMM_METHOD_NONE = 0x01 ,
72+ /* Display on MPI_INIT */
73+ OMPI_HOOK_COMM_METHOD_INIT = 0x02 ,
74+ /* Display on MPI_FINALIZE */
75+ OMPI_HOOK_COMM_METHOD_FINALIZE = 0x04 ,
76+ };
77+
6978int mca_hook_comm_method_verbose = 0 ;
7079int mca_hook_comm_method_output = -1 ;
7180bool mca_hook_comm_method_enable_mpi_init = false;
7281bool mca_hook_comm_method_enable_mpi_finalize = false;
82+ uint32_t mca_hook_comm_method_enabled_flags = OMPI_HOOK_COMM_METHOD_NONE ;
7383int mca_hook_comm_method_max = 12 ;
7484int mca_hook_comm_method_brief = 0 ;
7585char * mca_hook_comm_method_fakefile = NULL ;
7686
87+ static mca_base_var_enum_value_flag_t mca_hook_comm_method_modes [] = {
88+ {.flag = OMPI_HOOK_COMM_METHOD_NONE , .string = "none" ,
89+ .conflicting_flag = OMPI_HOOK_COMM_METHOD_INIT | OMPI_HOOK_COMM_METHOD_FINALIZE },
90+ {.flag = OMPI_HOOK_COMM_METHOD_INIT , .string = "mpi_init" },
91+ {.flag = OMPI_HOOK_COMM_METHOD_FINALIZE , .string = "mpi_finalize" },
92+ {0 , NULL , 0 }
93+ };
94+
95+
7796static int ompi_hook_comm_method_component_open (void )
7897{
7998 // Nothing to do
@@ -88,6 +107,8 @@ static int ompi_hook_comm_method_component_close(void)
88107
89108static int ompi_hook_comm_method_component_register (void )
90109{
110+ int ret ;
111+ mca_base_var_enum_flag_t * mca_hook_comm_method_flags = NULL ;
91112
92113 /*
93114 * Component verbosity level
@@ -111,63 +132,53 @@ static int ompi_hook_comm_method_component_register(void)
111132 opal_output_set_verbosity (mca_hook_comm_method_output , mca_hook_comm_method_verbose );
112133
113134 /*
114- * If the component is active for mpi_init / mpi_finalize
135+ * If the component is active for mpi_init / mpi_finalize via 'ompi_comm_method'
115136 */
116137 mca_hook_comm_method_enable_mpi_init = false;
117- (void ) mca_base_component_var_register (& mca_hook_comm_method_component .hookm_version , "enable_mpi_init" ,
118- "Enable comm_method behavior on mpi_init" ,
119- MCA_BASE_VAR_TYPE_BOOL , NULL ,
120- 0 , 0 ,
121- OPAL_INFO_LVL_3 ,
122- MCA_BASE_VAR_SCOPE_READONLY ,
123- & mca_hook_comm_method_enable_mpi_init );
124-
125138 mca_hook_comm_method_enable_mpi_finalize = false;
126- (void ) mca_base_component_var_register (& mca_hook_comm_method_component .hookm_version , "enable_mpi_finalize" ,
127- "Enable comm_method behavior on mpi_finalize" ,
128- MCA_BASE_VAR_TYPE_BOOL , NULL ,
129- 0 , 0 ,
130- OPAL_INFO_LVL_3 ,
131- MCA_BASE_VAR_SCOPE_READONLY ,
132- & mca_hook_comm_method_enable_mpi_finalize );
133-
134- // User can set the comm_method mca variable too
135- int hook_comm_method = -1 ;
136- (void ) mca_base_var_register ("ompi" , NULL , NULL , "comm_method" ,
137- "Enable comm_method behavior (1) mpi_init or (2) mpi_finalize" ,
138- MCA_BASE_VAR_TYPE_INT , NULL ,
139- 0 , 0 ,
140- OPAL_INFO_LVL_3 ,
141- MCA_BASE_VAR_SCOPE_READONLY ,
142- & hook_comm_method );
143-
144- if ( 1 == hook_comm_method ) {
145- mca_hook_comm_method_enable_mpi_init = true;
139+ mca_base_var_enum_create_flag ("ompi_comm_method" , mca_hook_comm_method_modes , & mca_hook_comm_method_flags );
140+
141+ ret = mca_base_var_register ("ompi" , "ompi" , NULL , "comm_method" ,
142+ "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)." ,
143+ MCA_BASE_VAR_TYPE_UNSIGNED_INT ,
144+ & mca_hook_comm_method_flags -> super ,
145+ 0 , 0 ,
146+ OPAL_INFO_LVL_3 ,
147+ MCA_BASE_VAR_SCOPE_READONLY ,
148+ & mca_hook_comm_method_enabled_flags );
149+ OBJ_RELEASE (mca_hook_comm_method_flags );
150+ if (OPAL_ERR_VALUE_OUT_OF_BOUNDS == ret ) {
151+ opal_output (0 , "hook:comm_method: Warning invalid comm_method specified." );
146152 }
147- else if ( 2 == hook_comm_method ) {
148- mca_hook_comm_method_enable_mpi_finalize = true;
153+ else {
154+ if ( mca_hook_comm_method_enabled_flags & OMPI_HOOK_COMM_METHOD_INIT ) {
155+ mca_hook_comm_method_enable_mpi_init = true;
156+ }
157+ if ( mca_hook_comm_method_enabled_flags & OMPI_HOOK_COMM_METHOD_FINALIZE ) {
158+ mca_hook_comm_method_enable_mpi_finalize = true;
159+ }
149160 }
150161
151- // comm_method_max
152- (void ) mca_base_var_register ( "ompi" , NULL , NULL , "comm_method_max " ,
162+ // hook_comm_method_max
163+ (void ) mca_base_component_var_register ( & mca_hook_comm_method_component . hookm_version , "max " ,
153164 "Number of hosts for which to print unabbreviated 2d table of comm methods." ,
154165 MCA_BASE_VAR_TYPE_INT , NULL ,
155166 0 , 0 ,
156167 OPAL_INFO_LVL_3 ,
157168 MCA_BASE_VAR_SCOPE_READONLY ,
158169 & mca_hook_comm_method_max );
159- // comm_method_brief
160- (void ) mca_base_var_register ( "ompi" , NULL , NULL , "comm_method_brief " ,
170+ // hook_comm_method_brief
171+ (void ) mca_base_component_var_register ( & mca_hook_comm_method_component . hookm_version , "brief " ,
161172 "Only print the comm method summary, skip the 2d table." ,
162173 MCA_BASE_VAR_TYPE_INT , NULL ,
163174 0 , 0 ,
164175 OPAL_INFO_LVL_3 ,
165176 MCA_BASE_VAR_SCOPE_READONLY ,
166177 & mca_hook_comm_method_brief );
167178
168- // comm_method_fakefile is just for debugging, allows complete override of all the
179+ // hook_comm_method_fakefile is just for debugging, allows complete override of all the
169180 // comm method in the table
170- (void ) mca_base_var_register ( "ompi" , NULL , NULL , "comm_method_fakefile " ,
181+ (void ) mca_base_component_var_register ( & mca_hook_comm_method_component . hookm_version , "fakefile " ,
171182 "For debugging only: read comm methods from a file" ,
172183 MCA_BASE_VAR_TYPE_STRING , NULL ,
173184 0 , 0 ,
0 commit comments