OpenHPC - Developer Tooling
OpenHPC is an Open Source project that provides, among other things, access to current versions of many developer tools. To find out more about the project and the functionality it provides visit the community website
Usage
OpenHPC leverages lmod
to handle loading multiple development environments. The below is a very quick introduction on how to use lmod
. If you would like further details, please visit the lmod documentation
Using the module command
To see what modules you currently have loaded, use the module list
command.
$ module list
No modules loaded
To see the available developer tools you can use the module avail
command.
$ module avail
-------------------------- /opt/ohpc/pub/modulefiles --------------------------
cmake/3.13.4 gnu8/8.3.0 intel/18.0.0.128 intel/19.0.3.199 (D) prun/1.3
Where:
D: Default Module
Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
In this case you can see that gnu8 and two versions of the Intel compiler are available. The (D)
indicates which version of a module is loaded when no arguments are given. To load the Intel compiler, you can use the module load intel
command. We can verify that version 19.0.3.199 was loaded by using icc --version
.
$ module load intel
$ icc --version
icc (ICC) 19.0.3.199 20190206
Copyright (C) 1985-2019 Intel Corporation. All rights reserved.
If you decide that you no longer need the Intel compiler and instead need the gnu versions of the compiler, you can use the module swap
command. In our example above we would swap the intel compiler for the gnu8 compiler, and then confirm that the proper version of gcc was loaded.
$ module swap intel gnu8
$ gcc --version
gcc (GCC) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Failure to use the swap option will show an error such as
$ module load gnu8
Lmod has detected the following error: You can only have one compiler module loaded at a time.
You already have intel loaded.
To correct the situation, please execute the following command:
$ module swap intel gnu8/8.3.0
While processing the following module(s):
Module fullname Module Filename
--------------- ---------------
gnu8/8.3.0 /opt/ohpc/pub/modulefiles/gnu8/8.3.0
Note that after a compiler family is loaded, you will then have access to various MPI libraries. After you’ve loaded the compiler family, use module avail
again to find out what MPI libraries are available.
$ module load intel
$ module avail
-------------------------------- /opt/ohpc/pub/moduledeps/intel --------------------------------
openmpi3/3.1.3
---------------------------------- /opt/ohpc/pub/modulefiles -----------------------------------
cmake/3.13.4 gnu8/8.3.0 intel/18.0.0.128 intel/19.0.3.199 (L,D) prun/1.3
Where:
D: Default Module
L: Module is loaded
Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
$ module load openmpi3
$ module avail
--------------------------- /opt/ohpc/pub/moduledeps/intel-openmpi3 ----------------------------
phdf5/1.10.4
-------------------------------- /opt/ohpc/pub/moduledeps/intel --------------------------------
openmpi3/3.1.3 (L)
---------------------------------- /opt/ohpc/pub/modulefiles -----------------------------------
cmake/3.13.4 gnu8/8.3.0 intel/18.0.0.128 intel/19.0.3.199 (L,D) prun/1.3
Where:
D: Default Module
L: Module is loaded
Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
Using modules in PBS jobs
After using the module load
command to load the environment that you wish to use, submit the to PBS and include the -V
switch. This will make your current environment available your job. For example, I have a simple job that runs module avail
after loading intel, openmpi3, and phdf5. As you can see from the job output, all of the modules were loaded on the node in which the job ran.
$ module load intel openmpi3 phdf5
$ qsub -lselect=1:ncpus=112 -V ./driver.sh
132837.iam-pbs
$ cat results.*
------------------- /opt/ohpc/pub/moduledeps/intel-openmpi3 --------------------
phdf5/1.10.4 (L)
------------------------ /opt/ohpc/pub/moduledeps/intel ------------------------
impi/2019.3.199 openmpi3/3.1.3 (L)
-------------------------- /opt/ohpc/pub/modulefiles ---------------------------
cmake/3.13.4 intel/18.0.0.128 prun/1.3
gnu8/8.3.0 intel/19.0.3.199 (L,D)
Where:
D: Default Module
L: Module is loaded
Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching
any of the "keys".
The -V
switch also applies to interactive jobs. To use an environment loaded by module load
in your interactive job, submit it with the -V
flag. For example:
$ module load intel openmpi3
$ qsub -q xeon -I -V
qsub: waiting for job 133137.iam-pbs to start
qsub: job 133137.iam-pbs ready
$ module list
Currently Loaded Modules:
1) intel/19.0.3.199 2) openmpi3/3.1.3
Requesting Installation of additional components
OpenHPC supports a wide variety of compilers and MPI versions. You can see the full list here . If you need an additional component installed, send an email to iam@intel-research.net and we’ll be happy to get it installed.