@@ -66,14 +66,33 @@ const ompi_hook_base_component_1_0_0_t mca_hook_comm_method_component = {
66
66
.hookm_mpi_finalize_bottom = NULL ,
67
67
};
68
68
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
+
69
78
int mca_hook_comm_method_verbose = 0 ;
70
79
int mca_hook_comm_method_output = -1 ;
71
80
bool mca_hook_comm_method_enable_mpi_init = false;
72
81
bool mca_hook_comm_method_enable_mpi_finalize = false;
82
+ uint32_t mca_hook_comm_method_enabled_flags = OMPI_HOOK_COMM_METHOD_NONE ;
73
83
int mca_hook_comm_method_max = 12 ;
74
84
int mca_hook_comm_method_brief = 0 ;
75
85
char * mca_hook_comm_method_fakefile = NULL ;
76
86
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
+
77
96
static int ompi_hook_comm_method_component_open (void )
78
97
{
79
98
// Nothing to do
@@ -88,6 +107,8 @@ static int ompi_hook_comm_method_component_close(void)
88
107
89
108
static int ompi_hook_comm_method_component_register (void )
90
109
{
110
+ int ret ;
111
+ mca_base_var_enum_flag_t * mca_hook_comm_method_flags = NULL ;
91
112
92
113
/*
93
114
* Component verbosity level
@@ -111,63 +132,53 @@ static int ompi_hook_comm_method_component_register(void)
111
132
opal_output_set_verbosity (mca_hook_comm_method_output , mca_hook_comm_method_verbose );
112
133
113
134
/*
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'
115
136
*/
116
137
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
-
125
138
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." );
146
152
}
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
+ }
149
160
}
150
161
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 " ,
153
164
"Number of hosts for which to print unabbreviated 2d table of comm methods." ,
154
165
MCA_BASE_VAR_TYPE_INT , NULL ,
155
166
0 , 0 ,
156
167
OPAL_INFO_LVL_3 ,
157
168
MCA_BASE_VAR_SCOPE_READONLY ,
158
169
& 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 " ,
161
172
"Only print the comm method summary, skip the 2d table." ,
162
173
MCA_BASE_VAR_TYPE_INT , NULL ,
163
174
0 , 0 ,
164
175
OPAL_INFO_LVL_3 ,
165
176
MCA_BASE_VAR_SCOPE_READONLY ,
166
177
& mca_hook_comm_method_brief );
167
178
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
169
180
// 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 " ,
171
182
"For debugging only: read comm methods from a file" ,
172
183
MCA_BASE_VAR_TYPE_STRING , NULL ,
173
184
0 , 0 ,
0 commit comments