Initial compile time benchmarks

Edward Z. Yang ezyang at mit.edu
Tue Mar 29 22:29:43 UTC 2016


This ticket may be of interest:

https://ghc.haskell.org/trac/ghc/ticket/9630

Deriving costs a lot and we just need someone to figure out what's
going on.

Edward

Excerpts from Michael Sloan's message of 2016-03-29 15:23:50 -0700:
> Great! Thanks for y'all putting effort towards performance. It really is
> crucial
> for developer productivity.
> 
> In the particular case of haskell-src-exts, I found that removing many of
> the
> more complicated typeclasses from deriving (Data, Generics, etc) brought the
> compilation time way down. IIRC it was pretty drastic, like 40 seconds vs 10
> seconds (that could be just the timing for that one types module though, I
> don't recall).  Could be valuable to investigate exactly what's going on
> there.
> 
> -Michael
> 
> On Tue, Mar 29, 2016 at 2:00 PM, Ömer Sinan Ağacan <omeragacan at gmail.com>
> wrote:
> 
> > Hi all,
> >
> > Using Ben's timing patch [^1], Cabal, and a Haskell program to parse
> > generated
> > logs [^2], I generated some tables that show compile times of modules in
> > hxt,
> > haskell-src-exts, lens, and all of their dependencies:
> >
> >
> > https://gist.githubusercontent.com/osa1/fd82335181a584679c9f3200b7b0a8a5/raw/5d46b0e7006c7ef9fae913f7d6932b74c83835f1/gistfile1.txt
> >
> > Some notes:
> >
> > - Modules and passes in modules are sorted.
> >
> > - At the end of the file you can see the cumulative numbers for the
> > passes. In
> >   fact, that's a small table so I'm just going to paste it here:
> >
> >     ======================Total======================
> >     CodeGen                                    41.32%
> >     Simplifier                                 34.83%
> >     Renamer/typechecker                        12.22%
> >     Desugar                                     2.11%
> >     CorePrep                                    1.90%
> >     Demand analysis                             1.44%
> >     CoreTidy                                    1.35%
> >     Called arity analysis                       1.10%
> >     Float inwards                               0.96%
> >     Common sub-expression                       0.87%
> >     Parser                                      0.75%
> >     SpecConstr                                  0.57%
> >     Specialise                                  0.30%
> >     Worker Wrapper binds                        0.17%
> >     Liberate case                               0.12%
> >     ByteCodeGen                                 0.00%
> >     Simplify                                    0.00%
> >
> > I don't know how to make use of this yet, but I thought ghc-devs may find
> > it
> > useful.
> >
> > As a next thing I'm hoping to add some more `withTiming` calls. The analyze
> > program can handle nested `withTiming` calls and renders passes as a tree
> > (GHC
> > HEAD doesn't have nested `withTiming`s so we don't see it in the file
> > above),
> > so we can benchmark things in more details. I also want to experiment a
> > little
> > bit with different `force` parameters to `withTiming`. If anyone has any
> > other
> > ideas I can also try those.
> >
> > ---
> >
> > [^1]: https://phabricator.haskell.org/D1959
> > [^2]: https://github.com/osa1/analyze-ghc-timings
> > _______________________________________________
> > ghc-devs mailing list
> > ghc-devs at haskell.org
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
> >


More information about the ghc-devs mailing list