Scientific Computing and Data / High Performance Computing / Documentation / Software Build and Compile on Minerva

Software Build and Compile on Minerva

Building Third-Party Applications

You should be able to find many applications already installed on Minerva as system modules using module spider or module avail on the command line. These system modules are there just for the sake of convenience for the users and in no event imply an absolute requirement of using them on Minerva. You may use your own software installed in your local area and can even set up your own modules if you prefer.

In most cases you’ll want to download the source code and build the software so that it’s compatible with the Minerva software environment. You cannot use yum or any other installation process that requires root privileges, but this is almost never necessary. The key is to specify a target installation directory for which you have write permissions. Details vary; you should consult the package’s documentation and be prepared to experiment. When using the popular autotools build process, the standard approach is to use the --prefix option to specify a non-default, user-owned installation directory at the time you execute configure or make:

$ export INSTALLDIR=/sc/arion/work/MyUserID/my_apps
$ ./configure --prefix=$INSTALLDIR
$ make
$ make install

Other languages, frameworks, and build systems generally have equivalent mechanisms for installing software in user space. In most cases a web search like “Software_Name Linux install local” will get you the information you need.
 

Compiling

The programming environment is centered on the compiler. Minerva supports C/C++ and Fortran compilers from INTEL, and GNU Compiler Collection (GCC). Only one compiler module should be loaded at a time to avoid ambiguity. Compiling code for parallel execution on Minerva must use the proper implementation of MPI and link against the proper libraries. The MPI implementation currently supported by Minerva is OpenMPI and INTEL MPI. In particular, note that OpenMPI is not part of the MPICH family of MPI implementations.

For each supported compiler suite, a version of OpenMPI that is compatible with that compiler is loaded by using the module command. For example, to use the GCC compilers with OpenMPI:

module load openmpi

To use the INTEL MPI:

module load intel

When compiling non-MPI programs, modules for compilers without MPI support can be loaded instead:

module load gcc

 

Compiler Names

Compiler “wrappers” provided by OpenMPI and INTEL MPI supply the correct compiler and linker flags for MPI applications. For non-MPI codes the “native” compilers may be used directly.

Language MPI Native GCC Native Intel
Fortran mpiff77, mpif90 gfortran ifort
C/C++ mpicc gcc icc

 

Basic Examples

Serial Code

gfortran -O2 -o test test.f

MPI

mpicc -O2 -o MPItest MPItest.c

OpenMP

icc -O2 -qopenmp -o OpenMPtest OpenMPtest.c
gcc -O2 -fopenmp -o OpenMPtest OpenMPtest.c

Available compiler options depend on the underlying native compiler; complete descriptions are available via the “man” command.