[GHC] #8308: Resurrect ticky code for counting constructor arity

GHC ghc-devs at haskell.org
Mon Sep 16 11:37:56 CEST 2013


#8308: Resurrect ticky code for counting constructor arity
----------------------------------------------+----------------------------
       Reporter:  jstolarek                   |             Owner:
           Type:  task                        |            Status:  new
       Priority:  normal                      |         Milestone:
      Component:  Profiling                   |           Version:  7.7
       Keywords:                              |  Operating System:
   Architecture:  Unknown/Multiple            |  Unknown/Multiple
     Difficulty:  Moderate (less than a day)  |   Type of failure:  Other
     Blocked By:                              |         Test Case:
Related Tickets:                              |          Blocking:
----------------------------------------------+----------------------------
 There is a dead piece of ticky profiling code that computes histograms of
 data constructor arities (including tuples) and size of vector returns.
 The function responsible is `bumpHistogram` in
 [[GhcFile(compiler/codeGen/StgCmmTicky.hs)]], which masks the commented
 out function `bumpHistogramE`. We can improve ticky profiling by
 resurrecting this dead code. There are following things that need to be
 done:

 1. Replace current no-op `bumpHistogram` with `bumpHistogramE`. Note that
 current implementation of `bumpHistogramE` computes constructor arity at
 runtime. This is unnecessary because we know arity at compile time so we
 can avoid runtime check by doing sth like this:

 {{{
 bumpHistogram lbl n = do
   let offset = n `min` 8
   emit (addToMem cLong
                  (cmmIndexExpr cLongWidth
                                (CmmLit (CmmLabel (mkRtsDataLabel lbl)))
                                (CmmReg (CmmInt (fromIntegral offset)
 cLongWidth)))
                  1)
 }}}
 Note that `mkRtsDataLabel` function does not exist anymore but we should
 be able to replace that call with `mkCmmDataLabel rtsPackageId lbl`
 (speculation).

 2. We need to declare arrays that will store histogram values.
 Declarations of variables used for storing ticky statistics are in
 [[GhcFile(includes/stg/Ticky.h)]]. We also need to initialize the declared
 array to contain only zeros.

 3. Having declared the arrays we need to fix printing of computed arities.
 This is done in [[GhcFile(rts/Ticky.c)]]. Note that there is a lot of code
 that is commented out (`/* krc: comment out some of this stuff temporarily
 */`) or disabled with `#if FALSE` pragma. We need to resurect *some* of
 it. There is a `PR_HST` macro for printing one histogram entry. This seems
 bad. We should probably rework the part of code responsible for printing
 out results of historgams.

 4. Current code counts arities from 0 to 8. Everything above 8 is put into
 the same bin as 8. This magical 8 is spread all over the code. We should
 declare a constant that is visible both in Haskell sources (see
 `bumpHistogram` in 1.) and RTS files and have all code behave properly
 depending on that constant - we should have loops instead of statically
 printing 9 elements of histogram array.

 5. Some ticky functions that count arity histograms are not used. For
 example `tickyReturnNewCon` should probably be called by `cgConApp` like
 this:

 {{{
         ; emit =<< fcode_init
         ; tickyReturnNewCon
         ; emitReturn [idInfoToAmode idinfo] }
 }}}

 The above is a an outline, which should be fairly accurate, but unexpected
 things may show up along the way.

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



More information about the ghc-tickets mailing list