1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2024-10-06 19:01:15 +01:00

add agenda command: added options for iterations and runtime parameters

This commit is contained in:
Sergei Trofimov 2015-06-18 17:38:51 +01:00
parent ccea63555c
commit 4d5413ac26
2 changed files with 38 additions and 6 deletions

View File

@ -184,15 +184,28 @@ class CreateAgendaSubcommand(CreateSubcommand):
def initialize(self): def initialize(self):
self.parser.add_argument('extensions', nargs='+', self.parser.add_argument('extensions', nargs='+',
help='Extensions to be added') help='Extensions to be added')
self.parser.add_argument('-i', '--iterations', type=int, default=1,
help='Sets the number of iterations for all workloads')
self.parser.add_argument('-r', '--include-runtime-params', action='store_true',
help="""
Adds runtime parameters to the global section of the generated
agenda. Note: these do not have default values, so only name
will be added. Also, runtime parameters are devices-specific, so
a device must be specified (either in the list of extensions,
or in the existing config).
""")
self.parser.add_argument('-o', '--output', metavar='FILE', self.parser.add_argument('-o', '--output', metavar='FILE',
help='Output file. If not specfied, STDOUT will be used instead.') help='Output file. If not specfied, STDOUT will be used instead.')
def execute(self, args): # pylint: disable=no-self-use def execute(self, args): # pylint: disable=no-self-use,too-many-branches,too-many-statements
loader = ExtensionLoader(packages=settings.extension_packages, loader = ExtensionLoader(packages=settings.extension_packages,
paths=settings.extension_paths) paths=settings.extension_paths)
agenda = {'config': OrderedDict(instrumentation=[], result_processors=[]), agenda = OrderedDict()
'workloads': []} agenda['config'] = OrderedDict(instrumentation=[], result_processors=[])
agenda['global'] = OrderedDict(iterations=args.iterations)
agenda['workloads'] = []
device = None device = None
device_config = None
for name in args.extensions: for name in args.extensions:
extcls = loader.get_extension_class(name) extcls = loader.get_extension_class(name)
config = loader.get_default_config(name) config = loader.get_default_config(name)
@ -207,8 +220,9 @@ class CreateAgendaSubcommand(CreateSubcommand):
agenda['workloads'].append(entry) agenda['workloads'].append(entry)
elif extcls.kind == 'device': elif extcls.kind == 'device':
if device is not None: if device is not None:
raise ConfigError('Specifying multiple devices: {} and {}'.format(device, name)) raise ConfigError('Specifying multiple devices: {} and {}'.format(device.name, name))
device = name device = extcls
device_config = config
agenda['config']['device'] = name agenda['config']['device'] = name
agenda['config']['device_config'] = config agenda['config']['device_config'] = config
else: else:
@ -218,6 +232,24 @@ class CreateAgendaSubcommand(CreateSubcommand):
agenda['config']['result_processors'].append(name) agenda['config']['result_processors'].append(name)
agenda['config'][name] = config agenda['config'][name] = config
if args.include_runtime_params:
if not device:
if settings.device:
device = loader.get_extension_class(settings.device)
device_config = loader.get_default_config(settings.device)
else:
raise ConfigError('-r option requires for a device to be in the list of extensions')
rps = OrderedDict()
for rp in device.runtime_parameters:
if hasattr(rp, 'get_runtime_parameters'):
# a core parameter needs to be expanded for each of the
# device's cores, if they're avialable
for crp in rp.get_runtime_parameters(device_config.get('core_names', [])):
rps[crp.name] = None
else:
rps[rp.name] = None
agenda['global']['runtime_params'] = rps
if args.output: if args.output:
wfh = open(args.output, 'w') wfh = open(args.output, 'w')
else: else:

View File

@ -300,7 +300,7 @@ class Device(Extension):
runtime_parameters = self._expand_runtime_parameters() runtime_parameters = self._expand_runtime_parameters()
rtp_map = {rtp.name.lower(): rtp for rtp in runtime_parameters} rtp_map = {rtp.name.lower(): rtp for rtp in runtime_parameters}
params = OrderedDict((k.lower(), v) for k, v in params.iteritems()) params = OrderedDict((k.lower(), v) for k, v in params.iteritems() if v is not None)
expected_keys = rtp_map.keys() expected_keys = rtp_map.keys()
if not set(params.keys()) <= set(expected_keys): if not set(params.keys()) <= set(expected_keys):