
r.kelsall:
Simon Peyton-Jones wrote:
| Something I found with Dons version on my machine was that if I removed | all the exclamation marks and the -fbang-patterns bit at the top it went | about 20% faster as well as being much cleaner code, but with my very | rudimentary understanding of Haskell I wasn't entirely sure it would | produce the same results if I did this and didn't get round to checking.
If, after investigation (and perhaps checking with Don) you find that adding bangs makes your program go slower, even though the function is in fact strict (otherwise it might go slower because it's just doing more work!) then I'd love to see a test case.
Sorry, I don't understand the code, I've jumped in the deep-end before learning to swim, but I can now tell you it's producing the same results when I remove some of the exclamation marks. I've checked with an MD5 on the output.
The timings in seconds for 10,000,000 iterations averaged over 5 runs. (There was quite a bit of variation.) Compiled with GHC 6.6.1. (I got stuck compiling it under 6.8) The fancy compile options are from the shootout page.
Dons original program 13.26 compiled ghc --make Dons original program 12.54 compiled with -O -fglasgow-exts -optc-mfpmath=sse -optc-msse2 -optc-march=pentium4 Removed 3 bangs from rand 11.47 compiled ghc --make Removed 3 bangs from rand 11.57 compiled with -O -fglasgow-exts -optc-mfpmath=sse -optc-msse2 -optc-march=pentium4
The code below is Dons program from
http://shootout.alioth.debian.org/gp4/benchmark.php?test=fasta&lang=ghc&id=0
with a timing function added by me. The rand function is where I removed three exclamation marks to make the program faster. Previously I removed different combinations of bangs. Some bangs seem to make it faster and some seem to make it slower.
There may well have been changes to the strictness analyser that make some of the bangs (or most) unnecessary now. Also, its very likely I didn't check all combinations of strict and lazy arguments for the optimal evaluation strategy :) If it seems to be running consitently faster (and producing better Core code), by all means submit. I don't think this is a ghc bug or anything like that though: just overuse of bangs, leading to unnecessary work. -- Don