> > For sure a lower miss rate on the cache is possible. Also, the
> > miss path -- function cmpGEQ_VTS -- is naively coded, we could
> > do a lot better there. Maybe it is possible to change the
> > representation of VTSs so that comparison using vector operations
> > (SSE insns, etc) is possible. Or at least so that the complex
> > alignment logic can be avoided.
>
> Right now I use the graph machinery, not vts.
> In order to support barrier I have to create a fake segment which does not
> belong to any thread.
Another way is with O(log N) new segments. No need for segments
that do not belong to any thread, and you can implement it using
the existing Segment representation easily.
Suppose there are 4 threads, t1, t2, t3, t4
* wait for all the threads to arrive at the barrier. When the
last one arrives:
* make a binary tree:
- "seg12": new segment belonging to t2, depending on t1 and old t2
- "seg34": new segment belonging to t4, depending on t3 and old t4
- "seg1234": new segment belonging to t4, depending on seg12 and seg34
* now seg1234 depends on all threads arriving at the barrier.
* now construct new segments for t1, t2, t3, t4, which of course
depend on the previous segments in the same thread, and also on
seg1234
I heard that this technique or something like it is explained in
Arndt Muehlenfeld's thesis, although I did not read it.
It is inefficient (in space) compared to having a single fake segment.
But at least you can implement it using the 2-input Segment nodes in
the original Helgrind. For a single fake segment, you would need
to represent N input dependencies, which makes the representation more
complex. Note that because the VTS effectively caches the result of
all hb-queries between all segment-pairs, this technique is not
inefficient in time, only in space (and then only O(log N) cost).
> I did not figure out what VTS to put in that fake segment (well, I did not
> try hard :))
General rule:
supposing thread T is starting a new segment, giving segments Told and Tnew
and also we want to add dependence on some other segment S, then
Tnew->vts = tickL_and_joinR( Told->vts, S->vts )
assuming that Tnew->prev == Told and Tnew->other == S
and it is important that Told and Tnew are from the same thread.
J
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Valgrind-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/valgrind-developers