-
Notifications
You must be signed in to change notification settings - Fork 37
Description
Please look through the Production fcl files to look for inappropriate uses of multi-threading.
We should only use multi-threading when G4 is the dominant CPU time in the job. Consider the example that Alessandro showed on Wednesday, which is based off of
Production/JobConfig/pileup/MuStopPileup.fcl
This uses 2 threads and 2 schedules. Please set them both to 1.
This job is dominated by the time spent in PileupPath:TargetStopResampler:ResamplingMixer, an average of 2.3 seconds per event out of 2.4 total seconds per event. The time spent in G4 is only 0.2 seconds per event. The only module in this job that is parallelizable is the G4 module ( and maybe the event generator). So art serializes everything else. The net result is that when an instance of ResamplingMixer gets in, it blocks the other thread until it completes.
If you run with 1 thread the job completes in some amount of wall clock time. If you run with 2 threads it completes in very slightly less wall clock time but it is using 2 CPUs, not one. Each CPU is idle half of the time.
Let me know if you have any questions.
Thanks,
Rob