HybridX on P7
You can have two different approaches when using HybridX on P7 cluster.
- Using OpenMPI
- Using PE - Parallel environment from IBM
It has been observed that OpenMPI runs only on a single node due to an InfiniBand issue. If you plan to use 1 node jobs you can follow the instructions below:
How to compile HybridX using OpenMPI
Following script assumes HybridX code is located under "$HOME/HybridCode". It compiles the package using GCC-4.8 and OpenMPI-1.6.5 and installs it to the "build-p7/install" directory inside the HybridX. See script below and modify if you want make changes:
#!/bin/sh
# Load modules
module load gcc/4.8.1 cmake/2.8.8 openmpi/1.6.5-gcc
# Package details
base=/$HOME/HybridCode
pkg=HybridX
cd $base/$pkg
# Variables for installation
src=$base/$pkg
bld=$base/$pkg/build-p7
# Start from scratch each time when this script is executed
rm -rf $bld
mkdir -p $bld
cd $bld
# Run cmake
cmake $src
# cmake -DBOOST_ROOT=${SCINET_BOOST_DIR} $src
# Compile and install
gmake
gmake install
When the compilation is completed successfully, you should be able to find HybridX executable under the "$HOME/HybridCode/HybridX/build-p7/install/bin". Using the binary executable, you can run HybridX simulations. Please see following job script:
#!/bin/bash
##===================================
## P7 Load Leveler Submission Script
##===================================
##
## Don't change these parameters unless you really know what you are doing
##
##@ environment = MP_INFOLEVEL=0; MP_USE_BULK_XFER=yes; MP_BULK_MIN_MSG_SIZE=64K; \
## MP_EAGER_LIMIT=64K; MP_DEBUG_ENABLE_AFFINITY=no
##
##===================================
## Avoid core dumps
## @ core_limit = 0
##===================================
## Job specific
##===================================
#
# @ job_name = hybridx-isotropic
# @ job_type = parallel
# @ class = verylong
# @ output = $(jobid).out
# @ error = $(jobid).err
# @ wall_clock_limit = 01:00:00
# @ node = 1
# @ tasks_per_node = 128
# @ queue
#
#===================================
# Load modules
module purge
module load gcc/4.8.1
module load openmpi/1.6.5-gcc
# HybridX folders
export hybrid_root=$HOME/HybridCode/HybridX/build-p7/install
export hybrid_bin=${hybrid_root}/bin
export hybrid_run=$HOME/HybridCode/run
# Go to case folder
cd $hybrid_run/isotropic-p7
mpirun -np 128 ${hybrid_bin}/Hybrid -i isotropic.input 2>&1 | tee log.hybridx.isotropic
How to compile HybridX using PE
This is very similar to using OpenMPI except a few things. Make the following modifications to your compilation script given above:
#!/bin/sh # Load modules module load gcc/4.8.1 cmake/2.8.8 pe/1.2.0.9 # Keep different env binaries in different directories bld=$base/$pkg/build-p7-pe # For parallel environment on P7 export CXXFLAGS="-cpp" export LDFLAGS="-Wl,--allow-multiple-definition"
Rest of the compilation should be the same as before. If you can compile successfully, you can use the job script:
#!/bin/bash
##===================================
## P7 Load Leveler Submission Script
##===================================
##
## Don't change these parameters unless you really know what you are doing
##
##@ environment = MP_INFOLEVEL=0; MP_USE_BULK_XFER=yes; MP_BULK_MIN_MSG_SIZE=64K; \
## MP_EAGER_LIMIT=64K; MP_DEBUG_ENABLE_AFFINITY=no
##
##===================================
## Avoid core dumps
## @ core_limit = 0
##===================================
## Job specific
##===================================
#
# @ job_name = hybridx-isotropic
# @ job_type = parallel
# @ class = verylong
# @ output = $(jobid).out
# @ error = $(jobid).err
# @ wall_clock_limit = 01:00:00
# @ node = 4
# @ tasks_per_node = 32
# @ queue
#
#===================================
# Load modules
module purge
module load gcc/4.8.1 pe/1.2.0.9
# HybridX folders
export hybrid_root=$HOME/HybridCode/HybridX/build-p7-pe/install
export hybrid_bin=${hybrid_root}/bin
export hybrid_run=$HOME/HybridCode/run
# Go to case folder
cd $hybrid_run/isotropic-p7
mpiexec -n 128 ${hybrid_bin}/Hybrid -i isotropic.input 2>&1 | tee log.hybridx.isotropic
Notes:
- P7 processors support 4 threads per core, so you can increase the number of tasks accordingly.
- Scheduler is the same as Blue Gene, LoadLeveler, so same commands apply; such as llq, llsubmit, llcancel etc.
- LoadLeveler writes results to an output file specified in the job details so you don't need the tee command given in the example above.
- P7 cluster shares the same file-system with Blue Gene so be careful with that.