Commit 113f32e9485bd7a9cdba005747e37f2d025a483a
1 parent
cf531cca
Correct for thread safety in ctobssim.
ctobssim was not fully thread save as the models were shared among the threads which led to concurrent memory access when evaluating the Monte Carlo cache. The models are now copied within the parallel section, avoiding concurrent memory access (#1258).
Showing
3 changed files
with
12 additions
and
5 deletions
ChangeLog
| 1 | -2014-06-26 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu> | |
| 1 | +2014-07-09 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu> | |
| 2 | 2 | |
| 3 | 3 | * Version 0.8.0 released |
| 4 | 4 | ======================== |
| 5 | 5 | |
| 6 | 6 | Support energy dispersion in ctobssim, ctlike and ctmodel |
| 7 | + Correct ctobssim for thread safety | |
| 7 | 8 | Enhance documentation |
| 8 | 9 | |
| 9 | 10 | ... | ... |
NEWS
| ... | ... | @@ -2,7 +2,7 @@ New Features and Important Changes in ctools 00-08-00 |
| 2 | 2 | |
| 3 | 3 | Author(s) : Juergen Knoedlseder |
| 4 | 4 | |
| 5 | -26 June 2014 | |
| 5 | +9 July 2014 | |
| 6 | 6 | |
| 7 | 7 | |
| 8 | 8 | 1. Introduction |
| ... | ... | @@ -23,7 +23,10 @@ None |
| 23 | 23 | |
| 24 | 24 | 4. ctobssim - CTA observation simulation |
| 25 | 25 | ---------------------------------------- |
| 26 | -None | |
| 26 | +ctobssim was not fully thread save as the models were shared among the | |
| 27 | +threads which led to concurrent memory access when evaluating the Monte | |
| 28 | +Carlo cache. The models are now copied within the parallel section, | |
| 29 | +avoiding concurrent memory access (#1258). | |
| 27 | 30 | |
| 28 | 31 | ctobssim now also supports the handling of energy dispersion. Energy |
| 29 | 32 | dispersion can be switched on or off using the hidden edisp parameter. | ... | ... |
src/ctobssim/ctobssim.cpp
| ... | ... | @@ -305,6 +305,9 @@ void ctobssim::run(void) |
| 305 | 305 | wrklog.cout(true); |
| 306 | 306 | } |
| 307 | 307 | |
| 308 | + // Allocate and initialize copies for multi-threading | |
| 309 | + GModels models(m_obs.models()); | |
| 310 | + | |
| 308 | 311 | // Copy configuration from application logger to thread logger |
| 309 | 312 | wrklog.date(log.date()); |
| 310 | 313 | wrklog.name(log.name()); |
| ... | ... | @@ -340,10 +343,10 @@ void ctobssim::run(void) |
| 340 | 343 | int events_before = obs->events()->size(); |
| 341 | 344 | |
| 342 | 345 | // Simulate source events |
| 343 | - simulate_source(obs, m_obs.models(), m_rans[i], &wrklog); | |
| 346 | + simulate_source(obs, models, m_rans[i], &wrklog); | |
| 344 | 347 | |
| 345 | 348 | // Simulate source events |
| 346 | - simulate_background(obs, m_obs.models(), m_rans[i], &wrklog); | |
| 349 | + simulate_background(obs, models, m_rans[i], &wrklog); | |
| 347 | 350 | |
| 348 | 351 | // Dump simulation results |
| 349 | 352 | if (logNormal()) { | ... | ... |