Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • benchmark/rmit.py

    rf56101f re9c5db2  
    6363        return eval(fmt)
    6464
    65 # Evaluate all the options
    66 # options can be of the for key = val or key = some_math(other_key)
    67 # produce a list of all the options to replace some_math(other_key) with actual value
    6865def eval_options(opts):
    69         # Find all the options with dependencies
    7066        dependents = [d for d in opts.values() if type(d) is DependentOpt]
    71 
    72         # we need to find all the straglers
    7367        processed = []
    74 
    75         # extract all the necessary inputs
    76         input_keys = {}
     68        nopts = []
    7769        for d in dependents:
    78                 # Mark the dependent as seen
    7970                processed.append(d.key)
    80 
    81                 # process each of the dependencies
     71                lists = []
    8272                for dvar in d.vars:
    83                         # Check that it depends on something that exists
    8473                        if not dvar in opts.keys():
    8574                                print('ERROR: extra pattern option {}:{} uses unknown key {}'.format(d.key,d.value,dvar), file=sys.stderr)
    8675                                sys.exit(1)
    8776
    88                         # Check that it's not nested
    89                         if type(dvar) is DependentOpt:
    90                                 print('ERROR: dependent options cannot be nested {}:{} uses key {}'.format(d.key,d.value,dvar), file=sys.stderr)
    91                                 sys.exit(1)
    92 
    93                         # Add the values to the input keys
    94                         if dvar not in input_keys:
    95                                 input_keys[dvar] = opts[dvar]
    96                         else :
    97                                 if input_keys[dvar] != opts[dvar]:
    98                                         print('INTERNAL ERROR: repeat input do not match {}:{} vs {}'.format(dvar,opts[dvar],input_keys[dvar]), file=sys.stderr)
    99                                         sys.exit(1)
    100 
    101                         # Mark the input as seen
     77                        lists.append([(dvar, o) for o in opts[dvar]])
    10278                        processed.append(dvar)
    10379
    104         # add in all the straglers they should cause too many problems
    105         for k, v in opts.items():
    106                 if type(v) is DependentOpt:
    107                         continue
    108 
    109                 if k in processed:
    110                         # consistency check
    111                         if k not in input_keys:
    112                                 print('INTERNAL ERROR: key \'{}\' marked as processed but not in input_keys'.format(k), file=sys.stderr)
    113                                 sys.exit(1)
    114                         continue
    115 
    116                 # consistency check
    117                 if k in input_keys:
    118                         print('INTERNAL ERROR: key \'{}\' in input_keys but not marked as processed'.format(k), file=sys.stderr)
    119                         sys.exit(1)
    120 
    121                 # add the straggler
    122                 input_keys[k] = v
    123 
    124         # flatten the dict into a list of pairs so it's easier to work with
    125         input_list = []
    126         for k, v in input_keys.items():
    127                 input_list.append([(k, o) for o in v])
    128 
    129         # evaluate all the dependents
    130         # they are not allowed to produce new values so it's a one-to-one mapping from here
    131         evaluated = []
    132         for inputs in list(itertools.product(*input_list)):
    133                 this_eval = list(inputs)
    134                 for d in dependents:
    135                         this_eval.append((d.key, eval_one(d.value, inputs)))
    136 
    137                 evaluated.append(this_eval)
    138 
    139         # reformat everything to a list of arguments
    140         formated = []
    141         for o in evaluated:
    142                 inner = []
    143                 for k,v in o:
    144                         inner.append("-{}".format(k))
    145                         inner.append("{}".format(v))
    146 
    147                 # print(inner)
    148                 formated.append(inner)
    149 
    150         return formated
     80                kopt = []
     81                for vals in list(itertools.product(*lists)):
     82                        res = ['-{}'.format(d.key), "{}".format(eval_one(d.value, vals))]
     83                        for k, v in vals:
     84                                res.extend(['-{}'.format(k), "{}".format(v)])
     85                        kopt.append(res)
     86                nopts.append(kopt)
     87
     88
     89        for k, vals in opts.items():
     90                if k not in processed:
     91                        kopt = []
     92                        for v in vals:
     93                                kopt.append(['-{}'.format(k), "{}".format(v)])
     94                        nopts.append(kopt)
     95
     96        return nopts
    15197
    15298# returns the first option with key 'opt'
     
    176122        known_hosts = {
    177123                "jax": {
    178                         range(  1,  25) : "48-71",
    179                         range( 25,  49) : "48-71,144-167",
    180                         range( 49,  97) : "48-95,144-191",
    181                         range( 97, 145) : "24-95,120-191",
    182                         range(145, 193) : "0-95,96-191",
     124                        range(  1,  24) : "48-71",
     125                        range( 25,  48) : "48-71,144-167",
     126                        range( 49,  96) : "48-95,144-191",
     127                        range( 97, 144) : "24-95,120-191",
     128                        range(145, 192) : "0-95,96-191",
    183129                },
    184130        }
     
    238184
    239185        except:
     186                print('ERROR: invalid arguments', file=sys.stderr)
     187                parser.print_help(sys.stderr)
    240188                sys.exit(1)
    241189
     
    267215        # Figure out all the combinations to run
    268216        actions = []
    269         for p in itertools.product(range(options.trials), commands, opts):
     217        for p in itertools.product(range(options.trials), commands, *opts):
    270218                act = [p[1]]
    271219                for o in p[2:]:
     
    333281
    334282        if options.file != sys.stdout:
    335                 print("Done                                                                                ")
     283                print("Done");                                                                                ")
Note: See TracChangeset for help on using the changeset viewer.