Hello all:<br><br>I found my leak after adding some bang patterns in a different part of the program. The compiler was generating all the combinations of the list comprehensions and therefore the performance dropped very badly. <br>
<br>BTW, hamming is 2 times faster than hamming2. <br><br>Thank you as always!<br><br>Arnoldo<br><br><div class="gmail_quote">On Mon, Apr 19, 2010 at 5:53 PM, Arnoldo Muller <span dir="ltr">&lt;<a href="mailto:arnoldomuller@gmail.com">arnoldomuller@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hello Daniel:<br><br>My % GC time is : 75.0%  (81.4% elapsed) and I am compiling with -O2. <br>
Thank you for clarifying about the pointers.<br><br>Slowly my memory grows up and eventually it explodes. I would expect that the list comprehension is lazily evaluated and therefore at any given time I am only executing one hamming distance. The result of the hamming distance is stored into a small statistics datatype I built (only stores sums and sum of squares and the counts). This datatype is updated using a foldr.<br>

<br>I have no idea where the leak is. What do you see in a .prof file to find a leak (hamming distance has the largest amount of time and %alloc)  ? From my .prof file where would you start looking at?<br><br><br>Best Regards,<br>
<font color="#888888">
<br>Arnoldo Muller</font><div><div></div><div class="h5"><br><br><br><br><div class="gmail_quote">On Mon, Apr 19, 2010 at 3:18 AM, Daniel Fischer <span dir="ltr">&lt;<a href="mailto:daniel.is.fischer@web.de" target="_blank">daniel.is.fischer@web.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Am Montag 19 April 2010 01:03:14 schrieb Arnoldo Muller:<br>
<div><div></div><div>&gt; Hello all:<br>
&gt;<br>
&gt; I want to generate some hamming distance statistics about a set of<br>
&gt; strings. As explained in another e-mail in this list, I used the<br>
&gt; following code to call the<br>
&gt; functions:<br>
&gt; (exampl holds the list of strings of size w)<br>
&gt; filter (\x -&gt; x /= 0) $ map (uncurry hammingX) [(xs, ys) | xs &lt;- exampl,<br>
&gt; ys &lt;- exampl]<br>
&gt;<br>
&gt; I have two hamming functions:<br>
&gt; -- hamming distance for variable length strings<br>
&gt; hamming :: String -&gt; String -&gt; Int<br>
&gt; hamming x y = hamming&#39; x y 0<br>
&gt;     where<br>
&gt;       hamming&#39; [] _ !c = c<br>
&gt;       hamming&#39; _ [] !c = c<br>
&gt;       hamming&#39; (x:xs) (y:ys) !c<br>
&gt;           | x == y = hamming&#39; xs ys c<br>
&gt;           | otherwise = hamming&#39; xs ys (c + 1)<br>
&gt;<br>
&gt; -- function posted in this mailing list<br>
&gt; hamming2 :: String -&gt; String -&gt; Int<br>
&gt; hamming2 xs ys = length (filter not (zipWith (==) xs ys))<br>
&gt;<br>
&gt; I am executing these functions millions of times and the bottleneck of<br>
&gt; my program is in them as explained by running in profiling mode with<br>
&gt; +RTS -K400M -p -RTS<br>
&gt;<br>
&gt; The costlier function is the hamming distance<br>
&gt; COST CENTRE                    MODULE               %time %alloc<br>
&gt;<br>
&gt; hamming                        Distances             66.6   41.9<br>
&gt;<br>
&gt; It says that it is performing 41% of the allocations. In the case of<br>
&gt; hamming2 the allocations go as far as 52%.<br>
<br>
</div></div>Allocations are cheap, so that&#39;s not necessarily a problem. More important<br>
is, what&#39;s the maximum residency and how much is copied during GC?<br>
Are you compiling with -O2 ?<br>
<div><br>
&gt; I could understand that<br>
&gt; there are allocations in &quot;hamming2&quot; because we are creating pairs, but<br>
&gt; in the case of &quot;hamming&quot; there should be no allocation.<br>
<br>
</div>Why not? I don&#39;t know how GHC counts allocations, but everytime you go from<br>
(x:xs) to xs, you need a new pointer to the tail. If that counts as<br>
allocation, hamming must allocate a lot, too.<br>
<div><div></div><div><br>
&gt;<br>
&gt; How can I execute my hamming functions without allocating memory?<br>
&gt;<br>
&gt; Best regards,<br>
&gt;<br>
&gt; Arnoldo Muller<br>
<br>
</div></div></blockquote></div><br>
</div></div></blockquote></div><br>