Skip to content

Commit 9d1028b

Browse files
Benedikt Volkelsawenzel
authored andcommitted
Scale number of workers
* scale number workers in case only a fraction of workers should be used used for certain tasks
1 parent 79bfee1 commit 9d1028b

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

MC/bin/o2dpg_sim_workflow.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949

5050
parser.add_argument('-e',help='simengine', default='TGeant4')
5151
parser.add_argument('-tf',help='number of timeframes', default=2)
52-
parser.add_argument('-j',help='number of workers (if applicable)', default=8)
52+
parser.add_argument('-j',help='number of workers (if applicable)', default=8, type=int)
5353
parser.add_argument('-mod',help='Active modules', default='--skipModules ZDC')
5454
parser.add_argument('-seed',help='random seed number', default=0)
5555
parser.add_argument('-o',help='output workflow file', default='workflow.json')
@@ -89,8 +89,17 @@
8989
workflow={}
9090
workflow['stages'] = []
9191

92+
def relativeCPU(n_rel, n_workers=NWORKERS):
93+
# compute number of CPUs from a given number of workers
94+
# n_workers and a fraction n_rel
95+
# catch cases where n_rel > 1
96+
return min(n_workers, n_workers * n_rel)
97+
9298
taskcounter=0
93-
def createTask(name='', needs=[], tf=-1, cwd='./', lab=[], cpu=1, mem=500):
99+
def createTask(name='', needs=[], tf=-1, cwd='./', lab=[], cpu=1, relative_cpu=None, mem=500):
100+
if relative_cpu is not None:
101+
# Re-compute, if relative number of CPUs requested
102+
cpu = relativeCPU(relative_cpu)
94103
global taskcounter
95104
taskcounter = taskcounter + 1
96105
return { 'name': name, 'cmd':'', 'needs': needs, 'resources': { 'cpu': cpu , 'mem': mem }, 'timeframe' : tf, 'labels' : lab, 'cwd' : cwd }
@@ -116,7 +125,7 @@ def getDPL_global_options(bigshm=False,nosmallrate=False):
116125
exit(1)
117126

118127
INIBKG=args.iniBkg
119-
BKGtask=createTask(name='bkgsim', lab=["GEANT"], cpu='8')
128+
BKGtask=createTask(name='bkgsim', lab=["GEANT"], cpu=NWORKERS)
120129
BKGtask['cmd']='o2-sim -e ' + SIMENGINE + ' -j ' + str(NWORKERS) + ' -n ' + str(NBKGEVENTS) + ' -g ' + str(GENBKG) + ' ' + str(MODULES) + ' -o bkg --configFile ' + str(INIBKG)
121130
workflow['stages'].append(BKGtask)
122131

@@ -313,7 +322,7 @@ def getDPL_global_options(bigshm=False,nosmallrate=False):
313322
signalneeds = signalneeds + [ BKGtask['name'] ]
314323
else:
315324
signalneeds = signalneeds + [ BKG_HEADER_task['name'] ]
316-
SGNtask=createTask(name='sgnsim_'+str(tf), needs=signalneeds, tf=tf, cwd='tf'+str(tf), lab=["GEANT"], cpu='5.', mem='2000')
325+
SGNtask=createTask(name='sgnsim_'+str(tf), needs=signalneeds, tf=tf, cwd='tf'+str(tf), lab=["GEANT"], relative_cpu=5/8, mem='2000')
317326
SGNtask['cmd']='o2-sim -e ' + str(SIMENGINE) + ' ' + str(MODULES) + ' -n ' + str(NSIGEVENTS) + ' -j ' \
318327
+ str(NWORKERS) + ' -g ' + str(GENERATOR) + ' ' + str(TRIGGER)+ ' ' + str(CONFKEY) \
319328
+ ' ' + str(INIFILE) + ' -o ' + signalprefix + ' ' + embeddinto
@@ -371,7 +380,7 @@ def getDPL_global_options(bigshm=False,nosmallrate=False):
371380
tpcdigineeds += [ BKG_HITDOWNLOADER_TASKS['TPC']['name'] ]
372381

373382
TPCDigitask=createTask(name='tpcdigi_'+str(tf), needs=tpcdigineeds,
374-
tf=tf, cwd=timeframeworkdir, lab=["DIGI"], cpu='8', mem='9000')
383+
tf=tf, cwd=timeframeworkdir, lab=["DIGI"], cpu=NWORKERS, mem='9000')
375384
TPCDigitask['cmd'] = ('','ln -nfs ../bkg_HitsTPC.root . ;')[doembedding]
376385
TPCDigitask['cmd'] += 'o2-sim-digitizer-workflow ' + getDPL_global_options() + ' -n ' + str(args.ns) + simsoption + ' --onlyDet TPC --interactionRate ' + str(INTRATE) + ' --tpc-lanes ' + str(NWORKERS) + ' --incontext ' + str(CONTEXTFILE) + ' --tpc-chunked-writer --disable-write-ini'
377386
workflow['stages'].append(TPCDigitask)
@@ -380,7 +389,7 @@ def getDPL_global_options(bigshm=False,nosmallrate=False):
380389
if usebkgcache:
381390
trddigineeds += [ BKG_HITDOWNLOADER_TASKS['TRD']['name'] ]
382391
TRDDigitask=createTask(name='trddigi_'+str(tf), needs=trddigineeds,
383-
tf=tf, cwd=timeframeworkdir, lab=["DIGI"], cpu='8', mem='8000')
392+
tf=tf, cwd=timeframeworkdir, lab=["DIGI"], cpu=NWORKERS, mem='8000')
384393
TRDDigitask['cmd'] = ('','ln -nfs ../bkg_HitsTRD.root . ;')[doembedding]
385394
TRDDigitask['cmd'] += 'o2-sim-digitizer-workflow ' + getDPL_global_options() + ' -n ' + str(args.ns) + simsoption + ' --onlyDet TRD --interactionRate ' + str(INTRATE) + ' --configKeyValues \"TRDSimParams.digithreads=' + str(NWORKERS) + '\" --incontext ' + str(CONTEXTFILE) + ' --disable-write-ini'
386395
workflow['stages'].append(TRDDigitask)
@@ -393,7 +402,7 @@ def createRestDigiTask(name, det='ALLSMALLER'):
393402
for d in smallsensorlist:
394403
tneeds += [ BKG_HITDOWNLOADER_TASKS[d]['name'] ]
395404
t = createTask(name=name, needs=tneeds,
396-
tf=tf, cwd=timeframeworkdir, lab=["DIGI","SMALLDIGI"], cpu='8')
405+
tf=tf, cwd=timeframeworkdir, lab=["DIGI","SMALLDIGI"], cpu=NWORKERS)
397406
t['cmd'] = ('','ln -nfs ../bkg_Hits*.root . ;')[doembedding]
398407
t['cmd'] += 'o2-sim-digitizer-workflow ' + getDPL_global_options(nosmallrate=True) + ' -n ' + str(args.ns) + simsoption + ' --skipDet TPC,TRD --interactionRate ' + str(INTRATE) + ' --incontext ' + str(CONTEXTFILE) + ' --disable-write-ini'
399408
workflow['stages'].append(t)
@@ -438,7 +447,7 @@ def createRestDigiTask(name, det='ALLSMALLER'):
438447
TPCCLUSMERGEtask['cmd']='o2-commonutils-treemergertool -i tpc-native-clusters-part*.root -o tpc-native-clusters.root -t tpcrec' #--asfriend preferable but does not work
439448
workflow['stages'].append(TPCCLUSMERGEtask)
440449

441-
TPCRECOtask=createTask(name='tpcreco_'+str(tf), needs=[TPCCLUSMERGEtask['name']], tf=tf, cwd=timeframeworkdir, lab=["RECO"], cpu='3', mem='16000')
450+
TPCRECOtask=createTask(name='tpcreco_'+str(tf), needs=[TPCCLUSMERGEtask['name']], tf=tf, cwd=timeframeworkdir, lab=["RECO"], relative_cpu=3/8, mem='16000')
442451
TPCRECOtask['cmd'] = 'o2-tpc-reco-workflow ' + getDPL_global_options(bigshm=True, nosmallrate=False) + ' --input-type clusters --output-type tracks,send-clusters-per-sector --configKeyValues "GPU_global.continuousMaxTimeBin=100000;GPU_proc.ompThreads='+str(NWORKERS)+'"'
443452
workflow['stages'].append(TPCRECOtask)
444453

@@ -450,7 +459,7 @@ def createRestDigiTask(name, det='ALLSMALLER'):
450459
FT0RECOtask['cmd'] = 'o2-ft0-reco-workflow ' + getDPL_global_options()
451460
workflow['stages'].append(FT0RECOtask)
452461

453-
ITSTPCMATCHtask=createTask(name='itstpcMatch_'+str(tf), needs=[TPCRECOtask['name'], ITSRECOtask['name']], tf=tf, cwd=timeframeworkdir, lab=["RECO"], mem='8000', cpu='3')
462+
ITSTPCMATCHtask=createTask(name='itstpcMatch_'+str(tf), needs=[TPCRECOtask['name'], ITSRECOtask['name']], tf=tf, cwd=timeframeworkdir, lab=["RECO"], mem='8000', relative_cpu=3/8)
454463
ITSTPCMATCHtask['cmd']= 'o2-tpcits-match-workflow ' + getDPL_global_options(bigshm=True, nosmallrate=False) + ' --tpc-track-reader \"tpctracks.root\" --tpc-native-cluster-reader \"--infile tpc-native-clusters.root\"'
455464
workflow['stages'].append(ITSTPCMATCHtask)
456465

@@ -471,7 +480,7 @@ def createRestDigiTask(name, det='ALLSMALLER'):
471480
workflow['stages'].append(MFTRECOtask)
472481

473482
pvfinderneeds = [ITSTPCMATCHtask['name'], FT0RECOtask['name'], TOFTPCMATCHERtask['name'], MFTRECOtask['name']]
474-
PVFINDERtask = createTask(name='pvfinder_'+str(tf), needs=pvfinderneeds, tf=tf, cwd=timeframeworkdir, lab=["RECO"], cpu='8', mem='4000')
483+
PVFINDERtask = createTask(name='pvfinder_'+str(tf), needs=pvfinderneeds, tf=tf, cwd=timeframeworkdir, lab=["RECO"], cpu=NWORKERS, mem='4000')
475484
PVFINDERtask['cmd'] = 'o2-primary-vertexing-workflow ' + getDPL_global_options(nosmallrate=False)
476485
# PVFINDERtask['cmd'] += ' --vertexing-sources "ITS,ITS-TPC,ITS-TPC-TOF" --vetex-track-matching-sources "ITS,ITS-TPC,ITS-TPC-TOF"'
477486
workflow['stages'].append(PVFINDERtask)

0 commit comments

Comments
 (0)