[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