Compiling on Nautilus

Compilers and PE Modules

Nautilus provides C, C++ and Fortran compilers from
Intel,
GNU and
PGI,
with Intel being the default.
Special programming environment or PE modules are used
to easily switch compilers. For instance to switch from Intel to GNU:

> module swap PE-intel PE-gnu

The PE modules take care of setting the appropriate compiler macros (e.g. CC
and F90) as well as loading MPT, which is SGI's MPI implementation.
For sanity, only one PE module can be loaded at a time.
The following table shows the macros and executable names for the various
compilers:

macro

executable name

Intel

GNU

PGI

C

CC

icc

gcc

pgcc

C++

CXX

icpc

g++

pgCC

Fortran

FC,F77,F90

ifort

gfortran

pgfortran,pgf77,pgf90

Explore the man pages of the respective compilers for complete lists of compiler options.

Libraries

MPI

MPI is provided on Nautilus by
SGI's Message Passing Toolkit (MPT)
which supports version 2.2 of the MPI standard as well as providing the SHMEM
programming model.
MPT is loaded by default with any of the PE modules. When compiling your MPI
code, use the -lmpi linker flag, for example:

icc myprogram.c -o myprogram -lmpi

For C++ code, also include the -lmpi++ flag:

icpc myprogram.c -o myprogram -lmpi++ -lmpi

OpenMP

OpenMP programs require certain compiler flags according to which compiler
you are using:

compiler

flag

Intel

-openmp

GNU

-fopenmp

PGI

-mp

MKL

The Intel Math Kernel Library (MKL) is available for use with the Intel
compilers. When compiling, specify the -mkl flag, for example: