X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/97e2219ed6c0e511f6165460cec79afadf42f589..c4c82977e0a105cdf7b04010ddd21bbf15dced4d:/teshsuite/smpi/MBI/CollMatchingGenerator.py diff --git a/teshsuite/smpi/MBI/CollMatchingGenerator.py b/teshsuite/smpi/MBI/CollMatchingGenerator.py index cf4c5bff45..5d72ca3f88 100755 --- a/teshsuite/smpi/MBI/CollMatchingGenerator.py +++ b/teshsuite/smpi/MBI/CollMatchingGenerator.py @@ -5,7 +5,7 @@ import os import sys -from generator_utils import * +import generator_utils as gen template = """// @{generatedby}@ /* ///////////////////////// The MPI Bugs Initiative //////////////////////// @@ -83,97 +83,119 @@ int main(int argc, char **argv) { } """ -for c1 in coll + icoll + ibarrier: - for c2 in coll + icoll + ibarrier: +for c1 in gen.coll + gen.icoll + gen.ibarrier: + for c2 in gen.coll + gen.icoll + gen.ibarrier: patterns = {} patterns = {'c1': c1, 'c2': c2} patterns['generatedby'] = f'DO NOT EDIT: this file was generated by {os.path.basename(sys.argv[0])}. DO NOT EDIT.' - patterns['collfeature'] = 'Yes' if c1 in coll or c2 in coll else 'Lacking' - patterns['icollfeature'] = 'Yes' if c1 in icoll + ibarrier or c2 in icoll + ibarrier else 'Lacking' + patterns['collfeature'] = 'Yes' if c1 in gen.coll or c2 in gen.coll else 'Lacking' + patterns['icollfeature'] = 'Yes' if c1 in gen.icoll + gen.ibarrier or c2 in gen.icoll + gen.ibarrier else 'Lacking' patterns['c1'] = c1 patterns['c2'] = c2 - patterns['init1'] = init[c1]("1") - patterns['init2'] = init[c2]("2") - patterns['fini1a'] = fini[c1]("1") - patterns['fini2a'] = fini[c2]("2") - patterns['fini1b'] = fini[c1]("1") - patterns['fini2b'] = fini[c2]("2") - patterns['free1'] = free[c1]("1") - patterns['free2'] = free[c2]("2") - patterns['operation1a'] = operation[c1]("1") - patterns['operation1b'] = operation[c1]("1") - patterns['operation2a'] = operation[c2]("2") - patterns['operation2b'] = operation[c2]("2") + patterns['init1'] = gen.init[c1]("1") + patterns['init2'] = gen.init[c2]("2") + patterns['fini1a'] = gen.fini[c1]("1") + patterns['fini2a'] = gen.fini[c2]("2") + patterns['fini1b'] = gen.fini[c1]("1") + patterns['fini2b'] = gen.fini[c2]("2") + patterns['free1'] = gen.free[c1]("1") + patterns['free2'] = gen.free[c2]("2") + patterns['operation1a'] = gen.operation[c1]("1") + patterns['operation1b'] = gen.operation[c1]("1") + patterns['operation2a'] = gen.operation[c2]("2") + patterns['operation2b'] = gen.operation[c2]("2") patterns['change_cond'] = 'rank % 2' + shortdesc = ' collective ordering' if c1 == c2: # Generate the correct code using the same collective twice - replace = patterns - replace['shortdesc'] = 'Correct collective ordering' + replace = patterns.copy() + replace['shortdesc'] = 'Correct' + shortdesc replace['longdesc'] = f'All ranks call {c1} twice' replace['outcome'] = 'OK' replace['errormsg'] = '' - make_file(template, f'CallOrdering_{c1}_{c2}_ok.c', replace) + replace['change_cond'] = 'rank < nprocs' + replace['operation1b'] = '' + replace['operation2b'] = '' + replace['fini1b'] = '' + replace['fini2b'] = '' + gen.make_file(template, f'CallOrdering_{c1}_{c2}_ok.c', replace) # Generate the correct code using the collective once - replace = patterns - replace['shortdesc'] = 'Correct collective ordering' + replace = patterns.copy() + replace['shortdesc'] = 'Correct' + shortdesc replace['longdesc'] = f'All ranks call {c1} once' replace['outcome'] = 'OK' replace['errormsg'] = '' replace['init2'] = '' + replace['change_cond'] = 'rank < nprocs' replace['operation2a'] = '' + replace['operation1b'] = '' replace['operation2b'] = '' replace['fini2a'] = '' + replace['fini1b'] = '' replace['fini2b'] = '' replace['free2'] = '' - make_file(template, f'CallOrdering_{c1}_ok.c', replace) + gen.make_file(template, f'CallOrdering_{c1}_ok.c', replace) else: # Generate the correct ordering with two different collectives - replace = patterns - replace['shortdesc'] = 'Correct collective ordering' + replace = patterns.copy() + replace['shortdesc'] = 'Correct' + shortdesc replace['longdesc'] = f'All ranks call {c1} and then {c2}' replace['outcome'] = 'OK' replace['errormsg'] = '' - make_file(template, f'CallOrdering_{c1}_{c2}_ok.c', replace) + replace['change_cond'] = 'rank < nprocs' + replace['operation1b'] = '' + replace['operation2b'] = '' + replace['fini1b'] = '' + replace['fini2b'] = '' + gen.make_file(template, f'CallOrdering_{c1}_{c2}_ok.c', replace) # Generate the incorrect ordering with two different collectives - replace = patterns - replace['shortdesc'] = 'Incorrect collective ordering' + replace = patterns.copy() + replace['shortdesc'] = 'Incorrect' + shortdesc replace['longdesc'] = f'Odd ranks call {c1} and then {c2} while even ranks call these collectives in the other order' replace['outcome'] = 'ERROR: CallMatching' replace['errormsg'] = 'Collective mistmatch. @{c1}@ at @{filename}@:@{line:MBIERROR1}@ is matched with @{c2}@ line @{filename}@:@{line:MBIERROR2}@.' - replace['operation1b'] = operation[c2]("2") # Inversion - replace['operation2b'] = operation[c1]("1") - replace['fini1a'] = fini[c1]("1") # Inversion - replace['fini2a'] = fini[c2]("2") - replace['fini1b'] = fini[c2]("2") # Inversion - replace['fini2b'] = fini[c1]("1") - replace['free1'] = free[c2]("2") - replace['free2'] = free[c1]("1") + replace['operation1b'] = gen.operation[c2]("2") # Inversion + replace['operation2b'] = gen.operation[c1]("1") + replace['fini1a'] = gen.fini[c1]("1") # Inversion + replace['fini2a'] = gen.fini[c2]("2") + replace['fini1b'] = gen.fini[c2]("2") # Inversion + replace['fini2b'] = gen.fini[c1]("1") + replace['free1'] = gen.free[c2]("2") + replace['free2'] = gen.free[c1]("1") - make_file(template, f'CallOrdering_{c1}_{c2}_nok.c', replace) + gen.make_file(template, f'CallOrdering_{c1}_{c2}_nok.c', replace) # Generate the incorrect ordering with one collective - replace = patterns - replace['shortdesc'] = 'Incorrect collective ordering' + replace = patterns.copy() + replace['shortdesc'] = 'Incorrect' + shortdesc replace['longdesc'] = f'Odd ranks call {c1} while even ranks do not call any collective' replace['outcome'] = 'ERROR: CallMatching' replace['errormsg'] = 'Collective mistmatch. @{c1}@ at @{filename}@:@{line:MBIERROR1}@ is not matched.' replace['operation1b'] = '' # Remove functions replace['operation2b'] = '' replace['operation2a'] = '' + replace['init2'] = '' replace['fini1b'] = '' replace['fini2a'] = '' replace['fini2b'] = '' - make_file(template, f'CallOrdering_{c1}_none_nok.c', replace) + replace['free1'] = gen.free[c1]("1") + replace['free2'] = '' + gen.make_file(template, f'CallOrdering_{c1}_none_nok.c', replace) # Generate a correct ordering with a conditional not depending on ranks - replace = patterns - replace['shortdesc'] = 'Correct collective ordering' - replace['longdesc'] = f'All ranks call {c1} and then {c2} or inversely' + replace = patterns.copy() + replace['shortdesc'] = 'Correct' + shortdesc + replace['longdesc'] = f'All ranks call {c1}' replace['outcome'] = 'OK' replace['errormsg'] = '' - replace['change_cond'] = 'nprocs<256' - replace['operation2b'] = '' # Remove functions + replace['change_cond'] = 'rank < nprocs' + replace['operation1b'] = '' # Remove functions + replace['operation2b'] = '' replace['operation2a'] = '' + replace['init2'] = '' + replace['fini1b'] = '' + replace['fini2a'] = '' replace['fini2b'] = '' - replace['free2a'] = '' - make_file(template, f'CallOrdering_{c1}_none_ok.c', replace) + replace['free1'] = gen.free[c1]("1") + replace['free2'] = '' + gen.make_file(template, f'CallOrdering_{c1}_none_ok.c', replace)