blob: 3c354f03c606053a7e1c8d049fcce5536f8f8af7 [file] [log] [blame]
<!--#include virtual="header.txt"-->
<h1><a name="top">Plane distribution: <i>-m plane=plane_size</i></a></h1>
<p>The plane distribution allocates tasks in blocks of size
<i>plane_size</i> in a round-robin fashion across allocated nodes.
<p>To specify the plane distribution add to the srun command line
<i>--distribution=plane=plane_size</i> or <i>-m plane=plane_size</i>
where <i>plane_size</i> is the requested plane/block size.
<h2 id="Examples">Examples of plane distributions
<a class="slurm_link" href="#Examples"></a>
</h2>
<p>In the examples below we assume we have 21 tasks and that the
task list is: 0, 1, 2, 3, 4, ..., 19, 20.
<p>On <u>one (1)</u> node: <i>srun -N 1-1 -n 21 -m plane=4 <...></i>.
<p>Even though the user specified a <i>plane_size</i> of 4 the final plane
distribution results in a <i>plane_size</i> of 21, since all the tasks landed
on one node.
<p>
<center>
<img src="plane_ex1.gif">
<p>Figure 1: Process layout for <i>srun -N 1-1 -n 21 -m plane=4 <...></i>
</center>
<br>
<p>On <u>four (4)</u> nodes: <i>srun -N 4-4 -n 21 -m plane=4 <...></i>.
<p>The plane distribution with a <i>plane_size</i> of 4 results in the
following allocation of the task ids:
<p>
<center>
<img src="plane_ex2.gif">
<p>Figure 2: Process layout for <i>srun -N 4-4 -n 21 -m plane=4 <...> </i>
</center>
<br>
<p>On <u>four (4)</u> nodes: <i>srun -N 4-4 -n 21 -m plane=2 <...>
</i>.
<p>The plane distribution with a <i>plane_size</i> of 2 results in the
following allocation of the task ids:
<p>
<center>
<img src="plane_ex3.gif">
<p>Figure 3: Process layout for <i>srun -N 4-4 -n 21 -m plane=2 <...></i>
</center>
<h2 id="Distribution">Plane distribution and task affinity
<a class="slurm_link" href="#Distribution"></a>
</h2>
<p>The concept behind this distribution is to divide the clusters into
planes. Each plane includes a number of the lowest level of logical
processors (CPU, cores, threads depending on the architecture) on each
node. We then schedule within each plane first and then across planes.
<p>We ensure that the processes are located correctly by setting the
process affinity to the specified/appropriate logical processor. Process
affinity is available in Slurm when the task/affinity plug-in is
enabled.
<p>On a dual-processor node with quad-core processors (see figure 4)
the plane distribution results in:
<ul>
<li>One plane if the <i>plane_size=8</i>. In this case the processors are
scheduled by first filling up the nodes and then scheduled across the
nodes.</li>
<li>Eight planes if the <i>plane_size=1</i>. In this case we would always
schedule across the node first.</li>
</ul>
<p>
<center>
<img src="plane_ex4.gif">
<p>Figure 4: Quad-core dual-processor system
</center>
<br>
<p>In a multi-core/hyper-threaded environment, two planes would
provide better locality but potentially more contention for other
resources.
<p>On the other hand, four planes (scheduling across processors) would
minimize contention for cache and memory.
<h2 id="Affinity">Examples of plane distributions with process affinity enabled
<a class="slurm_link" href="#Affinity"></a>
</h2>
<p>In the examples below we assume we have 21 tasks and that the
task list is: 0, 1, 2, 3, 4, ..., 19, 20.
<p>On <u>one (1)</u> node:
<i>srun -N 1-1 -n 21 -m plane=4 --cpu-bind=core <...></i>.
Even though the user specified a <i>plane_size</i> of 4 the final plane
distribution results in a plane distribution with <i>plane_size=8</i>.
<p>
<center>
<img src="plane_ex5.gif">
<p>Figure 5: Process layout for
<i>srun -N 1-1 -n 21 -m plane=4 --cpu-bind=core <...></i>.
</center>
<br>
<p>On <u>four (4)</u> nodes:
<i>srun -N 4-4 -n 21 -m plane=4 --cpu-bind=core <...></i>.
The plane distribution with a <i>plane_size</i> of 4 results in the
following allocation of the task ids:
<p>
<center>
<img src="plane_ex6.gif" width=600>
<p>Figure 6: Process layout for
<i>srun -N 4-4 -n 21 -m plane=4 --cpu-bind=core <...></i>.
</center>
<br>
<p>On <u>four (4)</u> nodes:
<i>srun -N 4-4 -n 21 -m plane=2 --cpu-bind=core <...>
</i>. The plane distribution with a <i>plane_size</i> of 2 results in the
following allocation of the task ids:
<p>
<center>
<img src="plane_ex7.gif" width=600>
<p>Figure 7: Process layout for
<i>srun -N 4-4 -n 21 -m plane=2 --cpu-bind=core <...></i>.
</center>
<br>
<p style="text-align:center;">Last modified 22 April 2021</p>
<!--#include virtual="footer.txt"-->