<br><br><div class="gmail_quote">On Mon, Aug 16, 2010 at 9:00 AM, Sebastian Fischer <span dir="ltr">&lt;<a href="mailto:sebf@informatik.uni-kiel.de">sebf@informatik.uni-kiel.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
[CC-ing café again]<div class="im"><br>
<br>
On Aug 16, 2010, at 5:52 PM, Daniel Fischer wrote:<br>
<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

I am a bit concerned about the memory usage.<br>
</blockquote>
<br></div>
Of your implementation of the matrix power algorithm?<br>
</blockquote>
<br>
Yes.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Making the fields of Matrix strict should help:<br>
<br>
data Matrix a = Matrix !a !a !a<br>
</blockquote>
<br>
<br>
Making all fields strict makes memory usage worse. When making only the first field strict, memory usage hardly differs (from the current implementation without strictness annotations).</blockquote><div><br></div><div>That&#39;s interesting.  So next I would use heap profiling to find out where and what type of data the calculation is using.  I would do heap profiling and look at the types.  The strictness above should when there are lots of thunks in memory for computing the values in the Matrix.</div>
<div><br></div><div>To get started at this task, I recommend the chapter on performance from Real-World Haskell:</div><div><a href="http://book.realworldhaskell.org/read/profiling-and-optimization.html">http://book.realworldhaskell.org/read/profiling-and-optimization.html</a></div>
<div><br></div><div>I&#39;d love to hear what you learn as I probably won&#39;t have time to poke at it.</div><div><br></div><div>Jason</div></div>