- Infos im HLRS Wiki sind nicht rechtsverbindlich und ohne Gewähr -
- Information contained in the HLRS Wiki is not legally binding and HLRS is not responsible for any damages that might result from its use -
Batch System PBSPro (Hawk)
The batch system on Hawk TDS is PBSPro 19.2.1. For general usage see the PBS User Guide (19.2.3)
At the moment the setup is basic and it works for the TDS only. More features, testing and productive like setup will be done in July.
Node types
There are two types of nodes installed in the TDS:
- 16 x AMD EPYC Naples (2 x 32 cores each): select with #PBS -l node_type=naples
- 1 x AMD EPYC Rome (2 x 64 cores each): select with #PBS -l node_type=rome
Core order
On Naples nodes, the core id corresponds to hyperthreads and sockets as follows:
core 0 - core 31: hyperthread 0 @ socket 0
core 32 - core 63: hyperthread 0 @ socket 1
core 64 - core 95: hyperthread 1 @ socket 0
core 96 - core 127: hyperthread 1 @ socket 1
Hence, cores 64 to 128 are using the same physical resources as cores 0 to 63! Only use them if you understand the concept of hyperthreads and actually like to use them! If you do not like to use them, start a maximum of 64 threads per node.
Pinning
In case of pure MPI jobs, processes are automatically pinned to cores. In case of hybrid MPI/OpenMP jobs, use omplace to also pin threads (cf. below).
Examples
See
man pbs_resources
regarding available resources (e.g. ncpus, mpiprocs, etc.) and how to specify resources in the job script.
pure MPI job using HPE MPI
Here is a simple pbs job script:
#!/bin/bash #PBS -N Hi_Thomas #PBS -l select=16:node_type=naples:mpiprocs=64 #PBS -l walltime=00:20:00 module load mpi/mpt mpirun ./hi.hpe
To submit the job script execute
pure MPI job using OpenMPI
Here is a simple pbs job script:
#!/bin/bash #PBS -N Hi_Thomas #PBS -l select=16:node_type=naples:mpiprocs=64 #PBS -l walltime=00:20:00 module load mpi/openmpi/4.0.1-gnu-9.1.0 mpirun -np 1024 --map-by core --bind-to core ./hi.hpe
hybrid MPI/OpenMP job using HPE MPI
To run a MPI application with 64 Processes and two OpenMP threads per process on two compute nodes, include the following in the pbs job script:
#!/bin/bash #PBS -N Hi_MPI_OpenMP #PBS -l select=2:node_type=naples:mpiprocs=32:ompthreads=2 #PBS -l walltime=00:20:00 module load mpi/mpt export OMP_NUM_THREADS=2 mpirun -np 64 omplace -nt 2 [-vv] ./hi.mpiomp
The omplace command helps with the placement of OpenMP threads within an MPI program. In the above example, the threads in a 64-process MPI program with two threads per process are placed as follows:
- Rank 0, thread 0 on core 0 of socket 0 on compute node 0
- Rank 0, thread 1 on core 1 of socket 0 on compute node 0
- ...
- Rank 15, thread 1 on core 31 of socket 0 on compute node 0
- Rank 16, thread 0 on core 0 of socket 1 on compute node 0
- ...
- Rank 31, thread 1 on core 31 of socket 1 on compute node 0
- Rank 32, thread 0 on core 0 of socket 0 on compute node 1
- ...
- Rank 63, thread 1 on core 31 of socket 1 on compute node 1
The optional -vv parameter print out the placement of the processes and threads to standard output.
Warning: Due to the limited scaling of the standard output, you should not use the optional parameter -vv for medium and large jobs.
hybrid MPI/OpenMP job using HPE MPI and hyperthreads
The job described before can be run on the same physical resources with twice the number of processes respectively threads by means of hyperthreads as follows:
#!/bin/bash #PBS -N Hi_MPI_OpenMP_HT #PBS -l select=2:node_type=naples:mpiprocs=64:ompthreads=2 #PBS -l walltime=00:20:00 module load mpi/mpt export OMP_NUM_THREADS=2 mpirun -np 128 omplace -nt 2 [-vv] ./hi.mpiomp
Ranks will be placed as follows:
- Rank 0, thread 0 on logical core 0 of core 0 of socket 0 on compute node 0
- Rank 0, thread 1 on logical core 0 of core 1 of socket 0 on compute node 0
- ...
- Rank 15, thread 1 on logical core 0 of core 31 of socket 0 on compute node 0
- Rank 16, thread 0 on logical core 0 of core 0 of socket 1 on compute node 0
- ...
- Rank 31, thread 1 on logical core 0 of core 31 of socket 1 on compute node 0
- Rank 32, thread 0 on logical core 1 of core 0 of socket 0 on compute node 0
- ...
- Rank 63, thread 1 on logical core 1 of core 31 of socket 1 on compute node 0
- Rank 64, thread 0 on logical core 0 of core 0 of socket 0 on compute node 1
- ...
- Rank 127, thread 1 on logical core 1 of core 31 of socket 1 on compute node 1
pure MPI job with stride > 1
If you need to let cores unused, do as follows in order to uniformly distribute processes over cores:
#!/bin/bash #PBS -N Hi_Thomas #PBS -l select=1:node_type=naples:mpiprocs=8 #PBS -l walltime=00:20:00 module load mpi/mpt mpirun -np 8 omplace -c 0-63:st=4 ./hi.hpe
This will start processes on cores 0, 4, 8, etc., i.e. with a stride of 4 (which means having one process per CCX (cf. introduction slides)).