Skip to content
  • Simon Marlow's avatar
    [project @ 2006-01-17 16:13:18 by simonmar] · 91b07216
    Simon Marlow authored
    Improve the GC behaviour of IORefs (see Ticket #650).
    
    This is a small change to the way IORefs interact with the GC, which
    should improve GC performance for programs with plenty of IORefs.
    
    Previously we had a single closure type for mutable variables,
    MUT_VAR.  Mutable variables were *always* on the mutable list in older
    generations, and always traversed on every GC.
    
    Now, we have two closure types: MUT_VAR_CLEAN and MUT_VAR_DIRTY.  The
    latter is on the mutable list, but the former is not.  (NB. this
    differs from MUT_ARR_PTRS_CLEAN and MUT_ARR_PTRS_DIRTY, both of which
    are on the mutable list).  writeMutVar# now implements a write
    barrier, by calling dirty_MUT_VAR() in the runtime, that does the
    necessary modification of MUT_VAR_CLEAN into MUT_VAR_DIRY, and adding
    to the mutable list if necessary.
    
    This results in some pretty dramatic speedups for GHC itself.  I've
    just measureed a 30% overall speedup compiling a 31-module program
    (anna) with the default heap settings :-D
    91b07216