Table of Contents

Software management

Considerations

  1. Find a suitable location and directory structure for serveral versions of the same library/code
  2. Manage the user environment to be able to access the correct version automatically
  3. Manage different software stacks, e.g. use different compiler(-version) or different library versions to build another library (–> 1.)

Location of compiled software

mountpoint
└── processor architecture
    │
    └── glibc (C-library) of OS
        │   
        └── processor type
            │   
            └──program name
               │   
               └──program version
/opt/sw
└── x86_64
    │   
    └── glibc-2.17
        │   
        └── ivybridge-ep
            │   
            └──hdf5
               │   
               └──1.8.18-MPI

Details of hdf5/1.8.18-MPI

tree -d -L 5 /opt/sw/x86_64/glibc-2.17/ivybridge-ep/hdf5/1.8.18-MPI
/opt/sw/x86_64/glibc-2.17/ivybridge-ep/hdf5/1.8.18-MPI
├── gcc
│   └── 5.3
│       └── intel-mpi
│           └── 5
│               ├── bin
│               ├── include
│               ├── lib
│               └── share
└── intel
    ├── 15
    │   └── intel-mpi
    │       └── 5
    │           ├── bin
    │           ├── include
    │           ├── lib
    │           └── share
    ├── 16
    │   └── intel-mpi
    │       └── 5
    │           ├── bin
    │           ├── include
    │           ├── lib
    │           └── share
    └── 17
        └── intel-mpi
            └── 2017
                ├── bin
                ├── include
                ├── lib
                └── share

Software used for compiling is reflected in the directory structure

Environment Modules


module avail
ls /opt/sw/Modules/Libraries/hdf5
1.6.10  1.8.14      1.8.14-SERIAL  1.8.18      1.8.18-SERIAL
1.8.12  1.8.14-MPI  1.8.16         1.8.18-MPI

module load <modulename>
[markus@l33 ~]$ module load hdf5/1.8.18-MPI

You are not meeting the prereq of this module. Currently loaded modules:
None

The following modules combinations can be loaded:
(1): module load intel/15 intel-mpi/5 hdf5/1.8.18-MPI
(2): module load intel/16 intel-mpi/5 hdf5/1.8.18-MPI
(3): module load gcc/5.3 intel-mpi/5 hdf5/1.8.18-MPI
(4): module load intel/17 intel-mpi/2017 hdf5/1.8.18-MPI

Do copy and paste:

module load intel/16 intel-mpi/5 hdf5/1.8.18-MPI

module list

module purge 
module remove <modulename> <modulename> ...

module show  <modulename>
module show hdf5/1.8.18-MPI
/opt/sw/Modules/Libraries/hdf5/1.8.18-MPI:

conflict         hdf5 
setenv           VSC_HDF5_ROOT      /opt/sw/x86_64/glibc-2.17/ivybridge-ep/hdf5/1.8.18-MPI/intel/16/intel-mpi/5 

prepend-path     CPATH                  $VSC_HDF5_ROOT/include 
prepend-path     INCLUDE                $VSC_HDF5_ROOT/include 
setenv           VSC_HDF5_INCLUDE       $VSC_HDF5_ROOT/include 

prepend-path     LD_LIBRARY_PATH        $VSC_HDF5_ROOT/lib 
prepend-path     LIBRARY_PATH           $VSC_HDF5_ROOT/lib 
setenv           VSC_HDF5_LIB           $VSC_HDF5_ROOT/lib 

prepend-path     PATH                   $VSC_HDF5_ROOT/bin 
setenv           VSC_HDF5_BIN           $VSC_HDF5_ROOT/bin 

setenv           VSC_HDF5_VERSION_MAJOR 1 
setenv           VSC_HDF5_VERSION_MINOR 8 
setenv           VSC_HDF5_VERSION_MICRO 18-MPI 
setenv           VSC_HDF5_VERSION 1.8 
-------------------------------------------------------------------

Exercises

env
env |grep PATH
echo $PATH |tr ':' '\n'
echo $LD_LIBRARY_PATH |tr ':' '\n'
echo $MODULEPATH |tr ':' '\n'
tree -d /opt/sw/x86_64/glibc-2.17/ivybridge-ep/hdf5
module avail
module load hdf5/1.8.18-MPI #follow instructions in shell!
module list 
module show hdf5/1.8.18-MPI
module purge

Adding own gnuplot module

mkdir ${HOME}/mymodules
mkdir ${HOME}/mymodules/gnuplot
export MODULEPATH=${HOME}/mymodules:$MODULEPATH
#%Module
set inst_base $env(HOME)/mysoftware/gnuplot/5.0.5

prepend-path PATH $inst_base/bin
prepend-path LD_LIBRARY_PATH $inst_base/lib
append-path CPATH $inst_base/include
setenv MYVAR test1234

Exercises

module avail 2>&1  | less #search for gnuplot; use '/' within less for searching
module load gnuplot/5.0.5
module show gnuplot/5.0.5

Simple example

eg. from HDF5:

EXAMPLE=$VSC_HDF5_ROOT/share/hdf5_examples/c/ph5example.c

Compile using Intel C Compiler (file):

module purge
module load intel/16 \
    intel-mpi/5 hdf5/1.8.18-MPI

cp $EXAMPLE .
mpiicc -lhdf5 ph5example.c -o ph5example

Compile using Gnu C Compiler (file):

module purge
module load gcc/5.3 \
    intel-mpi/5 hdf5/1.8.18-MPI

cp $EXAMPLE .
mpicc -lhdf5 ph5example.c -o ph5example

If needed add e.g. include directory explicitly:

mpiicc -I$VSC_HDF5_INCLUDE -lhdf5 ph5example.c -o ph5example

Compiler names

Hint: