<div>You mentioned: &quot;pthread based Vec and Mat class that lives inside the PETSc MPI world&quot;.  Is this pthreads <strong><em>in lieu of</em></strong> MPI or is it pthreads <strong><em>in addition to</em></strong> MPI?<br>
</div><div><br></div><div>---John</div><br><div class="gmail_quote">On Sun, Jul 10, 2011 at 1:19 PM, Barry Smith <span dir="ltr">&lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><br>
On Jul 9, 2011, at 11:57 PM, John Chludzinski wrote:<br>
<br>
&gt; 1) Since Linux now (as of the 2.6 kernel) supports a 1-to-1<br>
&gt; association/mapping between pthreads (user threads) and kthreads (kernel<br>
&gt; threads), plus the new process scheduler, this makes pthreads much more<br>
&gt; efficient/useful for MIMD parallelism.  I assume this makes a thread-based<br>
&gt; solution (PETSc) more attractive?  When PETSc was first conceived, this was<br>
&gt; not the case.<br>
&gt;<br>
&gt; 2) Since threads can share data (variables), wouldn&#39;t there be less of a<br>
&gt; need to send/receive data than using MPI, which simply spawns separate<br>
&gt; disjoint processes?<br>
&gt;<br>
&gt; 3) &quot;  Vec and Mat class&quot;?  I hope you&#39;re sticking with C (v. C++)?  I&#39;ve<br>
&gt; used G++ version 4.3.4 and version 4.5.2 and got different answers with the<br>
&gt; exact same source.  I have used Visual C++ (2008) and got different answers<br>
&gt; than G++ 4.6.1 - again the same source.  C99 seems to give consistent<br>
&gt; results across compilers/platforms and is simpler to boot.<br>
<br>
</div>    We call them &quot;classes&quot; because they provide encapsulation, polymorphism, and inheritance but yes it will remain C.<br>
<font color="#888888"><br>
   Barry<br>
</font><div><div class="h5"><br>
&gt;<br>
&gt; ---John<br>
&gt;<br>
&gt;<br>
&gt; On Sat, Jul 9, 2011 at 11:41 PM, Barry Smith &lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt;  We have started a pthread based Vec and Mat class that lives inside the<br>
&gt;&gt; PETSc MPI world. We will be pushing it into the petsc-dev repository in the<br>
&gt;&gt; next could of weeks.<br>
&gt;&gt;<br>
&gt;&gt; Notes:<br>
&gt;&gt;<br>
&gt;&gt; 1) Since all the numerical computations take place in the Vec and Mat class<br>
&gt;&gt; those are the ones that need to use pthreads underneath, the other classes<br>
&gt;&gt; like KSP do not.<br>
&gt;&gt; 2) A group in England has developed a OpenMP based Vec and Mat class in the<br>
&gt;&gt; same vain as our pthread version; I&#39;ve been trying without success to get it<br>
&gt;&gt; also into petsc-dev, hopefully I&#39;ll eventually charm them into it.<br>
&gt;&gt; 3) Since sparse iterative solvers are very much memory bandwidth limited<br>
&gt;&gt; (the time to solve is determined by the speed of the memory, not the CPUs)<br>
&gt;&gt; there is only some much one can do to improve performance by throwing more<br>
&gt;&gt; cores (threads) at the problem. For example most cheap desktop systems do<br>
&gt;&gt; not have enough memory bandwidth to support even two cores doing the<br>
&gt;&gt; iterative solver so adding pthreads will only matter on certain (more<br>
&gt;&gt; expensive) systems and is not a &quot;cure all&quot;.  See<br>
&gt;&gt; <a href="http://www.mcs.anl.gov/petsc/petsc-as/documentation/faq.html#computers" target="_blank">http://www.mcs.anl.gov/petsc/petsc-as/documentation/faq.html#computers</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;   Barry<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Jul 9, 2011, at 10:31 PM, John Chludzinski wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; Have you guys considered a pthread based implementation of PETSc/SLEPc.<br>
&gt;&gt;&gt; Have you investigated the use of pthreads?  ---John<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br>