Skip to content
Snippets Groups Projects
  1. Jul 06, 2015
  2. Aug 09, 2012
    • Simon Marlow's avatar
      -package P was loading all versions of P in GHCi (#7030) · 73bde5b1
      Simon Marlow authored and pcapriotti's avatar pcapriotti committed
      -package P means "the latest version of P" if multiple versions are
      installed.  It was working as advertised, but we were
      eagerly *linking* all versions of P, which might cause an error if the
      package has some C code, because we can't link multiple instances of
      the same symbol.
      
      MERGED from commit 62164cf5
      73bde5b1
  3. Jun 21, 2012
  4. Jun 19, 2012
  5. Jun 17, 2012
  6. Jun 15, 2012
    • Simon Marlow's avatar
      Drop the per-task timing stats, give a summary only (#5897) · d677a952
      Simon Marlow authored and pcapriotti's avatar pcapriotti committed
      We were keeping around the Task struct (216 bytes) for every worker we
      ever created, even though we only keep a maximum of 6 workers per
      Capability.  These Task structs accumulate and cause a space leak in
      programs that do lots of safe FFI calls; this patch frees the Task
      struct as soon as a worker exits.
      
      One reason we were keeping the Task structs around is because we print
      out per-Task timing stats in +RTS -s, but that isn't terribly useful.
      What is sometimes useful is knowing how *many* Tasks there were.  So
      now I'm printing a single-line summary, this is for the program in
      
        TASKS: 2001 (1 bound, 31 peak workers (2000 total), using -N1)
      
      So although we created 2k tasks overall, there were only 31 workers
      active at any one time (which is exactly what we expect: the program
      makes 30 safe FFI calls concurrently).
      
      This also gives an indication of how many capabilities were being
      used, which is handy if you use +RTS -N without an explicit number.
      
      MERGED from commit 085c7fe5
      d677a952
  7. Jun 11, 2012
  8. Jun 08, 2012
    • Simon Marlow's avatar
      throwTo: unlock the MSG_THROWTO object before returning (#6103) · bbd055c6
      Simon Marlow authored and pcapriotti's avatar pcapriotti committed
      MERGED from commit 20ba7f1a
      bbd055c6
    • Simon Marlow's avatar
      Fix for earger blackholing of thunks with no free variables (#6146) · 3b9d1750
      Simon Marlow authored and pcapriotti's avatar pcapriotti committed
      A thunk with no free variables was not getting blackholed when
      -feager-blackholing was on, but we were nevertheless pushing the
      stg_bh_upd_frame version of the update frame that expects to see a
      black hole.
      
      I fixed this twice for good measure:
      
       - we now call blackHoleOnEntry when pushing the update frame to check
         whether the closure was actually blackholed, and so that we use the
         same predicate in both places
      
       - we now black hole thunks even if they have no free variables.
         These only occur when optimisation is off, but presumably if you say
         -feager-blackholing then that's what you want to happen.
      
      MERGED from commit 21a53a1c
      3b9d1750
  9. Jun 07, 2012
  10. Jun 05, 2012
  11. Jun 01, 2012
  12. May 30, 2012
    • Ian Lynagh's avatar
      MERGE: Be less aggressive about the result discount · 46949a12
      Ian Lynagh authored
      Merge of:
          commit 4fa3f16d
          Author: Simon Peyton Jones <simonpj@microsoft.com>
          Date:   Mon May 28 17:33:42 2012 +0100
      
      Be less aggressive about the result discount
      
      This patch fixes Trac #6099 by reducing the result discount in CoreUnfold.conSize.
      See Note [Constructor size and result discount] in CoreUnfold.
      
      The existing version is definitely too aggressive. Simon M found it an
      "unambiguous win" but it is definitely what led to the bloat. In a function
      with a lot of case branches, all returning a constructor, the discount could
      grow arbitrarily large.
      
      I also had to increase the -funfolding-creation-threshold from 450 to 750,
      otherwise some functions that should inline simply never get an unfolding.
      (The massive result discount was allow the unfolding to appear before.)
      
      The nofib results are these, picking a handful of outliers to show.
      
              Program           Size    Allocs   Runtime   Elapsed  TotalMem
      --------------------------------------------------------------------------------
               fulsom          -0.5%     -1.6%     -2.8%     -2.6%    +31.1%
             maillist          -0.2%     -0.0%      0.09      0.09     -3.7%
               mandel          -0.4%     +6.6%      0.12      0.12     +0.0%
             nucleic2          -0.2%    +18.5%      0.11      0.11     +0.0%
              parstof          -0.4%     +4.0%      0.00      0.00     +0.0%
      --------------------------------------------------------------------------------
                  Min          -0.9%     -1.6%    -19.7%    -19.7%     -3.7%
                  Max          +0.3%    +18.5%     +2.7%     +2.7%    +31.1%
       Geometric Mean          -0.3%     +0.4%     -3.0%     -3.0%     +0.2%
      
      Turns out that nucleic2 has a function
        Main.$wabsolute_pos =
          \ (ww_s4oj :: Types.Tfo) (ww1_s4oo :: Types.FloatT)
            (ww2_s4op :: Types.FloatT) (ww3_s4oq :: Types.FloatT) ->
            case ww_s4oj
            of _
            { Types.Tfo a_a1sS b_a1sT c_a1sU d_a1sV e_a1sW f_a1sX g_a1sY h_a1sZ i_a1t0 tx_a1t1 ty_a1t2 tz_a1t3 ->
            (# case ww1_s4oo of _ { GHC.Types.F# x_a2sO ->
               case a_a1sS of _ { GHC.Types.F# y_a2sS ->
               case ww2_s4op of _ { GHC.Types.F# x1_X2y9 ->
               case d_a1sV of _ { GHC.Types.F# y1_X2yh ->
               case ww3_s4oq of _ { GHC.Types.F# x2_X2yj ->
               case g_a1sY of _ { GHC.Types.F# y2_X2yr ->
               case tx_a1t1 of _ { GHC.Types.F# y3_X2yn ->
               GHC.Types.F#
                 (GHC.Prim.plusFloat#
                    (GHC.Prim.plusFloat#
                       (GHC.Prim.plusFloat#
                          (GHC.Prim.timesFloat# x_a2sO y_a2sS)
                          (GHC.Prim.timesFloat# x1_X2y9 y1_X2yh))
                       (GHC.Prim.timesFloat# x2_X2yj y2_X2yr))
                    y3_X2yn)
               } } }}}}},
      
              <similar>,
              <similar> )
      
      This is pretty big, but inlining it does get rid of that F# allocation.
      But we'll also get rid of it with deep CPR: Trac #2289. For now we just
      accept the change.
      46949a12
  13. May 16, 2012
  14. May 08, 2012
  15. May 03, 2012
  16. Apr 27, 2012
  17. Apr 26, 2012
    • Simon Peyton Jones's avatar
      Fix worker/wrapper for CPR functions · adc47ae7
      Simon Peyton Jones authored and pcapriotti's avatar pcapriotti committed
      A long-standing and egregious bug in the worker/wrapper code meant
      that some functions with the CPR property weren't getting a CPR
      w/w. And that had the effect of making a tail-recursive function not
      tail recursive.  As well as increasing allocation.
      
      Fixes Trac #5920, and #5997.
      
      Nofib results (highlights):
      
              Program           Size    Allocs   Runtime   Elapsed  TotalMem
      --------------------------------------------------------------------------------
               boyer2          -0.1%    -15.3%      0.01      0.01     +0.0%
              mandel2          -0.0%     -8.1%      0.01      0.01     +0.0%
                 para          -0.1%    -11.8%     -7.9%     -7.8%     +0.0%
      --------------------------------------------------------------------------------
                  Min          -0.1%    -15.3%     -7.9%     -7.8%    -33.3%
                  Max          +0.0%     +0.2%     +6.3%     +6.3%     +3.7%
       Geometric Mean          -0.0%     -0.4%     +0.1%     +0.1%     -0.5%
      
      Looks like a clear win.  And I have not even recompiled the libraries, so
      it'll probably be a bit better in the ed.
      
      MERGED from commit b8ff4448
      adc47ae7
  18. Apr 16, 2012
  19. Apr 12, 2012
  20. Apr 06, 2012
  21. Apr 02, 2012
Loading