[GHC] #12629: Worse performance with -O1 or -O2 due to GC cost

GHC ghc-devs at haskell.org
Tue Sep 27 01:39:26 UTC 2016


#12629: Worse performance with -O1 or -O2 due to GC cost
-------------------------------------+-------------------------------------
           Reporter:  onex           |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.0.1
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 {{{#!hs
 g a = replicate (n-a) (a+1)

 f [x] = [[x]]
 f list = [ a:b | a <- list, b <- f $ g a]

 main = do
     print $ length $ f [1..12]
 }}}

 The function ''g'' can be replaced by any ''a -> [a]'' function.

 Without optimization:
 {{{
   94,885,791,728 bytes allocated in the heap
      280,050,384 bytes copied during GC
           62,432 bytes maximum residency (18 sample(s))
           27,144 bytes maximum slop
                2 MB total memory in use (0 MB lost due to fragmentation)

                                      Tot time (elapsed)  Avg pause  Max
 pause
   Gen  0     182071 colls,     0 par    0.437s   0.442s     0.0000s
 0.0004s
   Gen  1        18 colls,     0 par    0.000s   0.002s     0.0001s
 0.0004s

   INIT    time    0.000s  (  0.002s elapsed)
   MUT     time   14.992s  ( 15.188s elapsed)
   GC      time    0.437s  (  0.444s elapsed)
   RP      time    0.000s  (  0.000s elapsed)
   PROF    time    0.000s  (  0.000s elapsed)
   EXIT    time    0.000s  (  0.000s elapsed)
   Total   time   15.428s  ( 15.634s elapsed)

   %GC     time       2.8%  (2.8% elapsed)

   Alloc rate    6,329,223,264 bytes per MUT second

   Productivity  97.2% of total user, 95.9% of total elapsed
 }}}

 With -O2:
 {{{
   86,218,852,592 bytes allocated in the heap
   13,323,597,456 bytes copied during GC
           62,712 bytes maximum residency (12895 sample(s))
           47,104 bytes maximum slop
                2 MB total memory in use (0 MB lost due to fragmentation)

                                      Tot time (elapsed)  Avg pause  Max
 pause
   Gen  0     154129 colls,     0 par    6.724s   6.685s     0.0000s
 0.0015s
   Gen  1     12895 colls,     0 par    0.484s   0.479s     0.0000s
 0.0004s

   INIT    time    0.000s  (  0.001s elapsed)
   MUT     time   12.714s  ( 13.002s elapsed)
   GC      time    7.207s  (  7.164s elapsed)
   RP      time    0.000s  (  0.000s elapsed)
   PROF    time    0.000s  (  0.000s elapsed)
   EXIT    time    0.000s  (  0.000s elapsed)
   Total   time   19.921s  ( 20.167s elapsed)

   %GC     time      36.2%  (35.5% elapsed)

   Alloc rate    6,781,366,989 bytes per MUT second

   Productivity  63.8% of total user, 63.0% of total elapsed
 }}}

 System:Windows/macOS
 Compiler:8.0.1/7.10.3

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


More information about the ghc-tickets mailing list