@@ -137,18 +137,57 @@ def generate_comm_convert_fn_intern_to_abi(self):
137
137
def generate_info_convert_fn (self ):
138
138
self .generic_convert (ConvertFuncs .INFO , 'info' , 'MPI_Info' , consts .RESERVED_INFOS )
139
139
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
+
140
146
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 )
142
148
143
149
def generate_datatype_convert_fn (self ):
144
150
self .generic_convert (ConvertFuncs .DATATYPE , 'datatype' , 'MPI_Datatype' , consts .PREDEFINED_DATATYPES )
145
151
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
+
146
173
def generate_op_convert_fn (self ):
147
174
self .generic_convert (ConvertFuncs .OP , 'op' , 'MPI_Op' , consts .COLLECTIVE_OPERATIONS )
148
175
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
+
149
185
def generate_win_convert_fn (self ):
150
186
self .generic_convert (ConvertFuncs .WIN , 'win' , 'MPI_Win' , consts .RESERVED_WINDOWS )
151
187
188
+ def generate_win_convert_fn_intern_to_abi (self ):
189
+ self .generic_convert_reverse (ConvertOMPIToStandard .WIN , 'win' , 'MPI_Win' , consts .RESERVED_WINDOWS )
190
+
152
191
def generate_pointer_convert_fn (self , type_ , fn_name , constants ):
153
192
abi_type = self .mangle_name (type_ )
154
193
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):
168
207
def generate_request_convert_fn (self ):
169
208
self .generate_pointer_convert_fn ('MPI_Request' , ConvertFuncs .REQUEST , consts .RESERVED_REQUESTS )
170
209
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)
173
215
174
216
def generate_status_convert_fn (self ):
175
217
type_ = 'MPI_Status'
176
218
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)' )
178
220
self .dump ('{' )
179
221
self .dump (' out->MPI_SOURCE = inp->MPI_SOURCE;' )
180
222
self .dump (' out->MPI_TAG = inp->MPI_TAG;' )
181
223
self .dump (f' out->MPI_ERROR = { ConvertFuncs .ERROR_CLASS } (inp->MPI_ERROR);' )
182
224
# Ignoring the private fields for now
183
225
self .dump ('}' )
184
226
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
+
185
238
def define (self , type_ , name , value ):
186
239
self .dump (f'#define { name } OMPI_CAST_CONSTANT({ type_ } , { value } )' )
187
240
@@ -217,12 +270,17 @@ def dump_header(self):
217
270
self .dump ()
218
271
219
272
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 )
221
275
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 )
222
278
self .define_all ('MPI_Request' , consts .RESERVED_REQUESTS )
279
+ self .define_all ('MPI_Session' , consts .RESERVED_SESSIONS )
223
280
self .define_all ('MPI_Win' , consts .RESERVED_WINDOWS )
224
281
self .define_all ('MPI_Info' , consts .RESERVED_INFOS )
225
282
self .define_all ('MPI_File' , consts .RESERVED_FILES )
283
+ self .define_all ('MPI_Message' , consts .RESERVED_MESSAGES )
226
284
227
285
for name , value in consts .VARIOUS_CONSTANTS .items ():
228
286
self .dump (f'#define { self .mangle_name (name )} { value } ' )
@@ -255,9 +313,13 @@ def dump_header(self):
255
313
};""" )
256
314
self .dump (f'typedef struct MPI_Status_ABI { self .mangle_name ("MPI_Status" )} ;' )
257
315
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 *);' )
258
319
# Function signatures
259
320
for sig in self .signatures :
260
321
self .dump (f'{ sig } ;' )
322
+ # print("Working on signature " + str(sig))
261
323
self .dump ('int MPI_Abi_details(int *buflen, char *details, MPI_Info *info);' )
262
324
self .dump ('int MPI_Abi_supported(int *flag);' )
263
325
self .dump ('int MPI_Abi_version(int *abi_major, int *abi_minor);' )
@@ -267,12 +329,27 @@ def dump_header(self):
267
329
self .generate_comm_convert_fn ()
268
330
self .generate_comm_convert_fn_intern_to_abi ()
269
331
self .generate_info_convert_fn ()
332
+ self .generate_info_convert_fn_intern_to_abi ()
270
333
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 ()
271
337
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 ()
272
343
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 ()
273
347
self .generate_win_convert_fn ()
348
+ self .generate_win_convert_fn_intern_to_abi ()
274
349
self .generate_request_convert_fn ()
350
+ self .generate_request_convert_fn_intern_to_abi ()
275
351
self .generate_status_convert_fn ()
352
+ self .generate_status_convert_fn_intern_to_abi ()
276
353
277
354
self .dump ("""
278
355
#if defined(c_plusplus) || defined(__cplusplus)
@@ -292,7 +369,7 @@ def print_profiling_header(fn_name, out):
292
369
out .dump ('#endif' )
293
370
294
371
295
- def print_cdefs_for_bigcount (fn_name , out , enable_count = False ):
372
+ def print_cdefs_for_bigcount (out , enable_count = False ):
296
373
if enable_count :
297
374
out .dump ('#undef OMPI_BIGCOUNT_SRC' )
298
375
out .dump ('#define OMPI_BIGCOUNT_SRC 1' )
@@ -304,14 +381,14 @@ def ompi_abi(base_name, template, out):
304
381
"""Generate the OMPI ABI functions."""
305
382
template .print_header (out )
306
383
print_profiling_header (base_name , out )
307
- print_cdefs_for_bigcount (base_name , out )
384
+ print_cdefs_for_bigcount (out )
308
385
out .dump (template .prototype .signature (base_name , abi_type = 'ompi' ))
309
386
template .print_body (func_name = base_name , out = out )
310
387
# Check if we need to generate the bigcount interface
311
388
if util .prototype_has_bigcount (template .prototype ):
312
389
base_name_c = f'{ base_name } _c'
313
390
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 )
315
392
out .dump (template .prototype .signature (base_name_c , abi_type = 'ompi' , enable_count = True ))
316
393
template .print_body (func_name = base_name_c , out = out )
317
394
@@ -326,15 +403,23 @@ def standard_abi(base_name, template, out):
326
403
327
404
# Static internal function (add a random component to avoid conflicts)
328
405
internal_name = f'ompi_abi_{ template .prototype .name } '
406
+ print_cdefs_for_bigcount (out )
329
407
internal_sig = template .prototype .signature (internal_name , abi_type = 'ompi' ,
330
- enable_count = True )
408
+ enable_count = False )
331
409
out .dump (consts .INLINE_ATTRS , internal_sig )
332
410
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 ):
335
420
"""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)
338
423
339
424
# Handle type conversions and arguments
340
425
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):
344
429
return_type = prototype .return_type .construct (abi_type = 'standard' )
345
430
lines .append (f'{ return_type .tmp_type_text ()} ret_value;' )
346
431
for param in params :
432
+ # print("param = " + str(param) + " " + str(param.argument))
347
433
if param .init_code :
348
434
lines .extend (param .init_code )
349
435
pass_args = ', ' .join (param .argument for param in params )
@@ -359,10 +445,12 @@ def generate_function(prototype, fn_name, internal_fn, enable_count=False):
359
445
out .dump (line )
360
446
out .dump ('}' )
361
447
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 )
363
450
if util .prototype_has_bigcount (template .prototype ):
364
451
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 ,
366
454
enable_count = True )
367
455
368
456
0 commit comments