[GHC] #8763: forM_ [1..N] does not get fused (10 times slower than go function)

GHC ghc-devs at haskell.org
Sun Mar 18 21:01:44 UTC 2018


#8763: forM_ [1..N] does not get fused (10 times slower than go function)
-------------------------------------+-------------------------------------
        Reporter:  nh2               |                Owner:  (none)
            Type:  bug               |               Status:  infoneeded
        Priority:  normal            |            Milestone:  8.6.1
       Component:  Compiler          |              Version:  7.6.3
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Runtime           |  Unknown/Multiple
  performance bug                    |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #7206             |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by George):

 Attached file fuse.hs , similar to the first file but with nested forM_,
 both versions run in the same time but the forM_ version allocates about
 50% more

 {{{

  ghc -O2 fuse.hs +RTS
 [1 of 1] Compiling Main             ( fuse.hs, fuse.o )
 Linking fuse ...
 bash-3.2$ ./fuse 1 +RTS -s
 486341683267690
      320,057,352 bytes allocated in the heap
            8,232 bytes copied during GC
           44,576 bytes maximum residency (1 sample(s))
           29,152 bytes maximum slop
              308 MB total memory in use (0 MB lost due to fragmentation)

                                      Tot time (elapsed)  Avg pause  Max
 pause
   Gen  0         1 colls,     0 par    0.000s   0.000s     0.0000s
 0.0000s
   Gen  1         1 colls,     0 par    0.000s   0.025s     0.0254s
 0.0254s

   INIT    time    0.000s  (  0.003s elapsed)
   MUT     time    5.432s  (  5.634s elapsed)
   GC      time    0.000s  (  0.025s elapsed)
   EXIT    time    0.000s  (  0.005s elapsed)
   Total   time    5.433s  (  5.667s elapsed)

   %GC     time       0.0%  (0.4% elapsed)

   Alloc rate    58,918,474 bytes per MUT second

   Productivity 100.0% of total user, 99.5% of total elapsed

 bash-3.2$ ./fuse 2 +RTS -s
 486341683267690
      560,057,328 bytes allocated in the heap
           15,992 bytes copied during GC
      320,028,576 bytes maximum residency (2 sample(s))
          868,448 bytes maximum slop
              308 MB total memory in use (0 MB lost due to fragmentation)

                                      Tot time (elapsed)  Avg pause  Max
 pause
   Gen  0       228 colls,     0 par    0.001s   0.002s     0.0000s
 0.0001s
   Gen  1         2 colls,     0 par    0.000s   0.026s     0.0128s
 0.0254s

   INIT    time    0.000s  (  0.003s elapsed)
   MUT     time    5.453s  (  5.630s elapsed)
   GC      time    0.002s  (  0.027s elapsed)
   EXIT    time    0.000s  (  0.008s elapsed)
   Total   time    5.455s  (  5.667s elapsed)

   %GC     time       0.0%  (0.5% elapsed)

   Alloc rate    102,698,216 bytes per MUT second

   Productivity 100.0% of total user, 99.5% of total elapsed

 }}}

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


More information about the ghc-tickets mailing list