[GHC] #7450: Regression in optimisation time of functions with many patterns (6.12 to 7.4)?

GHC ghc-devs at haskell.org
Thu Jul 9 00:07:27 UTC 2015


#7450: Regression in optimisation time of functions with many patterns (6.12 to
7.4)?
-------------------------------------+-------------------------------------
        Reporter:  iustin            |                   Owner:  bgamari
            Type:  bug               |                  Status:  patch
        Priority:  normal            |               Milestone:  7.12.1
       Component:  Compiler          |                 Version:  7.6.1
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  Compile-time      |  Unknown/Multiple
  performance bug                    |               Test Case:
      Blocked By:                    |                Blocking:
 Related Tickets:                    |  Differential Revisions:  Phab:D1012
-------------------------------------+-------------------------------------

Comment (by Ben Gamari <ben@…>):

 In [changeset:"b29633f5cf310824f3e34716e9261162ced779d3/ghc"]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="b29633f5cf310824f3e34716e9261162ced779d3"
 Bitmap: Fix thunk explosion

 Previously we would build up another `map (-N)` thunk
 for every word in the bitmap. Now we strictly accumulate the position
 and carry out a single ``map (`subtract` accum)``.

 `Bitmap.intsToBitmap` showed up in the profile while compiling a
 testcase of #7450 (namely a program containing a record type with large
 number of fields which derived `Read`). The culprit was
 `CmmBuildInfoTables.procpointSRT.bitmap`. On the testcase (with 4096
 fields), the profile previously looked like,

 ```
         total time  =      307.94 secs   (307943 ticks @ 1000 us, 1
 processor)
         total alloc = 336,797,868,056 bytes  (excludes profiling
 overheads)

 COST CENTRE              MODULE              %time %alloc

 lintAnnots               CoreLint             17.2   25.8
 procpointSRT.bitmap      CmmBuildInfoTables   11.3   25.2
 FloatOutwards            SimplCore             7.5    1.6
 flatten.lookup           CmmBuildInfoTables    4.0    3.9
 ...
 ```

 After this fix it looks like,
 ```
         total time  =      256.88 secs   (256876 ticks @ 1000 us, 1
 processor)
         total alloc = 255,033,667,448 bytes  (excludes profiling
 overheads)

 COST CENTRE              MODULE              %time %alloc

 lintAnnots               CoreLint             20.3   34.1
 FloatOutwards            SimplCore             9.1    2.1
 flatten.lookup           CmmBuildInfoTables    4.8    5.2
 pprNativeCode            AsmCodeGen            3.7    4.3
 simplLetUnfolding        Simplify              3.6    2.2
 StgCmm                   HscMain               3.6    2.1
 ```

 Signed-off-by: Ben Gamari <ben at smart-cactus.org>

 Test Plan: Validate

 Reviewers: austin, simonpj

 Reviewed By: simonpj

 Subscribers: thomie

 Differential Revision: https://phabricator.haskell.org/D1041

 GHC Trac Issues: #7450
 }}}

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


More information about the ghc-tickets mailing list