[GHC] #15717: Performance regression in for_ alternatives from GHC 8.2.2 to newer GHCs

GHC ghc-devs at haskell.org
Sun Oct 7 15:50:27 UTC 2018


#15717: Performance regression in for_ alternatives from GHC 8.2.2 to newer GHCs
-------------------------------------+-------------------------------------
           Reporter:  nh2            |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.6.1
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  Runtime
  Unknown/Multiple                   |  performance bug
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 We are investigating various ways to make `for_` and `traverse_` not leak
 space by changing the type signature from `(a -> f b) -> t a -> f ()` to
 `(a -> f ()) -> t a -> f ()`.

 While doing so, we noticed a regression from GHC 8.2.2 to 8.4.3 and 8.6.1.

 The code:

 https://gist.github.com/nh2/b8f9f8e60443bdb30c1cd7e0acb8c8eb/bb1cc1a4987091fcd41c07b0a6f0512f96a992ae

 Run against 3 different GHC releases:

 {{{
 # 8.2.2
 stack --resolver lts-11.22 ghc -- --make -O2 -rtsopts
 ./TraverseMaybePerformance.hs && /usr/bin/time ./TraverseMaybePerformance
 8 +RTS -sstderr

   460,309,368 bytes allocated in the heap

 # 8.4.3
 stack --resolver lts-12.11 ghc -- --make -O2 -rtsopts
 ./TraverseMaybePerformance.hs && /usr/bin/time ./TraverseMaybePerformance
 8 +RTS -sstderr

   860,301,736 bytes allocated in the heap

 # 8.6.1
 stack --resolver nightly-2018-10-06 ghc -- --make -O2 -rtsopts
 ./TraverseMaybePerformance.hs && /usr/bin/time ./TraverseMaybePerformance
 8 +RTS -sstderr

   860,301,784 bytes allocated in the heap
 }}}

 Allocations doubled starting with 8.4.

 All was run on Ubuntu 16.04 64-bit.

 We haven't investigated in detail yet (also whether it's a GHC or
 libraries problem) since we're actually trying to do something else and
 this came out on the side, but it looks important enough to share already.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15717>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list