Robert, On Thursday 19 June 2008 17:40, Robert Osfield wrote: > I've have just done a trial integration of OpenThreads::Atomic into > osg::Referenced using your changes, and performance results are pretty > encouraging under Linux/Intel quad core - I've seen 2.8 to 3.8% > improvement in overall framerate on a large town model I have, this > for the whole frame so means that the actual improvement during > cull/draw is better than this percentage. :) Yep, that atomic stuff is just worth it ...
> I won't commit the changes I've just merged though, as I recall from > my first pass review that the solution for the observers wasn't ideal, > so I'll go back and review these details and look for a better > solution right now. Well, we can discuss about that. Such a single lock per observer will be save also. But what is there should be thread safe. That is the typical RCU approach we can see in lockless algorithms. This is also what will just happen in some sense in most mutex implementations. The key is that the pointer value needs to be changed atomically. If we do not have the observer pointer there we allocate a new observer data structure and try to write that to the referenced. If an other thread did the same at the same time, we will fail on that atomic compare and swap operation on that pointer. In this case we just delete the yet unused observer pointer and use the other one that is now there. If our thread is successful to write that pointer we use our new data for the observers. The observer insert/remove is then guarded by the mutex in the observer data stuff. So this is safe too. The 'single observer lock' approach will serialize the observer modification globaly. While I believe that this is not a big problem in *almost* all cases. I think that we should prefere a completely paralell implementation if this one is that easy to have. Greetings and thanks Mathias -- Dr. Mathias Fröhlich, science + computing ag, Software Solutions Hagellocher Weg 71-75, D-72070 Tuebingen, Germany Phone: +49 7071 9457-268, Fax: +49 7071 9457-511 -- Vorstand/Board of Management: Dr. Bernd Finkbeiner, Dr. Florian Geyer, Dr. Roland Niemeier, Dr. Arno Steitz, Dr. Ingrid Zech Vorsitzender des Aufsichtsrats/ Chairman of the Supervisory Board: Prof. Dr. Hanns Ruder Sitz/Registered Office: Tuebingen Registergericht/Registration Court: Stuttgart Registernummer/Commercial Register No.: HRB 382196 _______________________________________________ osg-submissions mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
