[PATCH] [Core] Update references in parallel

Davide Italiano davide at freebsd.org
Thu Mar 19 19:12:06 PDT 2015


On Fri, Mar 20, 2015 at 2:33 AM, Sean Silva <chisophugis at gmail.com> wrote:
> I really don't like this approach. It has large memory contention in the inner loop even though this computation doesn't inherently have any. Also it is using an extremely cache-unfriendly design, along with putting a `new` into the inner loop, causing contention inside the memory allocator besides the usual allocation slowness.
>
> We could just store a bit inside the Atom that marks it as dead. That avoids a bunch of hash table lookups in the _deadAtoms map anyway. We have a ton of space in the Atom base class in the _definition field, which is only using 2 bits of a pointer-aligned field (aligned to the vptr). We already have the _definition field loaded (and in cache) due to the dyn_cast above (which checks _definition). So it's just an OR and a store to mark it: no extra loads, no extra cache misses, no synchronization.
>
>

I like your design better, no doubt, but as previously discussed this
needs some fundamental re-design of the code (i.e. atoms  can't be
passed as const anymore). cc:ing all the other people involved so we
can have a discussion about pro/cons and if this is the direction we
want to take.


-- 
Davide

"There are no solved problems; there are only problems that are more
or less solved" -- Henri Poincare




More information about the llvm-commits mailing list