On Sat, Mar 27, 2010 at 12:43 AM, Rafael Almeida <[email protected]>wrote:
> On Fri, Mar 26, 2010 at 6:49 PM, Jason Dagit <[email protected]> wrote: > > > > > > On Fri, Mar 26, 2010 at 2:33 PM, Bryan O'Sullivan <[email protected]> > > wrote: > >> > >> On Fri, Mar 26, 2010 at 10:46 AM, Rafael Cunha de Almeida > >> <[email protected]> wrote: > >>> > >>> During a talk with a friend I came up with two programs, one written in > >>> C and another in haskell. > >> > >> Your Haskell code builds a huge thunked accumulator value, so of course > >> it's slow (put bang patterns on all arguments). Also, you should use rem > >> instead of mod. Make those tiny changes and you'll get a 5x speedup, to > half > >> the performance of the C code. > > > > Interesting. I had to add -fvia-C to get within half the performance of > C. > > Just bang patterns and rem and I'm 1/5th of C. I'm on a x86_64 machine. > I > > wonder if that plays in. > > > > Jason > > > > Using bang patterns didn't help almost anything here. Using rem > instead of mod made the time go from 45s to 40s. Now, using -fvia-C > really helped (when I used rem but not using mod). It went down to > 10s. > It's worth pointing out that there's a bit of bang-pattern mysticism going on in this conversation (which has not been uncommon of late!). A non-buggy strictness analyzer should expose the strictness of these functions without difficulty. If bang patterns make any difference at all with a -O flag, either there's a strictness analysis bug, or some very interesting effects from shifting the order of forcing of strict variables. Putting in bang patterns is a good idea to plug the obvious space leak when run without optimization, but isn't going to make a difference for optimizing compilation of obviously-strict functions. -Jan-Willem Maessen
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
