[Haskell-cafe] Undocumented cost-centres (.\) using auto-all, and SCC pragma not being honored

Dan Maftei ninestraycats at gmail.com
Thu Feb 16 13:34:56 CET 2012


On Wed, Feb 15, 2012 at 9:51 PM, Thomas Schilling
<nominolo at googlemail.com>wrote:

> On 15 February 2012 16:17, Dan Maftei <ninestraycats at gmail.com> wrote:
> >
> > 1 When profiling my code with -auto-all, my .prof file names some
> sub-expressions with a backslash. Cf. below. What are these?
> >
> >      e_step
> >       e_step.ewords
> >       e_step.\
> >        e_step.\.\
> >         e_step.update_counts
> >       e_step.fwords
> >
>
> Yup, those are anonymous functions.
>

Thank you. I'm still curious why other (named) expressions don't show up.
I'm running the profiler again now and they DO. Odd...


>
> >
> > 2. A related question: I tried using the SCC pragma instead of auto-all.
> I added it to all seven expressions inside the let, and to the nested
> folds. However, only two showed up in the .prof file! How come?
>
> It would be helpful if you pasted the code.  I think SCC pragmas
> around lambdas get ignored and you should put them inside.  (It may be
> the other way around, though.)


 God this is embarrassing... it's horrible code, I don't know monads yet
and EM makes more sense in an imperative paradigm, but I felt like pushing
the envelope and failed miserably lol. Anyways:

e_step ttable (fsentence, esentence) (counts, totals) =
  let
    ewords = {-# SCC "ewords" -#} T.words esentence
    fwords = {-# SCC "fwords" -#} T.words fsentence
    -- calculate s-total(e) map

    sTotal = {-# SCC "sTotal" -#} foldr (update_sTotal fwords) M.empty
ewords
    update_sTotal fwords e sTotal = {-# SCC "update_sTotal" -#}
      foldr (\f sTotal ->
              M.insertWith (+) e (getProb f e ttable) sTotal)
      sTotal fwords
    -- helpers for updating counts

    update_counts counts e f sTotal = {-# SCC "update_counts" -#}
      let !adding = (getProb f e ttable) / (sTotal M.! e)
      in M.insertWith (M.unionWith (+)) f (M.singleton e adding) counts
    update_totals totals e f sTotal = {-# SCC "update_totals" -#}
      let !adding = (getProb f e ttable) / (sTotal M.! e)
      in M.insertWith' (+) f adding totals
  in {-# SCC "folds" -#}
   -- update counts by iterating over words

   foldr (\f (!counts, !totals) ->
           foldr (\e (!counts, !totals) ->
                   let !newCounts = update_counts counts e f sTotal
                       !newTotals = update_totals totals e f sTotal
                   in (newCounts, newTotals))
           (counts, totals) ewords)
   (counts, totals) fwords
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20120216/03972616/attachment.htm>


More information about the Haskell-Cafe mailing list