<p> PETSc can use threads or the &quot;HMPI&quot; approach. We are in the process of unifying the code for all the threading models, at which point PETSc will be able to use your OpenMP threads.</p>
<p>&gt; On Apr 20, 2012 1:50 PM, &quot;Mohammad Mirzadeh&quot; &lt;<a href="mailto:mirzadeh@gmail.com">mirzadeh@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Thanks Aron. That would work but at the cost of wasting idle cores when threads join and the rest of MPI-based code is running, correct?<br>
&gt;&gt;<br>
&gt;&gt; On Fri, Apr 20, 2012 at 11:44 AM, Aron Ahmadia &lt;<a href="mailto:aron.ahmadia@kaust.edu.sa">aron.ahmadia@kaust.edu.sa</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; If I use, say Np = 16 processes on one node, MPI is running 16 versions of the code on a single node (which has 16 cores). How does OpenMP figure out how to fork? Does it fork a total of 16 threads/MPI process = 256 threads or is it smart to just fork a total of 16 threads/node = 1 thread/core = 16 threads? I&#39;m a bit confused here how the job is scheduled when MPI and OpenMP are mixed? <br>

&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; This is one important use for OMP_NUM_THREADS.   If you&#39;re trying to increase the amount of memory per process, you should map one process per node and set OMP_NUM_THREADS to the number of OpenMP threads you&#39;d like.  There are lots of tutorials and even textbooks now that discuss hybrid programming techniques that you should look to for more information (or you could try <a href="http://scicomp.stackexchange.com">scicomp.stackexchange.com</a>).<br>

&gt;&gt;&gt;<br>
&gt;&gt;&gt; Cheers,<br>
&gt;&gt;&gt; Aron<br>
&gt;&gt;<br>
&gt;&gt;<br>
</p>