I know nothing about the algorithm involved but a cursory look doesn't show anything suspiciously redundant. Maybe if you showed the implementation of the outer loop as you think should be, that would help.

Anyway, we're looking at a log N blowup because the inner loop iterates bits in a number. It would, of course, still be nice to get rid of that!


Andrei

On 2/22/11 12:55 PM, David Simcha wrote:
I'm looking a little more at low-hanging fruit to improve GC
performance, and I think I may have found yet another huge performance
bug, but I want to make sure I'm not horribly misunderstanding the code
before I try to "fix" it.  This one has nothing to do with the patch I
already submitted.

Someone please take a look the loop on lines 2479-2500 of gcx.d
(https://github.com/D-Programming-Language/druntime/blob/master/src/gc/gcx.d).
It looks to me like B_PAGEPLUS blocks of memory are *getting scanned
O(N^2) times, completely by accident. *As far as I can tell, the
variable u represents the number of pages in the block currently being
examined.  o represents some offset from the base of the pool.
Therefore, it looks like we're scanning the same memory multiple times
for absolutely no reason.  I also wonder if stuff that's not supposed to
be getting scanned is.  o can be greater than the base of the block, but
we're marking from o to o + u * PAGESIZE, where u * PAGESIZE is the
length of the whole block.



_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to