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 Name||Base Compiler|
|PrgEnv-gnu/4.6 (default)||gcc 4.6.3|
|PrgEnv-clang/3.2 (Coming Soon!)||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. gcc 4.8.x is under active development and delivers the absolute latest in C++11 (and beyond!) features. 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
|Package||Version||Module||Install Date||Date Made Default|
|GNU Scientific Library||1.15||gsl/1.15||2012-07-30||2012-08-08|
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 email@example.com to request a compatible version, or unload boost/1.50.0 and try again. dmj@genepool:~$