[Haskell-cafe] Boxed Mutable Arrays

Brad Larsen brad.larsen at gmail.com
Tue Dec 15 12:55:46 EST 2009


On Tue, Dec 15, 2009 at 12:00 PM, Gregory Collins
<greg at gregorycollins.net> wrote:
> Bulat Ziganshin <bulat.ziganshin at gmail.com> writes:
>
>> now i see what you mean. no, i mean trivial transformation. #650 says
>> about slow GC. why it's slow? because once you made any update to the
>> array, the entire array is marked as updated and scanned on next minor
>> GC (which occurs after every 512 kbytes allocated, afaik). let's
>> replace big array (say, of 10,000 elements) with array of 100 arrays
>> of 100 elements each. now, between minor GCs only some of arrays will
>> be changed and entire amount of memory to be scanned will become less
>
> I actually tried this, and modified Data.HashTable to use a two-tiered
> chunked dynamic array as you suggest. In some limited testing it was
> only about 5% faster, so I gave up on it -- you get some GC time back
> but you also pay a significant indirection penalty by adding an extra
> cache line miss for every operation.
>
> G
> --
> Gregory Collins <greg at gregorycollins.net>
>

Indeed!  A two-tiered implementation as Bulat describes is a big hack
anyway.  I don't want to have to dance around a bug!

Sincerely,
Brad


More information about the Haskell-Cafe mailing list