11import os
2-
3- import click
4-
5- from benchmark import option_simulation
2+ import argparse
63import devito
74
85
9- @click .group ()
10- def menu ():
11- pass
12-
13-
14- @menu .command (name = 'generate' )
15- @option_simulation
16- @click .option ('-nn' , multiple = True , default = [1 ], help = 'Number of nodes' )
17- @click .option ('-ncpus' , default = 1 , help = 'Number of cores *per node*' ) # Should be ncores
18- @click .option ('-mem' , default = 120 , help = 'Requested DRAM *per node*' )
19- @click .option ('-np' , default = 1 , help = 'Number of MPI processes *per node*' )
20- @click .option ('-nt' , default = 1 , help = 'Number of OpenMP threads *per MPI process*' )
21- @click .option ('--mpi' , multiple = True , default = ['basic' ], help = 'Devito MPI mode(s)' )
22- @click .option ('--arch' , default = 'unknown' , help = 'Test-bed architecture' )
23- @click .option ('-r' , '--resultsdir' , default = 'results' , help = 'Results directory' )
24- @click .option ('--load' , multiple = True , default = [], help = 'Modules to be loaded' )
25- @click .option ('--export' , multiple = True , default = [], help = 'Env vars to be exported' )
26- def generate (** kwargs ):
6+ def generate (args ):
277 join = lambda l : ' ' .join ('%d' % i for i in l )
28- args = dict ( kwargs )
8+ args = vars ( args )
299 args ['shape' ] = join (args ['shape' ])
3010 args ['space_order' ] = join (args ['space_order' ])
3111
@@ -62,11 +42,11 @@ def generate(**kwargs):
6242 """ # noqa
6343
6444 # Generate one PBS file for each `np` value
65- for nn in kwargs ['nn' ]:
45+ for nn in args ['nn' ]:
6646 args ['nn' ] = nn
6747
6848 cmds = []
69- for i in kwargs ['mpi' ]:
49+ for i in args ['mpi' ]:
7050 args ['mpi' ] = i
7151 cmds .append (template_cmd % args )
7252 cmds = ' \n ' .join (cmds )
@@ -77,12 +57,44 @@ def generate(**kwargs):
7757 f .write (body )
7858
7959
80- @menu .command (name = 'cleanup' )
81- def cleanup ():
60+ def cleanup (args ):
8261 for f in os .listdir ():
8362 if f .endswith ('.gen.sh' ):
8463 os .remove (f )
8564
65+ def create_parser ():
66+ parser = argparse .ArgumentParser (description = 'Generate PBS scripts' )
67+ subparsers = parser .add_subparsers (dest = 'command' , required = True )
68+
69+ gen = subparsers .add_parser ('generate' )
70+ gen .add_argument ('-P' , '--problem' , required = True )
71+ gen .add_argument ('-d' , '--shape' , type = int , nargs = '+' , default = [50 , 50 , 50 ])
72+ gen .add_argument ('-so' , '--space-order' , type = int , nargs = '+' , default = [2 ])
73+ gen .add_argument ('--tn' , type = float , default = 250 )
74+ gen .add_argument ('-nn' , type = int , nargs = '+' , default = [1 ])
75+ gen .add_argument ('-ncpus' , type = int , default = 1 )
76+ gen .add_argument ('-mem' , type = int , default = 120 )
77+ gen .add_argument ('-np' , type = int , default = 1 )
78+ gen .add_argument ('-nt' , type = int , default = 1 )
79+ gen .add_argument ('--mpi' , nargs = '+' , default = ['basic' ])
80+ gen .add_argument ('--arch' , default = 'unknown' )
81+ gen .add_argument ('-r' , '--resultsdir' , default = 'results' )
82+ gen .add_argument ('--load' , nargs = '*' , default = [])
83+ gen .add_argument ('--export' , nargs = '*' , default = [])
84+
85+ subparsers .add_parser ('cleanup' )
86+ return parser
87+
88+
89+ def main ():
90+ parser = create_parser ()
91+ args = parser .parse_args ()
92+
93+ if args .command == 'generate' :
94+ generate (args )
95+ elif args .command == 'cleanup' :
96+ cleanup (args )
97+
8698
8799if __name__ == "__main__" :
88- menu ()
100+ main ()
0 commit comments