#! /bin/bash echo "Preparing:" set -x # Output commands set -e # Abort on errors cd @RUNDIR@-active module list echo "Checking:" pwd hostname date cat "$PBS_NODEFILE" > SIMFACTORY/NODES || true echo "Environment:" export CACTUS_NUM_PROCS=@NUM_PROCS@ export CACTUS_NUM_THREADS=@NUM_THREADS@ export GMON_OUT_PREFIX=gmon.out export OMP_NUM_THREADS=@NUM_THREADS@ export OPENMPI_DIR=/usr/local/openmpi-1.4.2-intel-11.1 env | sort > SIMFACTORY/ENVIRONMENT echo "Job setup:" echo " Allocated:" echo " Nodes: @NODES@" echo " Cores per node: @PPN@" echo " Running:" echo " MPI processes: @NUM_PROCS@" echo " OpenMP threads per process: @NUM_THREADS@" echo " MPI processes per node: @(1.0*@NUM_PROCS@/@NODES@)@" echo " OpenMP threads per core: @(1.0*(@NUM_PROCS@*@NUM_THREADS@)/(@NODES@*@PPN@))@" echo " OpenMP threads per node: @PPN_USED@" #case '@PPN_USED@:@NUM_THREADS@' in # (12:12|6:6|4:4|3:3|2:2|1:1) options='-npernode 1 -bind-to-none';; # (12:6|6:3|4:2|2:1) options='-npersocket 1 -bind-to-socket';; # (12:3|4:1) options='-npersocket 2 -bind-to-socket';; # (12:2|6:1) options='-npersocket 3 -bind-to-socket';; # (12:1|*) options='-npersocket 6 -bind-to-core';; #esac echo "Starting:" export CACTUS_STARTTIME=$(date +%s) #time $OPENMPI_DIR/bin/mpirun -np @NUM_PROCS@ -num-sockets 2 $options -display-map -report-bindings @EXECUTABLE@ -L 3 @PARFILE@ # Note: This does not work when over- or undersubscribing! bind='@(@NUM_THREADS@ > 6 ? "--bind-to-none --num-cores 12" : "--bind-to-socket")@' time $OPENMPI_DIR/bin/mpirun $bind -np @NUM_PROCS@ -cpus-per-proc @NUM_THREADS@ @EXECUTABLE@ -L 3 @PARFILE@ echo "Stopping:" date echo "Done."