@@ -137,18 +137,57 @@ def generate_comm_convert_fn_intern_to_abi(self):
137137 def generate_info_convert_fn (self ):
138138 self .generic_convert (ConvertFuncs .INFO , 'info' , 'MPI_Info' , consts .RESERVED_INFOS )
139139
140+ def generate_info_convert_fn_intern_to_abi (self ):
141+ self .generic_convert_reverse (ConvertOMPIToStandard .INFO , 'info' , 'MPI_Info' , consts .RESERVED_INFOS )
142+
143+ def generate_file_convert_fn (self ):
144+ self .generic_convert (ConvertFuncs .FILE , 'file' , 'MPI_File' , consts .RESERVED_FILES )
145+
140146 def generate_file_convert_fn_intern_to_abi (self ):
141- self .generic_convert_reverse (ConvertFuncs .FILE , 'file' , 'MPI_File' , consts .RESERVED_FILES )
147+ self .generic_convert_reverse (ConvertOMPIToStandard .FILE , 'file' , 'MPI_File' , consts .RESERVED_FILES )
142148
143149 def generate_datatype_convert_fn (self ):
144150 self .generic_convert (ConvertFuncs .DATATYPE , 'datatype' , 'MPI_Datatype' , consts .PREDEFINED_DATATYPES )
145151
152+ def generate_datatype_convert_fn_intern_to_abi (self ):
153+ self .generic_convert_reverse (ConvertOMPIToStandard .DATATYPE , 'datatype' , 'MPI_Datatype' , consts .PREDEFINED_DATATYPES )
154+
155+ def generate_errhandler_convert_fn (self ):
156+ self .generic_convert (ConvertFuncs .ERRHANDLER , 'errorhandler' , 'MPI_Errhandler' , consts .RESERVED_ERRHANDLERS )
157+
158+ def generate_errhandler_convert_fn_intern_to_abi (self ):
159+ self .generic_convert_reverse (ConvertOMPIToStandard .ERRHANDLER , 'errorhandler' , 'MPI_Errhandler' , consts .RESERVED_ERRHANDLERS )
160+
161+ def generate_group_convert_fn (self ):
162+ self .generic_convert (ConvertFuncs .GROUP , 'group' , 'MPI_Group' , consts .RESERVED_GROUPS )
163+
164+ def generate_group_convert_fn_intern_to_abi (self ):
165+ self .generic_convert_reverse (ConvertOMPIToStandard .GROUP , 'group' , 'MPI_Group' , consts .RESERVED_GROUPS )
166+
167+ def generate_message_convert_fn (self ):
168+ self .generic_convert (ConvertFuncs .MESSAGE , 'message' , 'MPI_Message' , consts .RESERVED_MESSAGES )
169+
170+ def generate_message_convert_fn_intern_to_abi (self ):
171+ self .generic_convert_reverse (ConvertOMPIToStandard .MESSAGE , 'message' , 'MPI_Message' , consts .RESERVED_MESSAGES )
172+
146173 def generate_op_convert_fn (self ):
147174 self .generic_convert (ConvertFuncs .OP , 'op' , 'MPI_Op' , consts .COLLECTIVE_OPERATIONS )
148175
176+ def generate_op_convert_fn_intern_to_abi (self ):
177+ self .generic_convert_reverse (ConvertOMPIToStandard .OP , 'op' , 'MPI_Op' , consts .RESERVED_OPS )
178+
179+ def generate_session_convert_fn (self ):
180+ self .generic_convert (ConvertFuncs .SESSION , 'session' , 'MPI_Session' , consts .RESERVED_SESSIONS )
181+
182+ def generate_session_convert_fn_intern_to_abi (self ):
183+ self .generic_convert_reverse (ConvertOMPIToStandard .SESSION , 'session' , 'MPI_Session' , consts .RESERVED_SESSIONS )
184+
149185 def generate_win_convert_fn (self ):
150186 self .generic_convert (ConvertFuncs .WIN , 'win' , 'MPI_Win' , consts .RESERVED_WINDOWS )
151187
188+ def generate_win_convert_fn_intern_to_abi (self ):
189+ self .generic_convert_reverse (ConvertOMPIToStandard .WIN , 'win' , 'MPI_Win' , consts .RESERVED_WINDOWS )
190+
152191 def generate_pointer_convert_fn (self , type_ , fn_name , constants ):
153192 abi_type = self .mangle_name (type_ )
154193 self .dump (f'{ consts .INLINE_ATTRS } void { fn_name } ({ abi_type } *ptr)' )
@@ -168,20 +207,34 @@ def generate_pointer_convert_fn(self, type_, fn_name, constants):
168207 def generate_request_convert_fn (self ):
169208 self .generate_pointer_convert_fn ('MPI_Request' , ConvertFuncs .REQUEST , consts .RESERVED_REQUESTS )
170209
171- def generate_file_convert_fn (self ):
172- self .generate_pointer_convert_fn ('MPI_File' , ConvertFuncs .FILE , consts .RESERVED_FILES )
210+ def generate_request_convert_fn_intern_to_abi (self ):
211+ self .generic_convert_reverse (ConvertOMPIToStandard .REQUEST , 'request' , 'MPI_Request' , consts .RESERVED_REQUESTS )
212+
213+ # def generate_file_convert_fn(self):
214+ # self.generate_pointer_convert_fn('MPI_File', ConvertFuncs.FILE, consts.RESERVED_FILES)
173215
174216 def generate_status_convert_fn (self ):
175217 type_ = 'MPI_Status'
176218 abi_type = self .mangle_name (type_ )
177- self .dump (f'{ consts .INLINE_ATTRS } void { ConvertFuncs .STATUS } ({ abi_type } *out, { type_ } *inp)' )
219+ self .dump (f'{ consts .INLINE_ATTRS } void { ConvertFuncs .STATUS } ({ type_ } *out, { abi_type } *inp)' )
178220 self .dump ('{' )
179221 self .dump (' out->MPI_SOURCE = inp->MPI_SOURCE;' )
180222 self .dump (' out->MPI_TAG = inp->MPI_TAG;' )
181223 self .dump (f' out->MPI_ERROR = { ConvertFuncs .ERROR_CLASS } (inp->MPI_ERROR);' )
182224 # Ignoring the private fields for now
183225 self .dump ('}' )
184226
227+ def generate_status_convert_fn_intern_to_abi (self ):
228+ type_ = 'MPI_Status'
229+ abi_type = self .mangle_name (type_ )
230+ self .dump (f'{ consts .INLINE_ATTRS } void { ConvertOMPIToStandard .STATUS } ({ abi_type } *out, { type_ } *inp)' )
231+ self .dump ('{' )
232+ self .dump (' out->MPI_SOURCE = inp->MPI_SOURCE;' )
233+ self .dump (' out->MPI_TAG = inp->MPI_TAG;' )
234+ # self.dump(f' out->MPI_ERROR = {ConvertOMPIToStandard.ERROR_CLASS}(inp->MPI_ERROR);')
235+ # Ignoring the private fields for now
236+ self .dump ('}' )
237+
185238 def define (self , type_ , name , value ):
186239 self .dump (f'#define { name } OMPI_CAST_CONSTANT({ type_ } , { value } )' )
187240
@@ -217,12 +270,17 @@ def dump_header(self):
217270 self .dump ()
218271
219272 self .define_all ('MPI_Datatype' , consts .PREDEFINED_DATATYPES )
220- self .define_all ('MPI_Op' , COLLECTIVE_OPERATIONS )
273+ self .define_all ('MPI_Op' , consts .COLLECTIVE_OPERATIONS )
274+ self .define_all ('MPI_Op' , consts .RESERVED_OPS )
221275 self .define_all ('MPI_Comm' , consts .RESERVED_COMMUNICATORS )
276+ self .define_all ('MPI_Errhandler' , consts .RESERVED_ERRHANDLERS )
277+ self .define_all ('MPI_Group' , consts .RESERVED_GROUPS )
222278 self .define_all ('MPI_Request' , consts .RESERVED_REQUESTS )
279+ self .define_all ('MPI_Session' , consts .RESERVED_SESSIONS )
223280 self .define_all ('MPI_Win' , consts .RESERVED_WINDOWS )
224281 self .define_all ('MPI_Info' , consts .RESERVED_INFOS )
225282 self .define_all ('MPI_File' , consts .RESERVED_FILES )
283+ self .define_all ('MPI_Message' , consts .RESERVED_MESSAGES )
226284
227285 for name , value in consts .VARIOUS_CONSTANTS .items ():
228286 self .dump (f'#define { self .mangle_name (name )} { value } ' )
@@ -255,9 +313,13 @@ def dump_header(self):
255313};""" )
256314 self .dump (f'typedef struct MPI_Status_ABI { self .mangle_name ("MPI_Status" )} ;' )
257315 self .dump ()
316+ # user functions
317+ self .dump ('typedef int (MPI_Copy_function)(MPI_Comm_ABI_INTERNAL, int, void *, void *, void *, int *);' )
318+ self .dump ('typedef int (MPI_Delete_function)(MPI_Comm_ABI_INTERNAL, int, void *, void *);' )
258319 # Function signatures
259320 for sig in self .signatures :
260321 self .dump (f'{ sig } ;' )
322+ # print("Working on signature " + str(sig))
261323 self .dump ('int MPI_Abi_details(int *buflen, char *details, MPI_Info *info);' )
262324 self .dump ('int MPI_Abi_supported(int *flag);' )
263325 self .dump ('int MPI_Abi_version(int *abi_major, int *abi_minor);' )
@@ -267,12 +329,27 @@ def dump_header(self):
267329 self .generate_comm_convert_fn ()
268330 self .generate_comm_convert_fn_intern_to_abi ()
269331 self .generate_info_convert_fn ()
332+ self .generate_info_convert_fn_intern_to_abi ()
270333 self .generate_file_convert_fn ()
334+ self .generate_file_convert_fn_intern_to_abi ()
335+ self .generate_group_convert_fn ()
336+ self .generate_group_convert_fn_intern_to_abi ()
271337 self .generate_datatype_convert_fn ()
338+ self .generate_datatype_convert_fn_intern_to_abi ()
339+ self .generate_errhandler_convert_fn ()
340+ self .generate_errhandler_convert_fn_intern_to_abi ()
341+ self .generate_message_convert_fn ()
342+ self .generate_message_convert_fn_intern_to_abi ()
272343 self .generate_op_convert_fn ()
344+ self .generate_op_convert_fn_intern_to_abi ()
345+ self .generate_session_convert_fn ()
346+ self .generate_session_convert_fn_intern_to_abi ()
273347 self .generate_win_convert_fn ()
348+ self .generate_win_convert_fn_intern_to_abi ()
274349 self .generate_request_convert_fn ()
350+ self .generate_request_convert_fn_intern_to_abi ()
275351 self .generate_status_convert_fn ()
352+ self .generate_status_convert_fn_intern_to_abi ()
276353
277354 self .dump ("""
278355#if defined(c_plusplus) || defined(__cplusplus)
@@ -292,7 +369,7 @@ def print_profiling_header(fn_name, out):
292369 out .dump ('#endif' )
293370
294371
295- def print_cdefs_for_bigcount (fn_name , out , enable_count = False ):
372+ def print_cdefs_for_bigcount (out , enable_count = False ):
296373 if enable_count :
297374 out .dump ('#undef OMPI_BIGCOUNT_SRC' )
298375 out .dump ('#define OMPI_BIGCOUNT_SRC 1' )
@@ -304,14 +381,14 @@ def ompi_abi(base_name, template, out):
304381 """Generate the OMPI ABI functions."""
305382 template .print_header (out )
306383 print_profiling_header (base_name , out )
307- print_cdefs_for_bigcount (base_name , out )
384+ print_cdefs_for_bigcount (out )
308385 out .dump (template .prototype .signature (base_name , abi_type = 'ompi' ))
309386 template .print_body (func_name = base_name , out = out )
310387 # Check if we need to generate the bigcount interface
311388 if util .prototype_has_bigcount (template .prototype ):
312389 base_name_c = f'{ base_name } _c'
313390 print_profiling_header (base_name_c , out )
314- print_cdefs_for_bigcount (base_name_c , out , enable_count = True )
391+ print_cdefs_for_bigcount (out , enable_count = True )
315392 out .dump (template .prototype .signature (base_name_c , abi_type = 'ompi' , enable_count = True ))
316393 template .print_body (func_name = base_name_c , out = out )
317394
@@ -326,15 +403,23 @@ def standard_abi(base_name, template, out):
326403
327404 # Static internal function (add a random component to avoid conflicts)
328405 internal_name = f'ompi_abi_{ template .prototype .name } '
406+ print_cdefs_for_bigcount (out )
329407 internal_sig = template .prototype .signature (internal_name , abi_type = 'ompi' ,
330- enable_count = True )
408+ enable_count = False )
331409 out .dump (consts .INLINE_ATTRS , internal_sig )
332410 template .print_body (func_name = base_name , out = out )
333-
334- def generate_function (prototype , fn_name , internal_fn , enable_count = False ):
411+ if util .prototype_has_bigcount (template .prototype ):
412+ internal_name = f'ompi_abi_{ template .prototype .name } _c'
413+ print_cdefs_for_bigcount (out , enable_count = True )
414+ internal_sig = template .prototype .signature (internal_name , abi_type = 'ompi' ,
415+ enable_count = True )
416+ out .dump (consts .INLINE_ATTRS , internal_sig )
417+ template .print_body (func_name = base_name , out = out )
418+
419+ def generate_function (prototype , fn_name , internal_fn , out , enable_count = False ):
335420 """Generate a function for the standard ABI."""
336- print_profiling_header (fn_name )
337- print_cdefs_for_bigcount (fn_name , enable_count )
421+ print_profiling_header (fn_name , out )
422+ # print_cdefs_for_bigcount(out, enable_count)
338423
339424 # Handle type conversions and arguments
340425 params = [param .construct (abi_type = 'standard' ) for param in prototype .params ]
@@ -344,6 +429,7 @@ def generate_function(prototype, fn_name, internal_fn, enable_count=False):
344429 return_type = prototype .return_type .construct (abi_type = 'standard' )
345430 lines .append (f'{ return_type .tmp_type_text ()} ret_value;' )
346431 for param in params :
432+ # print("param = " + str(param) + " " + str(param.argument))
347433 if param .init_code :
348434 lines .extend (param .init_code )
349435 pass_args = ', ' .join (param .argument for param in params )
@@ -359,10 +445,12 @@ def generate_function(prototype, fn_name, internal_fn, enable_count=False):
359445 out .dump (line )
360446 out .dump ('}' )
361447
362- generate_function (template .prototype , base_name , internal_name )
448+ internal_name = f'ompi_abi_{ template .prototype .name } '
449+ generate_function (template .prototype , base_name , internal_name , out )
363450 if util .prototype_has_bigcount (template .prototype ):
364451 base_name_c = f'{ base_name } _c'
365- generate_function (template .prototype , base_name_c , internal_name ,
452+ internal_name = f'ompi_abi_{ template .prototype .name } _c'
453+ generate_function (template .prototype , base_name_c , internal_name , out ,
366454 enable_count = True )
367455
368456
0 commit comments