Does anybody have good references in the literature analyzing the memory access patterns for sparse solvers and how they scale?  I remember seeing Barry&#39;s talk about multigrid memory access patterns, but I&#39;m not sure if I&#39;ve ever seen a good paper reference.  <br>
<br>Cheers,<br>Aron<br><br><div class="gmail_quote">On Wed, Nov 18, 2009 at 6:14 PM, Satish Balay <span dir="ltr">&lt;<a href="mailto:balay@mcs.anl.gov">balay@mcs.anl.gov</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;">
Just want to add one more point to this.<br>
<br>
Most multicore machines do not provide scalable hardware. [yeah - the<br>
FPUs cores are scalable - but the memory subsystem is not]. So one<br>
should not expect scalable performance out of them. You should take<br>
the &#39;max&#39; performance you can get out out them - and then look for<br>
scalability with multiple nodes.<br>
<font color="#888888"><br>
Satish<br>
</font><div><div></div><div class="h5"><br>
On Wed, 18 Nov 2009, Jed Brown wrote:<br>
<br>
&gt; <a href="mailto:jarunan@ascomp.ch">jarunan@ascomp.ch</a> wrote:<br>
&gt; &gt;<br>
&gt; &gt; Hello,<br>
&gt; &gt;<br>
&gt; &gt; I have read the topic about performance of a machine with 2 dual-core<br>
&gt; &gt; chips, and it is written that with -np 2 it should scale the best. I<br>
&gt; &gt; would like to ask about 4-core machine.<br>
&gt; &gt;<br>
&gt; &gt; I run the test on a quad core machine with mpiexec -n 1, 2 and 4 to see<br>
&gt; &gt; the parallel scaling. The cpu times of the test are:<br>
&gt; &gt;<br>
&gt; &gt; Solver/Precond/Sub_Precond<br>
&gt; &gt;<br>
&gt; &gt; gmres/bjacobi/ilu<br>
&gt; &gt;<br>
&gt; &gt; -n 1, 1917.5730 sec,<br>
&gt; &gt; -n 2, 1699.9490 sec, efficiency = 56.40%<br>
&gt; &gt; -n 4, 1661.6810 sec, efficiency = 28.86%<br>
&gt; &gt;<br>
&gt; &gt; bicgstab/asm/ilu<br>
&gt; &gt;<br>
&gt; &gt; -n 1, 1800.8380 sec,<br>
&gt; &gt; -n 2, 1415.0170 sec, efficiency = 63.63%<br>
&gt; &gt; -n 4, 1119.3480 sec, efficiency = 40.22%<br>
&gt;<br>
&gt; These numbers are worthless without at least knowing iteration counts.<br>
&gt;<br>
&gt; &gt; Why is the scaling so low, especially with option -n 4?<br>
&gt; &gt; Would it be expected to be better running with real 4 CPU&#39;s instead of a<br>
&gt; &gt; quad core ship?<br>
&gt;<br>
&gt; 4 sockets using a single core each (4x1) will generally do better than<br>
&gt; 2x2 or 1x4, but 4x4 costs about the same as 4x1 these days.  This is a<br>
&gt; very common question, the answer is that a single floating point unit is<br>
&gt; about 10 times faster than memory for the sort of operations that we do<br>
&gt; when solving PDE.  You don&#39;t get another memory bus every time you add a<br>
&gt; core so the ratio becomes worse.  More cores are not a complete loss<br>
&gt; because at least you get an extra L1 cache for each core, but sparse<br>
&gt; matrix and vector kernels are atrocious at reusing cache (there&#39;s not<br>
&gt; much to reuse because most values are only needed to perform one<br>
&gt; operation).<br>
&gt;<br>
&gt; Getting better multicore performance requires changing the algorithms to<br>
&gt; better reuse L1 cache.  This means moving away from assembled matrices<br>
&gt; where possible and of course finding good preconditioners.  High-order<br>
&gt; and fast multipole methods are good for this.  But it&#39;s very much an<br>
&gt; open problem and unless you want to do research in the field, you have<br>
&gt; to live with poor multicore performance.<br>
&gt;<br>
&gt; When buying hardware, remember that you are buying memory bandwidth (and<br>
&gt; a low-latency network) instead of floating point units.<br>
&gt;<br>
&gt; Jed<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br>