Code for download: session7_start.tar.gz
Exercise 7a:
- Migrate the exampleED application to MT. After each step rebuild the program. You can also try to run and observe the behaviour (breaks) after each step and understand how the next step fixes the observed break. Steps:
- Update the
main
function: addG4MTRunManager.
- Update the
ActionInitialization
class: add theBuildForMaster()
function. - Update the
Hit
classes: declareG4Allocator
thread local.
After these steps the migration is complete. Rebuild and rerun the program.
- Update the
- Increase the number of events (~300) and observe the ROOT output. Inspect the ntuple files generated per threads. Active ntuple merging, run the same number of events and observe the ROOT output again.
Exercise 7b:
- Change the default number of threads: first in the code and then via the environment variable. Observe which setting has the preference.
- Limit the output to one thread only (via a command in a macro).
- Get an experience with a data race. Add a global variable defined in a file scope in
EDChamberSD.cc
just after the headers in commented lines:
G4double* myGlobalValue = new G4double(1.);
and inEDChamberSD::ProcessHits()
:
// simulate data race
if ( (*myGlobalValue) > 0.) {
delete myGlobalValue;
myGlobalValue = new G4double(-1);
}
else {
delete myGlobalValue;
myGlobalValue = new G4double(1);
}
Run the program in batch mode. Does the program break now?
Congratulation, the race condition was added successfully !
UseG4AutoLock
to fix this thread-unsafe code.
Exercise 7c:
- Add a menu in GUI using the command line interface
- Add a menu « View » in the toolbar (on Apple computers, the menu bar is always at the top of the screen)
- In this « View » menu, add two buttons for setting the viewPoint at Theta/Phi (0,0) and (90,0)
- In this « View » menu, add a button for setting a viewPoint and ask for the Theta/Phi values (define a command without parameters)
Solution: session7_solution.tar.gz