|
Hpc /
Compiling and Running QE @ FERMI CINECAInstall instruction are reported in the install directory. Detailed instructions:
module purge module load bgq-xl/1.0 module load essl/5.1 module load lapack/3.4.1--bgq-xl--1.0 module load scalapack/2.0.2--bgq-xl--1.0 module load mass/7.3--bgq-xl--1.0 export BLAS_LIBS="-L$ESSL_LIB -lesslsmpbg" export LAPACK_LIBS=$LAPACK_LIB/liblapack.a export SCALAPACK_LIBS=$SCALAPACK_LIB/libscalapack.a ./configure --enable-openmp --with-scalapack --with-elpa
DFLAGS = -D__XLF -D__LINUX_ESSL -D__MASS -D__MPI -D__PARA -D__SCALAPACK -D__OPENMP -D__ELPA FDFLAGS = -D__XLF,-D__LINUX_ESSL,-D__MASS,-D__MPI,-D__PARA,-D__SCALAPACK,-D__OPENMP,-D__ELPA
LD = /bgsys/drivers/ppcfloor/comm/xl.ndebug/bin/mpixlf90_r
#!/bin/bash # @ job_type =serial # @ job_name = serial.$(jobid) # @ output = $(job_name).out # @ error = $(job_name).err # @ wall_clock_limit = 0:25:00 # @ class = serial # @ queue cd /gpfs/scratch/userexternal/pbonfa00/QE5/espresso-5.0.2 module load bgq-xl/1.0 module load essl/5.1 module load lapack/3.4.1--bgq-xl--1.0 module load scalapack/2.0.2--bgq-xl--1.0 module load mass/7.3--bgq-xl--1.0 make clean make pw 1>makejob.log 2>makejob.err cd flib mpixlf90_r -qalias=noaryovrlp:nointptr -O2 -qstrict -qdpc=e -qsuffix=cpp=f90 -WF,-D__XLF,-D__FFTW,-D__MASS,-D__MPI,-D__PARA,-D__SCALAPACK,-D__OPENMP -I../include -I../iotk/src -I../Modules -I. -c functionals.f90 1>>makejob.log 2>>makejob.err cd .. make pw 1>>makejob.log 2>>makejob.err
Fast & Furious version of the above:
#!/bin/bash # @ job_type =serial # @ job_name = serial.$(jobid) # @ output = $(job_name).out # @ error = $(job_name).err # @ wall_clock_limit = 0:25:00 # @ class = serial # @ queue cd /gpfs/scratch/userexternal/pbonfa00/QE5/espresso-5.0.2 module load bgq-xl/1.0 module load essl/5.1 module load lapack/3.4.1--bgq-xl--1.0 module load scalapack/2.0.2--bgq-xl--1.0 module load mass/7.3--bgq-xl--1.0 make distclean ./configure --enable-openmp --with-scalapack --with-elpa 1>configure.log 2>configure.err make pw 1>makejob.log 2>makejob.err echo "===================" >> makejob.log echo "== ENTERING flib ==" >> makejob.log echo "===================" >> makejob.log cd flib mpixlf90_r -qalias=noaryovrlp:nointptr -O2 -qstrict -qdpc=e -qsuffix=cpp=f90 -WF,-D__XLF,-D__FFTW,-D__MASS,-D__MPI,-D__PARA,-D__SCALAPACK,-D__OPENMP -I../include -I../iotk/src -I../Modules -I. -c functionals.f90 1>>../makejob.log 2>>../makejob.err cd .. echo "====================" >> makejob.log echo "== DONE WITH flib ==" >> makejob.log echo "====================" >> makejob.log make pw 1>>makejob.log 2>>makejob.err
Running jobs through Load LevelerSimple Load Leveler script
# @ job_type = bluegene
# @ job_name = lfao_t1
# @ initialdir = .
# @ output = $(job_name).$(jobid).out
# @ error = $(job_name).$(jobid).err
# @ wall_clock_limit = 1:30:00
# @ bg_size = 128
# @ account_no = ***
# @ queue
module load bgq-xl/1.0
module load essl/5.1
module load lapack/3.4.1--bgq-xl--1.0
module load scalapack/2.0.2--bgq-xl--1.0
module load mass/7.3--bgq-xl--1.0
QE_HOME=/where/you/compiled/QE5/espresso-5.0.2/
export WORKDIR=/gpfs/scratch/userexternal/someuser/QE/compound/
export BINDIR=$QE_HOME/bin
export TASKS=512
# Set the number of MPI task x node
export TASK_PER_NODE=4
# Set the number of threads x node
export THREADS=4
# Set the number of NPOOL. As a role I suggest using NPOOL=Number of K-points
export NPOOL=2
# Set the number of group to run FFT3D over G-vectors in parallel among bands. The number of MPI processes involved in each 3DFFT is equal to TASKS/NPOOL/NTG
export NTG=8
# Set the MPI processing that will to perform eigen-solvers problem using scalapack
export NDIAG=256
export INPUT_FILE=$WORKDIR/input.in
export OUTPUT_FILE=$WORKDIR/test-ELPA-bgq_${TASKS}mpi_.${TASK_PER_NODE}mpixnode.${THREADS}ths.${NPOOL}npool.${NTG}ntg.${NDIAG}ndiag.out.full.fermi
runjob --np $TASKS --ranks-per-node $TASK_PER_NODE --envs OMP_NUM_THREADS=$THREADS --exe $BINDIR/pw.x --args -npool --args $NPOOL --args -ntg --args $NTG --args -ndiag --args $NDIAG --args -input --args $INPUT_FILE > $OUTPUT_FILE
subblock job script:
#!/bin/bash
# @ job_type = bluegene
# @ job_name = lfao_t1
# @ initialdir = .
# @ output = $(job_name).$(jobid).out
# @ error = $(job_name).$(jobid).err
# @ wall_clock_limit = 0:29:00
# @ bg_size = 64
# @ account_no = ***
# @ queue
### Useful functions
# Prints $1 times $2
# example: NPOOL_L=(`neqparms 4 128`)
neqparms () { for (( i=0; i<$1; i++)); do echo -n "$2 "; done }
### Loads application
module load qe/5.0bgq
# Sets DIRECTORIES
export WORKDIR=/gpfs/scratch/userexternal/auser/adir
export BINDIR=$QE_HOME/bin
#################################################################
### FERMI SECTION
### Please modify only the following variables
#################################################################
export N_SUBBLOCK=4 ### No. of sub-block you want.
### Choose between 2, 4, 8, 16, 32, 64.
module load subblock
source ${SUBBLOCK_HOME}/npart_${N_SUBBLOCK}.txt
#################################################################
### PARAMS
#################################################################
# Fermi params
TASK_L=(256 256 256 256)
TPN_L=(`neqparms 4 16 `)
TH_L=(2 2 4 4)
#QE params
NPOOL_L=(128 128 128 128)
NTG_L=(1 2 1 2)
NDIAG_L=(1 1 1 1)
### Check params
if [ ${#TASK_L[} != $N_SUBBLOCK ] ; then echo "OMG! Wrong number of TASKS in TASK_L array"; exit; fi
if [ ${#TPN_L]} != $N_SUBBLOCK ] ; then echo "OMG! Wrong number of TASKS_Per_NODE in TPN_L array"; exit; fi
if [ ${#TH_L[} != $N_SUBBLOCK ] ; then echo "OMG! Wrong number of THREADS in TH_L array"; exit; fi
if [ ${#NPOOL_L]} != $N_SUBBLOCK ] ; then echo "OMG! Wrong number of NPOOL in NPOOL_L array"; exit; fi
if [ ${#NTG_L[} != $N_SUBBLOCK ] ; then echo "OMG! Wrong number of NTG in NTG_L array"; exit; fi
if [ ${#NDIAG_L]} != $N_SUBBLOCK ] ; then echo "OMG! Wrong number of NDIAG in NDIAG_L array"; exit; fi
for (( i=0; i<${N_PART}; i++ ));
do
# Set the global number of MPI task
export TASKS=${TASK_L[$i]} ### No. of MPI tasks in each sub-block.
# Set the number of MPI task x node
export TASK_PER_NODE=${TPN_L[$i]} ### No. of MPI tasks in each node.
# Set the number of threads x node
export THREADS=${TH_L[$i]}
# Set the number of NPOOL. As a role I suggest using NPOOL=Number of K-points
export NPOOL=${NPOOL_L[$i]}
# Set the number of group to run FFT3D over G-vectors in parallel among bands. The number of MPI processes involved in each 3DFFT is equal to TASKS/NTG
export NTG=${NTG_L[$i]}
# Set the MPI processing that will to perform eigen-solvers problem using scalapack
export NDIAG=${NDIAG_L[$i]}
export INPUT_FILE=$WORKDIR/1.in
export OUTPUT_FILE=$WORKDIR/test_bgq_${TASKS}mpi_.${TASK_PER_NODE}mpixnode.${THREADS}ths.${NPOOL}npool.${NTG}ntg.${NDIAG}ndiag.out.full.fermi
CC=$(($i+1))
runjob --block $BLOCK_ALLOCATED --corner $(n_cor $CC) --shape $SHAPE_SB --np $TASKS \
--ranks-per-node $TASK_PER_NODE \
--envs OMP_NUM_THREADS=$THREADS --exe $BINDIR/pw.x --args -npool --args $NPOOL --args -ntg --args $NTG \
--args -ndiag --args $NDIAG --args -input --args $INPUT_FILE > $OUTPUT_FILE &
done
wait
|