
Hi,
MSM enthusiasts,
I have done a performance profiling with a simple parser with 3 implementations, plain C++, SMC and Boost MSM. I was happy to learn that the MSM implementation was very efficient.
:)
I'm having some questions about MSM space allocation, please let me know if my understanding of things are wrong (very likely).
I work in a high performance computing environment so I will try to minimize unnecessary object constructions.
Is it possible for the data in the state machine backend live somewhere else external to the state machine? If that's possible then I can put the state machine's internal states close to the data that needs to be manipulated and the state machine itself is data-less and I can have a single copy of the state machine and each data item carries everything. I know this breaks encapsulation but I'm just wondering.
No, all the states are constructed at the same time (fsm creation) and live together in a fusion set. I'm thinking about allowing different construction schemes but it's not going to be in the short-term. You can of course have in the states a pointer to the data but it's probably not what you're looking for. Sorry, at the moment it's not doable.
The state machine has a events queue (std::deque?), can I choose to not have this and other data structures I don't think I will need?
You can do 2 things: - replace the queue by something more efficient (like a boost::circular_buffer) if you need the queue but are stuck with a bad deque implementation (http://www.boost.org/doc/libs/1_47_0/libs/msm/doc/HTML/ch03s05.html#d0e2678) - remove the queue if you don't need it (meaning no posting of events during transition processing, no exit pseudo-states). To do this, provide a no_message_queue typedef. See: http://www.boost.org/doc/libs/1_47_0/libs/msm/doc/HTML/ch03s02.html#d0e1197. If you didn't use this yet, you might still not be getting the best speed out of msm. Providing also no_exception_thrown will get you a tick more speed. Please let me know whether the performance inproves (with compiler / target system if possible), I'm very interested in msm performance.
Thanks, -jh
HTH, Christophe