Hi Simon,

things I do to measure performance:

* compile nofib/spectral/simple/Main.hs, look at instructions (perf) and
allocations/time (+RTS -s)
* compile nofib as a whole (Use NoFibRuns=0 to avoid running the
benchmarks). Look at compile time/allocations.
* compile Cabal the library (cd cabal-head/Cabal && ghc Setup.hs
-fforce-recomp). Look at allocations time via +RTS -s or instructions
using perf.
* compile a particular files triggering the case I want to optimize

In general:
Adjust depending on flags you want to look at. If you optimize the
simplifier -O0 will be useless.
If you optimize type-checking -O2 will be pointless. And so on.

In general I only compile as linking adds overhead which isn't really
part of GHC.

Another question regarding performing compiler perf measurements
locally is which build flavour to use: So far I have used the "perf"
flavour. A problem here is that a full build seems to take close to an
hour. A rebuild with --freeze1 takes ~15 minutes on my machine. Is
this the right flavour to use?
Personally I use the quick flavour, freeze stage 1 and configure hadrian
to pass -O to stage2
unless I know the thing I'm working on will benefit significantly from -O2.

That is if I optimize an algorithm -O2 won't really make a difference so
I use -O.
If I optimize a particular hotspot in the implementation of an algorithm
by using
bangs it's worthwhile to look at -O2 as well.

You can also set particular flags for only specific files using
OPTIONS_GHC pragmas.
This way you can avoid compiling the whole of GHC with -O/-O2.

Ideally I wouldn't have to perform these measurements on my local
machine at all! Do you usually use a separate machine for this? _Very_
convenient would be some kind of bot whom I could tell e.g.
I use another machine. Others only look at metrics which are less
affected by system load like allocations.

Ideally I wouldn't have to perform these measurements on my local
machine at all! Do you usually use a separate machine for this? _Very_
convenient would be some kind of bot whom I could tell e.g.
Various people have come up with scripts to automate the measurements on
nofib which get's you
closer to this. I discussed with ben and others a few times in the past
having a wider framework for
collecting compiler performance indicators. But it's a lot of work to
get right and once the immediate
need is gone those ideas usually get shelved again.
BTW what's the purpose of the profiled GHC modules built with this
flavour which just seem to additionally prolong compile time? I don't
see a ghc-prof binary or similar in _build/stage1/bin.
As far as I know if you compile (non-ghc) code using -prof then you will
need the ghc library
available in the prof way. But it would be good to have the option to
disable this.

Also, what's the status of gipeda? The most recent commit at
https://perf.haskell.org/ghc/ is from "about a year ago"?
I think the author stopped maintaining it after he switched jobs. So
it's currently not useful
for investigating performance. But I'm sure he wouldn't object if anyone
were to pick it up.

Cheers Andreas

_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to