Compiling Code on ALICE and SPECTRE

If you need to compile your own code, there are two compilers for C, C++ and Fortran on the High Performance Computing (HPC) system: the Intel Cluster Toolkit and the Gnu Compiler Collection (GCC).

Compiler names

Language GCC Intel
C gcc icc
C++ g++ icpc
F77 gfortran ifort
F90 gfortran ifort
F95 gfortran ifort

GNU Compiler Collection

Two versions of the GNU Compiler Collection are available:  4.3.4 and 4.1.1. In general you will want to use the most recent version. However there have been changes to the library interfaces so you may find you need version 4.1.1 in some cases.

To use the GCC compilers, enter:

module load gcc/4.3.4

or

module load gcc/4.1.1

depending on which version you are using.

Intel Compilers

To use the Intel compilers, enter:

module load intel/compilers

It is recommended that you use the Intel MKL Link Advisor to create your link lines. It can be difficult to link against MKL and this will give you a good starting point.

Recommended values for the Link advisor:

Field Recommended values
Select OS: Linux
Select processor architecture: Intel 64
Select compiler: Intel | GNU C | GNU Fortran
Select dynamic or static linking dynamic | static
Select your integers length: 32-bit (lp64)
Select sequential or multi-threaded sequential | multi-threaded
Select OpenMP library:

iomp5 (may not be needed)

Select Cluster library: Scalapack (may not be needed)
Select MPI library: Intel MPI | Open MPI (may not be needed)

Once you have entered your values the link advisor will provide you with a list of linker options, for example:

-L$MKLPATH $MKLPATH/libmkl_solver_lp64_sequential.a \
-Wl,--start-group -lmkl_intel_lp64 -lmkl_sequential -lmkl_core \
-Wl,--end-group -lpthread

These can be used directly if you are linking from the command line, for example:

> ifort -L$MKLPATH $MKLPATH/libmkl_solver_lp64_sequential.a \
-Wl,--start-group -lmkl_intel_lp64 -lmkl_sequential -lmkl_core \
-Wl,--end-group -lpthread mycode.f90 -o mycode.exe

If you are using a Makefile rather than linking directly at the command line, you need to add the above linker options to the LDFLAGS, CFLAGS or FFLAGS variable in your Makefile.  You will also need to change references to $MKLPATH to $(MKLPATH), so that the make command understands them.

MPI

There are four implementations of MPI available:

  1. OpenMPI + Intel Compilers
  2. OpenMPI + GNU Compilers
  3. IntelMPI + Intel Compilers (recommended for performance)
  4. IntelMPI + GNU Compilers

MPI wrapper scripts for the different implementations:

Language Open MPI + Any Intel MPI + GCC Intel MPI + Intel
C mpicc mpicc mpiicc
C++ mpicxx mpicxx mpiicpc
F77 mpif77 mpif77 mpiifort
F90 mpif90 mpif90 mpiifort
F95 mpif90 mpif90 mpiifort

OpenMPI

To load the Intel MPI wrapper scripts and libraries use:

module load openmpi/intel

To load the GNU MPI wrapper scripts and libraries use:

module load openmpi/gcc

This will also load the related compiler module if it is not already loaded, for instance the Intel Compiler module.

Intel MPI

When you load Intel MPI it will add both the GNU and Intel compilers to your path. The Intel MPI wrapper scripts have different names, whereas the OpenMPI wrapper scripts have identical names and therefore require their own module.

module load intel/impi

Share this page:

Contact us

IT Service Desk

Phone:
0116 252 2253
Chat:
Online:
In person:

Teaching Room Help

Phone:
0116 252 2919
Book:
Search IT Help