Skip to content

Commit

Permalink
Set concurrent lumis/IOVs if their value is different from default re…
Browse files Browse the repository at this point in the history
…gardless of the number of threads

It can happen that the job configuration is generated with cmsDriver
without specifying the number of threads (i.e. that is 1), and ends up
being used with number of threads being overridden. If the number of
concurrent lumis/IOVs is set different from the default in such case,
that setting would be lost.
  • Loading branch information
makortel committed Mar 29, 2022
1 parent 767a838 commit ee5fe88
Showing 1 changed file with 23 additions and 11 deletions.
34 changes: 23 additions & 11 deletions Configuration/Applications/python/ConfigBuilder.py
Original file line number Diff line number Diff line change
Expand Up @@ -2268,19 +2268,31 @@ def prepare(self, doChecking = False):
self.pythonCfgCode+="from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask\n"
self.pythonCfgCode+="associatePatAlgosToolsTask(process)\n"

if self._options.nThreads != "1":
overrideThreads = (self._options.nThreads != "1")
overrideConcurrentLumis = (self._options.nConcurrentLumis != defaultOptions.nConcurrentLumis)
overrideConcurrentIOVs = (self._options.nConcurrentIOVs != defaultOptions.nConcurrentIOVs)

if overrideThreads or overrideConcurrentLumis or overrideConcurrentIOVs:
self.pythonCfgCode +="\n"
self.pythonCfgCode +="#Setup FWK for multithreaded\n"
self.pythonCfgCode +="process.options.numberOfThreads = "+self._options.nThreads+"\n"
self.pythonCfgCode +="process.options.numberOfStreams = "+self._options.nStreams+"\n"
self.pythonCfgCode +="process.options.numberOfConcurrentLuminosityBlocks = "+self._options.nConcurrentLumis+"\n"
self.pythonCfgCode +="process.options.eventSetup.numberOfConcurrentIOVs = "+self._options.nConcurrentIOVs+"\n"
if int(self._options.nConcurrentLumis) > 1:
self.pythonCfgCode +="if hasattr(process, 'DQMStore'): process.DQMStore.assertLegacySafe=cms.untracked.bool(False)\n"
self.process.options.numberOfThreads = int(self._options.nThreads)
self.process.options.numberOfStreams = int(self._options.nStreams)
self.process.options.numberOfConcurrentLuminosityBlocks = int(self._options.nConcurrentLumis)
self.process.options.eventSetup.numberOfConcurrentIOVs = int(self._options.nConcurrentIOVs)
if overrideThreads:
self.pythonCfgCode +="process.options.numberOfThreads = "+self._options.nThreads+"\n"
self.pythonCfgCode +="process.options.numberOfStreams = "+self._options.nStreams+"\n"
self.process.options.numberOfThreads = int(self._options.nThreads)
self.process.options.numberOfStreams = int(self._options.nStreams)
if overrideConcurrentLumis:
self.pythonCfgCode +="process.options.numberOfConcurrentLuminosityBlocks = "+self._options.nConcurrentLumis+"\n"
self.process.options.numberOfConcurrentLuminosityBlocks = int(self._options.nConcurrentLumis)
if overrideConcurrentIOVs:
self.pythonCfgCode +="process.options.eventSetup.numberOfConcurrentIOVs = "+self._options.nConcurrentIOVs+"\n"
self.process.options.eventSetup.numberOfConcurrentIOVs = int(self._options.nConcurrentIOVs)
if self._options.nConcurrentLumis != "1":
# nConcurrentLumis == 0 implies that framework decides the
# value based on the number of streams, and the number of
# threads/streams can be set afterwards. The safest check
# is then to set assertLegacySafe == True only when
# explicitly asked to use 1 concurrent lumi.
self.pythonCfgCode +="if hasattr(process, 'DQMStore'): process.DQMStore.assertLegacySafe=cms.untracked.bool(False)\n"

if self._options.accelerators is not None:
accelerators = self._options.accelerators.split(',')
Expand Down

0 comments on commit ee5fe88

Please sign in to comment.