Ticket #2276 (closed: fixed)
Improve the performance of Geometry
Reported by: | Nick Draper | Owned by: | Nick Draper |
---|---|---|---|
Priority: | major | Milestone: | Iteration 27 |
Component: | Mantid | Keywords: | |
Cc: | Blocked By: | ||
Blocking: | Tester: | Owen Arnold |
Description
Specifically getPos
Change History
comment:3 Changed 10 years ago by Martyn Gigg
(In [8926]) As a follow on to [8908], remove instantiation of parent class from getRotation call as well. The m_base pointer is now stored as a Component rather than IComponent so that the parent can be accessed directly without going through a dynamic_cast. Also a couple of minor cleanups around creating vectors and added a compiler directive for using the statistics within the Cache class. the hit/miss counts are now only accumulated if USE_CACHE_STATS is defined. Re #2276
comment:4 Changed 10 years ago by Russell Taylor
(In [8940]) Revert a change from some time back regarding how grouped detector positions are calculated in Absorption corrections routines. Small change in numerical result (for the better), big change in speed. Also a small refactoring in detector code that was less small in its impact on tests. Re #2276.
comment:6 Changed 10 years ago by Martyn Gigg
(In [8972]) Add methods to the ParameterMap to access parameters via a const char * rather than a std::string. It would appear that, on Linux at least, creating temporary std::string when retrieving a parameter causes slowdown in multi-threaded loops. My guess is due to dynamic allocation of memory for the new temporary string. This removes the part of the bottleneck on tight multi-threaded loops calling getDetector a lot. More to come regarding parameterized Component allocations. Re #2276
comment:9 Changed 10 years ago by Martyn Gigg
(In [9045]) Created a pool for parametrized detector objects to avoid excessive calls to the new operator in multi-threaded loops. If a cached object already exists and is unique then it's memory is reused rather than reallocating another object. This alleviates some of the locking within threaded loops that was impeding the scaling with the number of cores. There is still something to done with instruments but an issue remains with plottable components. Re #2276
comment:10 Changed 10 years ago by Martyn Gigg
comment:11 Changed 10 years ago by Martyn Gigg
comment:12 Changed 10 years ago by Martyn Gigg
comment:13 Changed 10 years ago by Nick Draper
- Milestone changed from Iteration 27 to Iteration 28
Bulk move of tickets at the end of iteration 27
comment:14 Changed 10 years ago by Nick Draper
- Status changed from new to accepted
- Milestone changed from Iteration 28 to Iteration 27
comment:15 Changed 10 years ago by Nick Draper
- Status changed from accepted to verify
- Resolution set to fixed
comment:16 Changed 10 years ago by Owen Arnold
- Status changed from verify to verifying
- Tester set to Owen Arnold
comment:18 Changed 5 years ago by Stuart Campbell
This ticket has been transferred to github issue 3123
(In [8908]) re #2276 Removed the instantiation of the parent Component class when it is not needed. Improved the performance of a GetPos & getRotation of every detector in WISH from 2.10 seconds to 1.25s.
There are more possible improvements that could be made. Specifically I still have to instantiate a shared pointer that I don't want, and there is some locking in cache.h around gathering statistics that are never used.