NERSCPowering Scientific Discovery Since 1974


The genepool system has a diverse set of software development tools and a rich environment for delivering their functionality to users.  Genepool has adopted a modular system which has been adapted from the Programming Environments similar to those provided on the Cray systems at NERSC.  The Programming Environment is managed by a meta-module named similar to "PrgEnv-gnu/4.6".  The "gnu" indicates that it is providing the GNU environment, principally GCC, while the version indicates the major release series of the underlying compiler.  This is done because, for example, the libraries generated by gcc 4.6.x and gcc 4.8.x are often incompatible.  Thus to compile and link code with gcc 4.8.x it is critical that the libraries are compatible with the compiled code.  This is particularly important for statically linked libraries.

Available Programming Environments

Module NameBase Compiler
PrgEnv-gnu/4.6 (default) gcc 4.6.3
PrgEnv-gnu/4.7 gcc 4.7.3
PrgEnv-gnu/4.8 gcc 4.8.1
PrgEnv-gnu/4.9 gcc 4.9.2
clang 3.2 (with gcc 4.8.1 C++ toolchain)
PrgEnv-intel/13 icc 13 / ifort 13 (with gcc 4.8.1 C++ toolchain)

By default, the PrgEnv-gnu/4.6 environment is loaded upon login.  The gcc 4.6.x series of compilers is recommended for genepool because it tends to provide a good balance for most Bioinformatics code - permissive for older C/C++ standards; reasonably well optimized for string processing.  The gcc 4.7.x series is a good starting point for most C++11 development, and many newer projects may require GCC 4.7.x at minimum.  g++ 4.8.1 is the very first C++11 feature-complete compiler available.  clang is an excellent alternative compiler based on the LLVM framework, which has some impressive static analysis and optimization features for C and C++ code.

To switch from one programming environment to another, use the module swap command.

Switch from the current version of PrgEnv-gnu to version 4.8

module swap PrgEnv-gnu PrgEnv-gnu/4.8

Switch from the current version of PrgEnv-gnu to version 4.8 (short-hand)

module swap PrgEnv-gnu/4.8

Remove PrgEnv-gnu and load PrgEnv-clang

module swap PrgEnv-gnu PrgEnv-clang

Functionality of the PrgEnv module

The main functionality of the PrgEnv module is to load all the appropriate software needed to use the selected compiler.  Unlike the PrgEnv on the Cray systems, there are no compiler wrappers on genepool to ease library linking across compilers.  Instead, the PrgEnv modules on genepool set the common compiler environment variables (CC, CXX, F77, F95) to point to the appropriate compilers.  When building software, make sure to refer to $CXX instead of g++, or $CC instead of gcc to ensure the proper compiler is used.  In addition to setting the environment variables, the PrgEnv module will load additional modules - such as gcc, clang (if appropriate), in some cases, alternative linking utilities (binutils), and possibly some library sets.

Libraries in Programming Environments

The library offerings in genepool's programming environments deliver a compatible library appopriate for linking with code compiled in the current environment.  When swapping programming environments, the library modules will automatically be updated to reflect the new selection of programming environment.  All of the library modules will set an environment variable <MODULE>_DIR to ease discovery of the path to the include/library files.  These environment variables can be provided to configure scripts, make, or cmake when building software.  In addition, whenever pkgconfig files are made available by the vendor, the library module will properly setup pkgconfig (pkgconfig provides automatic discovery for some configure and cmake scripts).

Available PrgEnv-compatible Libraries

PackageVersionModuleInstall DateDate Made Default
argtable 2.13 argtable/2.13 2012-12-07 2012-12-07
atlas 3.10.0 atlas/3.10.0 2012-07-18 2012-07-18
BCFTOOLS 1.3.1_1 bcftools/1.3.1_1 2016-06-29
BCFTOOLS 1.4_1 bcftools/1.4_1 2017-03-14
boost 1.42.0 boost/1.42.0 2012-07-14
boost 1.47.0 boost/1.47.0 2012-07-03
boost 1.50.0 boost/1.50.0 2012-07-02 2012-07-03
boost 1.52.0 boost/1.52.0 2013-02-10
boost 1.53.0 boost/1.53.0 2013-02-10
boost 1.54.0 boost/1.54.0 2013-07-03
boost 1.55.0 boost/1.55.0 2013-11-19
boost 1.56.0 boost/1.56.0 2014-09-05
boost 1.57.0 boost/1.57.0 2014-11-20
boost 1.59.0 boost/1.59.0 2015-10-08
ctemplate 1.0 ctemplate/1.0 2013-07-02
ctemplate 2.2 ctemplate/2.2 2013-07-02 2013-07-02
fftw 3.3.3 fftw/3.3.3 2013-09-12 2013-09-12
GNU Scientific Library 1.15 gsl/1.15 2012-07-30 2012-08-08
GNU Scientific Library 2.3 gsl/2.3 2017-03-14
googletest 1.6.0 googletest/1.6.0 2013-08-10 2013-08-10
gts 0.7.6 gts/0.7.6 2013-10-11 2013-10-11
hdf5 1.8.10-patch1 hdf5/1.8.10-patch1 2013-03-28 2013-04-08
hdf5 1.8.11 hdf5/1.8.11 2013-06-11
hdf5 1.8.12 hdf5/1.8.12 2014-01-14
hdf5 1.8.13 hdf5/1.8.13 2014-09-24
hdf5 1.8.15-patch1 hdf5/1.8.15-patch1 2015-11-09
hdf5 1.8.4-patch1 hdf5/1.8.4-patch1 2013-04-17
hdf5 1.8.9 hdf5/1.8.9 2012-07-19 2012-07-19
hdf5-parallel 1.8.11 hdf5-parallel/1.8.11 2014-02-04
hdf5-parallel 1.8.12 hdf5-parallel/1.8.12 2014-02-04 2014-02-04
HTSLIB 1.3.1_1 htslib/1.3.1_1 2016-06-29
HTSLIB 1.4_1 htslib/1.4_1 2017-03-14
libcrispr 1.0.1 libcrispr/1.0.1 2013-12-18 2013-12-18
libpng 1.6.28 libpng/1.6.28 2017-02-14
libzip 0.10.1 libzip/0.10.1 2012-07-20 2012-07-20
libzip1 0.9.3 libzip1/0.9.3 2013-07-02 2013-07-02
neon 0.29.6 neon/0.29.6 2012-11-08 2012-11-08
Open MPI 1.6.3 openmpi/1.6.3 2012-11-19 2013-02-13
Open MPI 1.6.4 openmpi/1.6.4 2013-03-28 2013-06-18
Open MPI 1.6.5 openmpi/1.6.5 2013-08-20 2014-08-20
Open MPI 1.8.1 openmpi/1.8.1 2014-07-23
Open MPI 1.8.4 openmpi/1.8.4 2015-04-03
Open MPI 1.8.4t openmpi/1.8.4t 2015-04-08
Open MPI 1.8.7 openmpi/1.8.7 2015-07-16
Open MPI 1.8.7f openmpi/1.8.7f 2015-11-05
rabbitmq-c 0.4.0 rabbitmq-c/0.4.0 2013-08-20
rabbitmq-c 0.4.0_nossl rabbitmq-c/0.4.0_nossl 2013-08-20
rabbitmq-c 20130428 rabbitmq-c/20130428 2013-06-29 2013-06-29
rabbitmq-c 20130428_nossl rabbitmq-c/20130428_nossl 2013-07-15
SAMTOOLS 0.1.19_1 samtools/0.1.19_1 2013-08-12 2013-10-09
SAMTOOLS 0.1.19_2 samtools/0.1.19_2 2014-01-13 2016-12-08
SAMTOOLS 1.2 samtools/1.2 2015-08-03
SAMTOOLS 1.3.1 samtools/1.3.1 2016-11-30 2016-12-08
SAMTOOLS 1.4 samtools/1.4 2017-03-14
stxxl 1.3.1 stxxl/1.3.1 2013-06-30 2013-06-30
xerces-c 3.1.1 xerces-c/3.1.1 2013-08-27 2013-08-27
yaml 0.1.4 yaml/0.1.4 2013-07-08 2013-07-08
zlib 1.2.8 zlib/1.2.8 2015-01-05 2015-01-05

Library not compatible with selected PrgEnv

In some cases, a library may not have been made available for the desired PrgEnv.  In that case, you'll get an error message when loading the library or swapping the PrgEnv.  If the library is needed for your work, please contact NERSC Consulting to get a version installed which is compatible with the desired PrgEnv.

dmj@genepool:~$ module load boost
dmj@genepool:~$ module swap PrgEnv-gnu PrgEnv-clang
boost/1.50.0 does not appear to have a valid directory: /usr/common/usg/utility_libraries/boost/clang3.2/1.50.0 doesn't exist. Exiting without changing modules.
Please contact to request a compatible version, or unload boost/1.50.0 and try again.