Initial compile time benchmarks
Ömer Sinan Ağacan
omeragacan at gmail.com
Tue Mar 29 21:00:24 UTC 2016
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
More information about the ghc-devs
mailing list