|
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 |