Initial compile time benchmarks

Michael Sloan mgsloan at gmail.com
Tue Mar 29 22:23:50 UTC 2016


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20160329/b5191c41/attachment-0001.html>


More information about the ghc-devs mailing list