multithreading - 1ivana.home.cern.ch/ivana/ed-geant4-2019/presentations/multithreadi… ·...
TRANSCRIPT
![Page 1: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/1.jpg)
Multithreading - 1
I. Hrivnacova, IPN Orsay
Credits: A. Dotti, M. Asai (SLAC), M. Verderi (LLR)
Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay
![Page 2: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/2.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 2
Outline
● What is a thread● Why multithreading● Multithreading in Geant4● Multithreading Geant4 application
![Page 3: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/3.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 3
What Is a Thread
![Page 4: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/4.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 4
What Is a Thread ?
● Sequential application - one core
![Page 5: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/5.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 5
What Is a Thread ? (2)
● Sequential application – start N (cores/CPUs) copies of anapplication if it fits in memory
![Page 6: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/6.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 6
What Is a Thread ? (3)
● MT application – a single application starts threads.
![Page 7: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/7.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 7
What Is a Thread ? (4)
● Memory reduction: when shared objects are introduced, memory of Nthreads is less than memory used by N copies of the application
![Page 8: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/8.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 8
Why Multithreading
![Page 9: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/9.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 9
Detector geometry &cross-section tables
MEMORY BOARD
Transient per event(tracks, hits, etc.)
Active cores Unused cores
AVAILABLE CORES
MEMORY BOARD
Active cores
AVAILABLE CORES
W
ith
ou
t M
T
W
ith
MT
![Page 10: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/10.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 10
Multithreading in Geant4
![Page 11: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/11.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 11
Multi-threading in Geant4
● Each worker thread proceedsindependently
● Initializes its state from a masterthread
● Identifies its part of the work(events)
● Generates hits in its own hits-collection
● Geant4 automatically performsreductions (accumulation) whenusing scorers, G4Run derivedclasses or g4tools
● General design choice: event level parallelism via multi-threading(POSIX based, in 10.5 migration from POSIX threading to C++11threading)
![Page 12: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/12.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 12
Simplified Master / Worker Model
● A Geant4 application (in MT mode) can be seen as simple finitestate machine
![Page 13: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/13.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 13
Simplified Master / Worker Model (2)
● A Geant4 application (in MT mode) can be seen as simple finitestate machine
● Threads do not exists before first /run/beamOn● When master starts the first run spawns threads and distribute
work!
![Page 14: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/14.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 14
Shared Memory
● To reduce memory footprint threads must share at least part ofthe objects
● General rule in Geant4: threads can share whatever is invariantduring the event loop (e.g. threads do not change these objectswhile processing events, these are used “read-only”)
● Geometry definition
● Electromagnetic physics tables
![Page 15: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/15.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 15
Geant4 MT● Event level parallelism via multithreading (POSIX based)● Built on top of experience of G4MT prototypes
● Capitalizing the work started back in 2009 by X.Dong and G.Cooperman,Northeastern University
● Main design driving goal: minimize user-code changes● Integrated into Version 10.0 codebase
![Page 16: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/16.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 16
Geant4 10.00
● Version 10.0 was released on December 6th, 2013.● The first major release since June 2007.
● This is the first release with multithreading capability with eventparallelism
● Two build options: Multithreaded and Sequential mode, selection via acmake configuration option -DGEANT4_BUILD_MULTITHREADED=ON
● Maximum back-compatibility with user code - however someAPI had to changed to enable MT (this is why this is a majorrelease)
● An application developed for Geant4 version 9.6 can be used withoutchanging the code in sequential mode (except for other mandatorymodifications not MT-related)
● An MT-ready application, can also run in sequential mode withoutchanging the code (but not vice-versa)
![Page 17: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/17.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 17
Multithreading Geant4 Application
![Page 18: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/18.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 18
Geant4 MT and User Application
● Geant4 provides buildingblocks (bricks)
● Users have to assemblethem to describe theirscenario in their applicationprogram
![Page 19: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/19.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 19
Towards MT Application
● Geant4 kernel takes care of steering event processing onworkers
● Use G4MTRunManager, a new class derived from G4RunManager forsteering MT run
● New Geant4 virtual methods/classes to be implemented in auser code
● G4VUserActionInitialization – mandatory
● G4VUserDetectorConstruction::ConstructSDandField() - for applicationswith field and/or sensitive detectors
● G4UserWorkerThreadInitialization – optional, for applications whichwant/need to customize some aspects of thread behavior
● Make your application thread-safe
![Page 20: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/20.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 20
User Application and Geant4 KernelIn Sequential Mode
main()Create G4RunManager
Initialize
RunBeamOn
MyEventAction
MyStackingAction
MyTrackingAction
MyDetectorConstruction
MyPhysicsList
MySteppingAction
Delete G4RunManager
MyPrimaryGenerator
MyActionInitialization
Run
Event 1
Track 1 Track 2
Event 2Event 3
Event N...
Track 3
Track N...
Step 1 Step 2 Step N
Initialization (detector setup and physics processes)
Geant4 kernel
![Page 21: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/21.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 21
User Application and Geant4 KernelIn Sequential Mode
User Application Geant4 kernel User Application
Geant4 kernel User Application Geant4 kernel User Application
Geant4 kernel User Application
● Sequential application – start N (cores/CPUs) copies of an application if it fits inmemory
![Page 22: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/22.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 22
Master (shared)
Thread 0
.
.
.
Geant4 Kernel
User Application and Geant4 KernelIn MT Mode
User Application
User Application
Geant4 Kernel
Geant4 Kernel
.
.
.
Thread 1
.
.
.
User ApplicationGeant4
Kernel
Thread N
.
.
.
User Application
Geant4 Kernel
Main
![Page 23: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/23.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 23
MyDetectorConstruction
main()Create G4MTRunManager
Initialize
RunBeamOn
MyEventAction
MyStackingAction
MyTrackingAction
MyDetectorConstruction
MySteppingAction
Delete G4MTRunManager
Master (shared)
MyPrimaryGeneratorMyPhysicsListMyPhysicsListMyActionInitialization
Thread 0
Event N1Event N2Event N3
Event NN...
MyRunAction
MyEventAction
MyStackingAction
MyTrackingAction
MySteppingAction
Thread 1
Event M1 Event M2Event M3
Event MN...
MyRunAction
MyRunAction
Geant4 KernelCreate/Set
BuildOnMaster
Build
User Application and Geant4 KernelIn MT Mode
![Page 24: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/24.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 24
main()
● Geant4 does not provide the main().● In your main(), you have to
● Construct G4MTRunManager (or your derived class)
● Define your initialization classes: MyDetectorConstruction andMyPhysicsList and set them to G4RunManager
● Define your primary generator class (MyPrimaryGenerator) using yourMyActionInitialization class and set it to G4RunManager
● You can also● Define optional user action classes and set them to G4RunManager
using your ActionInitialization class
● Define Geant4 visualization and (G)UI session via G4VisExecutive andG4UIExecutive and/or your persistency manager
![Page 25: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/25.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 25
main() - sequential#include "EDDetectorConstruction.hh"#include "EDActionInitialization.hh"
#include "G4RunManager.hh"#include "FTFP_BERT.hh"
int main(int argc,char** argv){ // Create User Interface and enter in interactive session (1)
// Construct the default run manager G4RunManager* runManager = new G4RunManager;
// Detector construction runManager->SetUserInitialization(new EDDetectorConstruction());
// Physics list G4VModularPhysicsList* physicsList = new FTFP_BERT; runManager->SetUserInitialization(physicsList);
// User action initialization runManager->SetUserInitialization(new EDActionInitialization());
// Create User Interface and enter in interactive session ...}
exampleED.cc
![Page 26: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/26.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 26
main() - MT#include "EDDetectorConstruction.hh"#include "EDActionInitialization.hh"
#include "G4MTRunManager.hh"#include "FTFP_BERT.hh"
int main(int argc,char** argv){ // Create User Interface and enter in interactive session (1)
// Construct the default run manager G4MTRunManager* runManager = new G4MTRunManager;
// Detector construction runManager->SetUserInitialization(new EDDetectorConstruction());
// Physics list G4VModularPhysicsList* physicsList = new FTFP_BERT; runManager->SetUserInitialization(physicsList);
// User action initialization runManager->SetUserInitialization(new EDActionInitialization());
// Create User Interface and enter in interactive session ...}
exampleED.cc
However thiscode does notcompile against Geant4sequentialinstallation
![Page 27: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/27.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 27
main() - MT-ready#include "EDDetectorConstruction.hh"#include "EDActionInitialization.hh"
#ifdef G4MULTITHREADED#include "G4MTRunManager.hh"#else#include "G4RunManager.hh"#endif#include "FTFP_BERT.hh"
int main(int argc,char** argv){ ... // Construct the default run manager#ifdef G4MULTITHREADED G4MTRunManager* runManager = new G4MTRunManager;#else G4RunManager* runManager = new G4RunManager;#endif
// Detector construction runManager->SetUserInitialization(new EDDetectorConstruction());
...}
exampleED.cc
G4MULTITHREADEDflag is definedwhen buildingagainst Geant4MT installation
![Page 28: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/28.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 28
User Action Initialization
● The initialization and action classes which are called duringevent processing MUST be defined all together in the useraction initialization class derived fromG4VUserActionInitialization abstract base class.
● Note that use of this class is mandatory for multithreading processing
● Implement the virtual method Build(), where you● Instantiate all initialization and action classes called during event
processing● This method is called in MT mode on the workers
● Optionally, implement the virtual method BuildForMaster(),where you
● Instantiate all initialization and action classes called during eventprocessing which should be build on master
● Typically, RunAction is created both on master and workers
![Page 29: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/29.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 29
Action Initialization - Sequential#include "G4VUserActionInitialization.hh"
/// Action initialization class.class EDActionInitialization : public G4VUserActionInitialization{ public: EDActionInitialization(); virtual ~EDActionInitialization();
virtual void Build() const;};
#include "EDActionInitialization.hh"#include "EDPrimaryGeneratorAction.hh"#include "EDEventAction.hh"
EDActionInitialization::EDActionInitialization() : G4VUserActionInitialization(){}
void EDActionInitialization::Build() const{ SetUserAction(new EDPrimaryGeneratorAction); SetUserAction(new EDEventAction);}
EDActionInitialization.hh
EDActionInitialization.cc
![Page 30: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/30.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 30
Action Initialization – MT-ready#include "G4VUserActionInitialization.hh"
/// Action initialization class.class EDActionInitialization : public G4VUserActionInitialization{ public: EDActionInitialization(); virtual ~EDActionInitialization();
virtual void Build() const; virtual void BuildForMaster() const;};
void EDActionInitialization::Build() const{ SetUserAction(new EDPrimaryGeneratorAction); SetUserAction(new EDEventAction); SetUserAction(new EDRunAction);}
void EDActionInitialization::BuildForMaster() const{ SetUserAction(new EDRunAction);}
EDActionInitialization.hh
EDActionInitialization.cc
Function called only in MT mode
![Page 31: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/31.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 31
Geometry
● To describe your detector you have to derive your own concrete class fromG4VUserDetectorConstruction abstract base class.
● Implement the virtual method Construct(), where you● Instantiate all necessary materials
● Instantiate volumes of your detector geometry
● Optionally, create regions, visualization attributes
● All these geometry objects (materials, volumes, ...) are created in sharedmemory (on master)
● Optionally, implement the virtual method ConstructSDanField(), where you● Instantiate your sensitive detector classes and set them to the corresponding
logical volumes
● Instantiate magnetic (or other) field
● Using ConstructSDanField() is mandatory with multi-threading
● Sensitive detectors and field are created on workers
![Page 32: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/32.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 32
Physics● Physics list is instantiated in main()
● Its is created in shared memory (on master)
● Physics lists provided in Geant4 are MT-ready ● Nothing to be done on the user side in this case
● Particles are constructed via call to ConstructParticle() in sharedmemory (on master)
● Physics processes are constructed via call to ConstructProcess() onworkers
![Page 33: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/33.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 33
User Physics List● If you define your own physics list
● Make sure that all process objects are instantiated in theConstructProcess() method and NOT in the physics list constructor
● If it includes ions, add G4GenericIon::GenericIonDefinition() intoConstructParticle() method. This ensures that all ions (including lightions such as deuteron, alpha) work properly.
![Page 34: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/34.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 34
Scoring
● Geant4 sensitive, hits collections are MT ready● Hits objects, as well as sensitive detectors, are instantiated on workers,
that's why the G4Allocator declared with hit class need to be definedthread-local - add G4ThreadLocal keyword
MyHit.hh sequential
G4Allocator<EDChamberHit>* EDChamberHitAllocator = 0;
extern G4Allocator<MyHit>* MyHitAllocator;
G4ThreadLocal G4Allocator<MyHit>* MyHitAllocator = 0;
extern G4ThreadLocal G4Allocator<MyHit>* MyHitAllocator;
MyHit.cc sequential
MyHit.hh MT-ready
MyHit.cc MT-ready
![Page 35: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/35.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 35
Analysis
● Geant4 analysis tools are MT-ready● Histograms & profiles:
● Each thread owns its own copy of given histograms & profiles
● At the end of the run workers objects are “merged” into a single one onmaster
● A single file with merged histograms and profiles will be produced
● When using G4AnalysisManager with histograms, the UserRunAction classmust be instantiated both on master and workers
MergeMerge
Thread 1
Thread 2
Output
![Page 36: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/36.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 36
Analysis (2)
● Ntuples● Each thread owns a copy of ntuple
● Not merged by default
● Output files● Each thread will write out a separate file, file names are generated
automatically:
– fileName[_ntupleName]_tid.ext● where tid = thread Identifier (0,1,2, ...), ext = root, xml, csv, hbook
● When using Root output, the ntuple files per thread can beanalyzed with use of the TChain class
● Since Geant4 10.3 merging can be activated (with ROOT outputonly) using
● analysisManager->SetNtupleMerging(true);
![Page 37: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/37.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 37
Visualization
● Geant4 visualization is MT-ready● Visualization done by master thread, based on event keeping● Events are drawn directly from worker threads as soon as any
are ready
![Page 38: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/38.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 38
User Interface
● User interacts with application typing UI commands● Master thread “accumulates” the commands and passes the commands
stack to all the threads at the beginning of a run
● Threads execute the same commands sequence as master thread
● However some commands make sense only in master thread(e.g. the one modifying the geometry)
● UI commands can be marked as “not to be broadcasted” viaG4UIcommand::SetToBeBroadcasted(false);
● Do not forget this step if you implement user-defined UIcommands
![Page 39: Multithreading - 1ivana.home.cern.ch/ivana/ED-Geant4-2019/presentations/multithreadi… · 17/5/2019 · Multithreading - 1 I. Hrivnacova, IPN Orsay Credits: A. Dotti, M. Asai (SLAC),](https://reader033.vdocuments.net/reader033/viewer/2022051919/600beb6991de0947d132ab2a/html5/thumbnails/39.jpg)
I. Hrivnacova @ Geant4 ED PHENIICS Tutorial,13 - 17 May 2019, Orsay 39
Conclusions
● Geant4 collaboration made a big effort to make writing Geant4multi-threading application easy
● We believe that just following the instructions is enough – for simpleapplications
● Parallelism is however a tricky business:● We will speak about race conditions in the second part of this
presentation