===== Modules =====
* **environment**: global variables available to current and all sub-shells (''%%env%%''/''%%set%%'' )
* http://lmod.readthedocs.io/en/latest/010_user.html
* **module**: all modifications (set and prepend to variables) in the user environment necessary for using a piece of software
* handles additional software, which is not installed to default system paths
* makes different versions of one piece of software available
* **prerequisites**: loading a module may require loading other modules before (handled by **module dependency**)
----
===== Modules =====
==== Basic commands ====
module avail
module list
module purge
module load
module unload
module rm
module swap
module show
module whatis
module help
module spider
module help
Modules set paths of environment variables like ''%%PATH%%'', ''%%LD_LIBRARY_PATH%%'', ''%%LIBRARY_PATH%%'', etc. This allows you to select a specific compiler, libraries, or other software versions without having to specify the full path to the files or binaries.
----
===== Modules =====
module avail
* shows available modules.
* searches paths given by ''%%MODULEPATH%%''
* own modules can be added by extending ''%%MODULEPATH%%''
* If multiple modules with the same name/version are present in different directories, the first found by ''%%MODULEPATH%%'' will be used.
----
===== Modules =====
==== Dependencies ====
Software packages often have dependecies on specific versions of a compiler and/or on libraries.\\
E.g. the software ''%%scalapack%%'' has dependencies on the selected MPI and compiler version:
module purge
module avail
------------------ /opt/ohpc/pub/modulefiles ---------------------------------------------
EasyBuild/3.4.1 autotools clustershell/1.8 cmake/3.9.2 gnu/5.4.0 gnu7/7.2.0
hwloc/1.11.8 llvm4/4.0.1 ohpc papi/5.5.1 pmix/1.2.3 prun/1.2 singularity/2.4
valgrind/3.13.0
module load gnu7/7.2.0
module avail
------------------ /opt/ohpc/pub/moduledeps/gnu7 ------------------------------------------
R/3.4.2 gsl/2.4 hdf5/1.10.1 metis/5.1.0 mpich/3.2 mvapich2/2.2 numpy/1.13.1
ocr/1.0.1 openblas/0.2.20 openmpi/1.10.7 openmpi3/3.0.0 pdtoolkit/3.24 plasma/2.8.0
scotch/6.0.4 superlu/5.2.1
------------------ /opt/ohpc/pub/modulefiles ----------------------------------------------
EasyBuild/3.4.1 autotools clustershell/1.8 cmake/3.9.2 gnu/5.4.0 gnu7/7.2.0 (L)
hwloc/1.11.8 llvm4/4.0.1 ohpc papi/5.5.1 pmix/1.2.3 prun/1.2 singularity/2.4
valgrind/3.13
module load openmpi/1.10.7
module avail
----------------- /opt/ohpc/pub/moduledeps/gnu7-openmpi -----------------------------------
petsc/3.7.6 phdf5/1.10.1 scalapack/2.0.2
----------------- /opt/ohpc/pub/moduledeps/gnu7 -------------------------------------------
R/3.4.2 gsl/2.4 hdf5/1.10.1 metis/5.1.0 mpich/3.2 mvapich2/2.2 numpy/1.13.1
ocr/1.0.1 openblas/0.2.20 openmpi/1.10.7 (L) openmpi3/3.0.0 pdtoolkit/3.24 plasma/2.8.0
scotch/6.0.4 superlu/5.2.1
----------------- /opt/ohpc/pub/modulefiles -----------------------------------------------
EasyBuild/3.4.1 autotools clustershell/1.8 cmake/3.9.2 gnu/5.4.0 gnu7/7.2.0 (L)
hwloc/1.11.8 llvm4/4.0.1 ohpc papi/5.5.1 pmix/1.2.3 prun/1.2 singularity/2.4
valgrind/3.13.0
----
===== Modules =====
==== Default modules ====
**No** module are loaded per default.
To check what loading a module will do use ''%%module show %%'':
# module show gnu7/7.2.0
-------------------------------------------------------------------------------------------
/opt/ohpc/pub/modulefiles/gnu7/7.2.0:
-------------------------------------------------------------------------------------------
whatis("Name: GNU Compiler Collection ")
whatis("Version: 7.2.0 ")
whatis("Category: compiler, runtime support ")
whatis("Description: GNU Compiler Family (C/C++/Fortran for x86_64) ")
whatis("URL: http://gcc.gnu.org/ ")
prepend_path("PATH","/opt/ohpc/pub/compiler/gcc/7.2.0/bin")
prepend_path("MANPATH","/opt/ohpc/pub/compiler/gcc/7.2.0/share/man")
prepend_path("INCLUDE","/opt/ohpc/pub/compiler/gcc/7.2.0/include")
prepend_path("LD_LIBRARY_PATH","/opt/ohpc/pub/compiler/gcc/7.2.0/lib64")
prepend_path("MODULEPATH","/opt/ohpc/pub/moduledeps/gnu7")
family("compiler")
help([[
This module loads the GNU compiler collection
See the man pages for gcc, g++, and gfortran for detailed information
on available compiler options and command-line syntax.
Version 7.2.0
]])
----
===== Modules =====
==== Adding your own module ====
* setup your own modules directory and a directory for your own R modulefile
mkdir ${HOME}/mymodules
mkdir ${HOME}/mymodules/R
* prepend own module directory to ''%%MODULEPATH%%'':
export MODULEPATH=${HOME}/mymodules:$MODULEPATH
* create a module file: ''%%${HOME}/mymodules/R/3.4.2%%'':
#%Module
set inst_base $env(HOME)/mysoftware/R/3.4.2
module-whatis "This is my own customized R installation"
prepend-path PATH $inst_base/bin
prepend-path LD_LIBRARY_PATH $inst_base/lib
append-path CPATH $inst_base/include
setenv MYVAR test1234
----
===== Modules =====
==== Exercise ====
* check how a system module is loaded
module purge
module avail
module load R/3.4.2
module show R/3.4.2
module whatis R/3.4.2
* create your own module environment as described on previous slide
* now load your own R module (called ''%%my_R%%'' here) and check if the correct module has been loaded
module avail
module rm R/3.4.2
module load my_R/3.4.2
module show my_R/3.4.2
module whatis my_R/3.4.2
* and finally try all ''%%module%%'' commands listed on slide 4.
----
====== Software installation ======
===== Software installation (exercise) =====
==== Compiling your own code ====
A simple ''%%hello world%%'' example can be found in ''%%/opt/ohpc/pub/examples/slurm/mul/mpi/hello.c%%''.\\
The modules ''%%gnu7/7.2.0%%'' and ''%%openmpi/1.10.7%%'' should be loaded for this example:
mpicc -show
gcc -I/opt/ohpc/pub/mpi/openmpi-gnu7/1.10.7/include -pthread -Wl,-rpath
-Wl,/opt/ohpc/pub/mpi/openmpi-gnu7/1.10.7/lib
-Wl,--enable-new-dtags -L/opt/ohpc/pub/mpi/openmpi-gnu7/1.10.7/lib -lmpi
Compile the code:
mpicc hello.c -o hello
Run the executeable:
mpirun -np 2 ./hello
Hello, world (2 procs total)
--> Process # 0 of 2 is alive.
--> Process # 1 of 2 is alive.
----
===== Software installation =====
==== General remarks ====
* MPI is configured in such a way, that it will communicate via the infiniband network.
* Therefore use MPI on nodes which are connected via Infiniband.
* Make use of (OpenMP) threads when jobs run node local.
* Run codes in hybrid mode when possible.
----
===== Software installation =====
==== Excercise ====
* create a directory for the source code and copy the example C code:
mkdir helloworld
cd helloworld/
cp /opt/ohpc/pub/examples/slurm/mul/mpi/hello.c .
* load the required modules:
module purge
module load gnu7/7.2.0 openmpi/1.10.7
* compile and run the program:
mpicc hello.c -o hello
mpirun -np 2 ./hello
----