[GHC] #9630: compile-time performance regression (probably due to Generics)

GHC ghc-devs at haskell.org
Tue Apr 14 23:35:23 UTC 2015


#9630: compile-time performance regression (probably due to Generics)
-------------------------------------+-------------------------------------
        Reporter:  hvr               |                   Owner:  simonpj
            Type:  bug               |                  Status:  new
        Priority:  high              |               Milestone:  7.12.1
       Component:  Compiler          |                 Version:  7.9
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  Compile-time      |  Unknown/Multiple
  performance bug                    |               Test Case:
      Blocked By:                    |                Blocking:
 Related Tickets:  #9583             |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by goldfire):

 Here is some relevant data (thanks to Michal Terepeta). These numbers were
 gotten while compiling haskell-src-exts:

 (I'm choosing the `-fno-call-arity` results here for better comparison
 against 7.8, which lacked the `-fcall-arity` feature.)

 {{{
 ** HEAD with -fno-call-arity

         Sun Apr 12 18:16 2015 Time and Allocation Profiling Report
 (Final)

            ghc +RTS -p -RTS [...] -fno-call-arity

         total time  =      113.71 secs   (113714 ticks @ 1000 us, 1
 processor)
         total alloc = 121,884,896,720 bytes  (excludes profiling
 overheads)

 COST CENTRE       MODULE          %time %alloc

 SimplTopBinds     SimplCore        37.2   36.6
 CoreTidy          HscMain           6.0    7.3
 lintAnnots        CoreLint          5.8    6.5
 pprNativeCode     AsmCodeGen        4.1    4.8
 OccAnal           SimplCore         3.6    3.8
 occAnalBind.assoc OccurAnal         2.9    3.2
 StgCmm            HscMain           2.9    2.6
 RegAlloc          AsmCodeGen        2.6    3.4
 FloatOutwards     SimplCore         2.6    2.3
 regLiveness       AsmCodeGen        2.5    2.8
 tc_rn_src_decls   TcRnDriver        2.4    1.9
 Simplify          SimplCore         2.4    0.3
 sink              CmmPipeline       2.1    2.2
 NewStranal        SimplCore         1.7    2.1
 genMachCode       AsmCodeGen        1.4    1.4
 layoutStack       CmmPipeline       1.4    1.4
 NativeCodeGen     CodeOutput        1.1    1.2
 FloatInwards      SimplCore         1.1    1.4
 do_block          Hoopl.Dataflow    1.0    0.6
 Digraph.scc       Digraph           0.8    1.3
 }}}

 {{{
 ** 7.8.4

         Sun Apr 12 15:41 2015 Time and Allocation Profiling Report
 (Final)

            ghc +RTS -p -RTS [...]

         total time  =       93.11 secs   (93112 ticks @ 1000 us, 1
 processor)
         total alloc = 103,135,975,120 bytes  (excludes profiling
 overheads)

 COST CENTRE                 MODULE         %time %alloc

 SimplTopBinds               SimplCore       38.5   37.4
 pprNativeCode               AsmCodeGen       6.2    7.2
 StgCmm                      HscMain          3.9    4.2
 RegAlloc                    AsmCodeGen       3.7    5.1
 occAnalBind.assoc           OccurAnal        3.3    3.6
 OccAnal                     SimplCore        3.3    3.6
 regLiveness                 AsmCodeGen       3.1    3.4
 FloatOutwards               SimplCore        2.9    2.4
 sink                        CmmPipeline      2.8    2.8
 Simplify                    SimplCore        2.6    0.3
 tc_rn_src_decls             TcRnDriver       2.4    2.1
 genMachCode                 AsmCodeGen       1.9    2.0
 NewStranal                  SimplCore        1.8    2.1
 layoutStack                 CmmPipeline      1.8    1.8
 Core2Core                   HscMain          1.3    1.2
 deSugar                     HscMain          1.1    1.1
 do_block                    Hoopl.Dataflow   1.1    0.7
 CoreTidy                    HscMain          1.0    1.1
 CorePrep                    HscMain          1.0    1.1
 Digraph.scc                 Digraph          0.9    1.5
 versioninfo                 MkIface          0.9    1.0
 zonkEvBndr_zonkTcTypeToType TcHsSyn          0.6    1.4
 }}}

 HEAD with `-fno-specialise` and `-fno-call-arity`:
 {{{
  ghc +RTS -p -RTS  [...] -fno-specialise -fno-call-arity

 total time  =       89.93 secs   (89928 ticks @ 1000 us, 1 processor)
 total alloc = 93,495,685,792 bytes  (excludes profiling overheads)

 COST CENTRE       MODULE          %time %alloc

 SimplTopBinds     SimplCore        38.7   38.6
 pprNativeCode     AsmCodeGen        5.1    5.9
 StgCmm            HscMain           3.7    3.3
 occAnalBind.assoc OccurAnal         3.2    3.6
 OccAnal           SimplCore         3.2    3.6
 tc_rn_src_decls   TcRnDriver        3.1    2.5
 RegAlloc          AsmCodeGen        3.1    4.2
 regLiveness       AsmCodeGen        3.0    3.5
 FloatOutwards     SimplCore         2.7    2.4
 sink              CmmPipeline       2.6    2.7
 Simplify          SimplCore         2.5    0.1
 NewStranal        SimplCore         1.9    2.3
 genMachCode       AsmCodeGen        1.8    1.7
 layoutStack       CmmPipeline       1.6    1.7
 NativeCodeGen     CodeOutput        1.4    1.5
 FloatInwards      SimplCore         1.2    1.6
 CoreTidy          HscMain           1.2    1.2
 deSugar           HscMain           1.2    1.2
 do_block          Hoopl.Dataflow    1.1    0.7
 CorePrep          HscMain           1.0    1.1
 versioninfo       MkIface           0.9    1.0
 Parser            HscMain           0.9    1.2
 Digraph.scc       Digraph           0.9    1.5
 canEvVar          TcCanonical       0.7    1.0
 }}}

 And now with only `-fno-specialise`:

 {{{
  ghc +RTS -p -RTS [...] -fno-specialise

 total time  =      109.78 secs   (109784 ticks @ 1000 us, 1 processor)
 total alloc = 124,469,615,048 bytes  (excludes profiling overheads)

 COST CENTRE       MODULE       %time %alloc

 SimplTopBinds     SimplCore     35.4   32.4
 CallArity         SimplCore     13.4   20.7
 pprNativeCode     AsmCodeGen     4.1    4.5
 OccAnal           SimplCore      3.1    3.1
 StgCmm            HscMain        3.0    2.5
 occAnalBind.assoc OccurAnal      3.0    3.1
 RegAlloc          AsmCodeGen     2.6    3.2
 tc_rn_src_decls   TcRnDriver     2.5    1.8
 regLiveness       AsmCodeGen     2.4    2.6
 Simplify          SimplCore      2.3    0.1
 FloatOutwards     SimplCore      2.3    1.8
 sink              CmmPipeline    2.2    2.0
 genMachCode       AsmCodeGen     1.5    1.3
 NewStranal        SimplCore      1.5    1.7
 layoutStack       CmmPipeline    1.3    1.3
 NativeCodeGen     CodeOutput     1.2    1.1
 FloatInwards      SimplCore      1.0    1.2
 Digraph.scc       Digraph        0.8    1.2
 }}}

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


More information about the ghc-tickets mailing list