[torquedev] [Bug 93] Resource management semantics of Torque need to be well defined

Martin Siegert siegert at sfu.ca
Tue Dec 7 11:08:51 MST 2010

On Mon, Dec 06, 2010 at 06:38:38PM -0500, Michel Béland wrote:
> >> The fact of the matter is that ppn hasn't been clearly defined over time, and
> >> what it has become in practice is probably best described as processes per
> >> node.
> > 
> > Describing it as "processes per node" is very misleading and completely
> > inaccurate.  Take for example a multi-threaded program.  I routinely run
> > multi-threaded code on our cluster.  We have 32 cores per node, and if I run a
> > _single process_ that uses 32 threads, I request ppn=32.  If that meant
> > _processes_ I would request ppn=1 because, after all, my mult-threaded program
> > is still a single process. It is, however, using multiple-cores.
> > 
> > virtual processor per node is the correct definition of ppn - the number of
> > virtual processors will typically be set to the total number of cores on a
> > node. redefining it as processes per node will lead to problems.
> The fact that Torque generates a $PBS_NODEFILE containing one line per 
> virtual processor seems to support the conclusion that ppn means virtual 
> processors. But I have always considered this behaviour broken since it 
> does not work well with programs that use MPI *and* OpenMP. Back in the 
> days when I used PBS Pro 5.3, I liked what they implemented to submit a 
> job like this. You could ask for example -lnodes=10:ppn=2:cpp=4 to get 
> 10 nodes with 2 processes per node and 4 CPUs per process. Then PBS Pro 
> would generate a $PBS_NODEFILE containing all the nodes repeated twice 
> (because of ppn=2) and also set the environment variables NCPUS and 
> OMP_NUM_THREADS to 4. With this, it would really allocate 8 virtual 
> processors per node (ppn*cpp). With Torque, you have to fiddle with 
> $PBS_NODEFILE to make it work with hybrid parallel programs.
> True enough, PBS Pro did not preclude running more processes than 
> requested, but ppn meant processes per node (at least in the restricted 
> MPI sense) and that is what the documentation said.

And this is what makes me shudder: redefining ppn to mean "processes
per node" instead of the current meaning of (virtual) "processors
per node". I have a strong objection towards that redefinition - this
has the potential of breaking many sites.
I recognize that if this syntax is implemented such that the default
for cpp is 1, then this reverts back to the existing syntax.
Thus, it may not be so bad. I am worried though.

> Later, they introduced -lselect and deprecated -lnodes altogether. Now 
> one can ask for -lselect=10:ncpus=8:mpiprocs=2:ompthread=4 to get the 
> same result, if I remember correctly, but I think that I liked ppn and 
> cpp better...

I do like the -lselect syntax in principle as long as can be
introduced as an alternative to the -l nodes=x:ppn=y syntax.
A few comments: I do not mind to use "ncpus", but others might:
ncpus has a long history and I do not know whether anybody is still
using it. In my opinion it is mostly broken, thus reusing "ncpus"
for something else is not a big deal.
I do not like "mpiprocs" and "ompthread": there can be "procs" and
"threads" other than "mpi" and "omp". We can use "threads" instead
of "ompthread", but we cannot use "procs" instead of "mpiprocs" -
that is taken already. Maybe we could use "nprocs" instead?

(and no: we haven't used PBS Pro for ages, thus for us there is
absolutely no need to introduce a new syntax that is "PBS Pro
compliant"; it is much more important that submission scripts that
work now will work in the future in the same way).

- Martin

Martin Siegert
Head, Research Computing
WestGrid/ComputeCanada Site Lead
IT Services                                phone: 778 782-4691
Simon Fraser University                    fax:   778 782-4242
Burnaby, British Columbia                  email: siegert at sfu.ca
Canada  V5A 1S6

More information about the torquedev mailing list