|
From: Konstantin S. <kon...@gm...> - 2008-01-25 16:54:50
|
On Jan 25, 2008 4:52 PM, Julian Seward <js...@ac...> wrote: > > > One more question regarding helgrind performance: > > is it possible to track only certain memory addresses in helgrind and > > simply ignore others (i.e. don't even keep shadow values for them)? > > Certainly the old (2.2.0) Helgrind had a mode in which it could > ignore stack references. That should improve performance, although > it can be difficult to decide for sure what is and is not a stack > reference. Such mode could be useful in the new helgrind as well, at least for the sake of experiment. It isn't that hard, is it? > > > I have for a while been considering a different idea, which is to take > advantage of the facts that (1) Valgrind only runs one thread at once > and (2) for periods of time when a thread is running and does not do > any sync events or lock events, these state machines tend to be > idempotent -- that is, the second and subsequent presentations of the > same address to the state machine do not change its state. > > The basic idea would be to note all memory references in a small > cache. Then, when a new reference appears, first see if it is > already in the cache; if so ignore it. When there is a thread > switch or synchronisation event, the cache is flushed. The core > provides enough hints to know when this cache should be flushed. > If the cache access is fast enough relative to the full SM, and > enough duplicate addresses appear, this could provide a substantial > speedup. > > The advantage, relative to skipping stack references, is that > you don't lose any functionality. > Sounds very promising! How many instructions are executed by scheduler between thread switches? --kcc |