Skip to content
Permalink
Branch: master
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
195 lines (147 sloc) 5.2 KB
#
# Collective Knowledge: crowdbenchmarking using ARM's workload automation and CK
#
# See CK LICENSE.txt for licensing details
# See CK COPYRIGHT.txt for copyright details
#
# Developer: Grigori Fursin, Grigori.Fursin@cTuning.org, http://fursin.net
#
cfg={} # Will be updated by CK (meta description of this module)
work={} # Will be updated by CK (temporal data)
ck=None # Will be updated by CK (initialized CK kernel)
# Local settings
compiler_choices='#choices#compiler_flags#'
line='================================================================'
fsummary='summary.json'
fclassification='classification.json'
fgraph='tmp-reactions-graph.json'
##############################################################################
# Initialize module
def init(i):
"""
Input: {}
Output: {
return - return code = 0, if successful
> 0, if error
(error) - error text if return > 0
}
"""
return {'return':0}
##############################################################################
# crowdsource these experiments
def crowdsource(i):
"""
Input: {
(local) - if 'yes', local crowd-benchmarking, instead of public
(user) - force different user ID/email for demos
}
Output: {
return - return code = 0, if successful
> 0, if error
(error) - error text if return > 0
}
"""
import copy
# Setting output
o=i.get('out','')
oo=''
if o=='con': oo='con'
quiet=i.get('quiet','')
er=i.get('exchange_repo','')
if er=='': er=ck.cfg['default_exchange_repo_uoa']
esr=i.get('exchange_subrepo','')
if esr=='': esr=ck.cfg['default_exchange_subrepo_uoa']
if i.get('local','')=='yes':
er='local'
esr=''
la=i.get('local_autotuning','')
# Get user
user=''
mcfg={}
ii={'action':'load',
'module_uoa':'module',
'data_uoa':cfg['module_deps']['program.optimization']}
r=ck.access(ii)
if r['return']==0:
mcfg=r['dict']
dcfg={}
ii={'action':'load',
'module_uoa':mcfg['module_deps']['cfg'],
'data_uoa':mcfg['cfg_uoa']}
r=ck.access(ii)
if r['return']>0 and r['return']!=16: return r
if r['return']!=16:
dcfg=r['dict']
user=dcfg.get('user_email','')
# Check target device
target=i.get('target','')
if target=='':
# Check and possibly select target machines
r=ck.search({'module_uoa':cfg['module_deps']['machine'], 'data_uoa':target, 'add_meta':'yes'})
if r['return']>0: return r
dlst=r['lst']
# Prune search by only required devices
rdat=['wa_linux', 'wa_android']
xlst=[]
if len(rdat)==0:
xlst=dlst
else:
for q in dlst:
if q.get('meta',{}).get('access_type','') in rdat:
xlst.append(q)
if len(xlst)==0:
return {'return':1, 'error':'no suitable target devices found (use "ck add machine" to register new target device)'}
elif len(xlst)==1:
target=xlst[0]['data_uoa']
else:
# SELECTOR *************************************
ck.out('')
ck.out('Please select target device to run your workloads on:')
ck.out('')
r=ck.select_uoa({'choices':xlst})
if r['return']>0: return r
target=r['choice']
if target=='':
return {'return':1, 'error':'--target machine is not specified (see "ck list machine")'}
ck.out('')
ck.out('Selected target machine: '+target)
ck.out('')
i['target']=target
# Initialize local environment for program optimization ***********************************************************
pi=i.get('platform_info',{})
if len(pi)==0:
ii=copy.deepcopy(i)
ii['action']='initialize'
ii['module_uoa']=cfg['module_deps']['program.optimization']
ii['exchange_repo']=er
ii['exchange_subrepo']=esr
ii['skip_welcome']='yes'
ii['skip_log_wait']='yes'
ii['crowdtuning_type']='wa-crowd-benchmarking'
r=ck.access(ii)
if r['return']>0: return r
pi=r['platform_info']
user=r.get('user','')
hos=pi['host_os_uoa']
hosd=pi['host_os_dict']
tos=pi['os_uoa']
tosd=pi['os_dict']
tbits=tosd.get('bits','')
remote=tosd.get('remote','')
tdid=pi['device_id']
# Start preparing input to run WA ...
ii=copy.deepcopy(i)
ii['action']='run'
ii['module_uoa']=cfg['module_deps']['wa']
ii['host_os']=hos
ii['target']=target
ii['target_os']=tos
ii['target_device_id']=tdid
ii['scenario_module_uoa']=work['self_module_uid']
ii['exchange_repo']=er
ii['exchange_subrepo']=esr
ii['share']='yes'
ii['scenario_module_uoa']=work['self_module_uid']
ii['user']=user
rr=ck.access(ii)
return rr
You can’t perform that action at this time.