1. 03 May, 2014 2 commits
  2. 02 May, 2014 1 commit
    • Simon Marlow's avatar
      Per-thread allocation counters and limits · b0534f78
      Simon Marlow authored
      This tracks the amount of memory allocation by each thread in a
      counter stored in the TSO.  Optionally, when the counter drops below
      zero (it counts down), the thread can be sent an asynchronous
      exception: AllocationLimitExceeded.  When this happens, given a small
      additional limit so that it can handle the exception.  See
      documentation in GHC.Conc for more details.
      
      Allocation limits are similar to timeouts, but
      
        - timeouts use real time, not CPU time.  Allocation limits do not
          count anything while the thread is blocked or in foreign code.
      
        - timeouts don't re-trigger if the thread catches the exception,
          allocation limits do.
      
        - timeouts can catch non-allocating loops, if you use
          -fno-omit-yields.  This doesn't work for allocation limits.
      
      I couldn't measure any impact on benchmarks with these changes, even
      for nofib/smp.
      b0534f78
  3. 30 Apr, 2014 1 commit
  4. 29 Apr, 2014 12 commits
  5. 28 Apr, 2014 12 commits
  6. 27 Apr, 2014 8 commits
  7. 25 Apr, 2014 1 commit
    • Herbert Valerio Riedel's avatar
      Drop `template-haskell`'s build-dep on `containers` · 07388af8
      Herbert Valerio Riedel authored
      This is an attempt to address
      
        https://github.com/haskell/cabal/issues/1811
      
      by replicating the less than 100 lines of code actually used from the
      containers package into an internal non-exposed `template-haskell` module.
      
      Moreover, `template-haskell` does not expose the `Map` type, so this change
      should have no visible effect on the public API.
      
      It may turn out that `Data.Map` is not necessary and that even a simple
      list-based associative list (`Prelude.lookup`) may suffice. However, in
      order to avoid any regressions, this commit takes the safe route and just
      clones `Data.Map` for now.
      Signed-off-by: Herbert Valerio Riedel's avatarHerbert Valerio Riedel <hvr@gnu.org>
      07388af8
  8. 24 Apr, 2014 3 commits
    • Gabor Greif's avatar
      Some typos in comments · 4ceb5dec
      Gabor Greif authored
      4ceb5dec
    • Simon Peyton Jones's avatar
      Don't eta-expand PAPs (fixes Trac #9020) · 79e46aea
      Simon Peyton Jones authored
      See Note [Do not eta-expand PAPs] in SimplUtils.  This has a tremendously
      good effect on compile times for some simple benchmarks.
      
      The test is now where it belongs, in perf/compiler/T9020 (instead of simpl015).
      
      I did a nofib run and got essentially zero change except for cacheprof which
      gets 4% more allocation.  I investigated.  Turns out that we have
      
          instance PP Reg where
             pp ppm ST_0 = "%st"
             pp ppm ST_1 = "%st(1)"
             pp ppm ST_2 = "%st(2)"
             pp ppm ST_3 = "%st(3)"
             pp ppm ST_4 = "%st(4)"
             pp ppm ST_5 = "%st(5)"
             pp ppm ST_6 = "%st(6)"
             pp ppm ST_7 = "%st(7)"
             pp ppm r    = "%" ++ map toLower (show r)
      
      That (map toLower (show r) does a lot of map/toLowers.  But if we inline show
      we get something like
      
             pp ppm ST_0 = "%st"
             pp ppm ST_1 = "%st(1)"
             pp ppm ST_2 = "%st(2)"
             pp ppm ST_3 = "%st(3)"
             pp ppm ST_4 = "%st(4)"
             pp ppm ST_5 = "%st(5)"
             pp ppm ST_6 = "%st(6)"
             pp ppm ST_7 = "%st(7)"
             pp ppm EAX  = map toLower (show EAX)
             pp ppm EBX  = map toLower (show EBX)
             ...etc...
      
      and all those map/toLower calls can now be floated to top level.
      This gives a 4% decrease in allocation.  But it depends on inlining
      a pretty big 'show' function.
      
      With this new patch we get slightly better eta-expansion, which makes
      a function look slightly bigger, which just stops it being inlined.
      The previous behaviour was luck, so I'm not going to worry about
      losing it.
      
      I've added some notes to nofib/Simon-nofib-notes
      79e46aea
    • Simon Peyton Jones's avatar
      Be less verbose when printing Names when we don't know what's in scope · 134b7223
      Simon Peyton Jones authored
      Previously we always printed qualified names, but that makes a lot of debug or
      warning output very verbose. So now we only print qualified names with -dppr-debug.
      
      Civilised output (from pukka error messages, with the environment available) is
      unaffected
      134b7223