<br><br><div class="gmail_quote">On Sat, Mar 27, 2010 at 12:43 AM, Rafael Almeida <span dir="ltr">&lt;<a href="mailto:almeidaraf@gmail.com">almeidaraf@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div></div><div class="h5">On Fri, Mar 26, 2010 at 6:49 PM, Jason Dagit &lt;<a href="mailto:dagit@codersbase.com">dagit@codersbase.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Fri, Mar 26, 2010 at 2:33 PM, Bryan O&#39;Sullivan &lt;<a href="mailto:bos@serpentine.com">bos@serpentine.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On Fri, Mar 26, 2010 at 10:46 AM, Rafael Cunha de Almeida<br>
&gt;&gt; &lt;<a href="mailto:almeidaraf@gmail.com">almeidaraf@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; During a talk with a friend I came up with two programs, one written in<br>
&gt;&gt;&gt; C and another in haskell.<br>
&gt;&gt;<br>
&gt;&gt; Your Haskell code builds a huge thunked accumulator value, so of course<br>
&gt;&gt; it&#39;s slow (put bang patterns on all arguments). Also, you should use rem<br>
&gt;&gt; instead of mod. Make those tiny changes and you&#39;ll get a 5x speedup, to half<br>
&gt;&gt; the performance of the C code.<br>
&gt;<br>
&gt; Interesting.  I had to add -fvia-C to get within half the performance of C.<br>
&gt; Just bang patterns and rem and I&#39;m 1/5th of C.  I&#39;m on a x86_64 machine.  I<br>
&gt; wonder if that plays in.<br>
&gt;<br>
&gt; Jason<br>
&gt;<br>
<br>
</div></div>Using bang patterns didn&#39;t help almost anything here. Using rem<br>
instead of mod made the time go from 45s to 40s. Now, using -fvia-C<br>
really helped (when I used rem but not using mod). It went down to<br>
10s.<br></blockquote><div><br></div><div>It&#39;s worth pointing out that there&#39;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&#39;s a strictness analysis bug, or some very interesting effects from shifting the order of forcing of strict variables.</div>
<div><br></div><div>Putting in bang patterns is a good idea to plug the obvious space leak when run without optimization, but isn&#39;t going to make a difference for optimizing compilation of obviously-strict functions.</div>
<div><br></div><div>-Jan-Willem Maessen</div><div> </div></div>