Skip to content Skip to main navigation Report an accessibility issue
GET HELP
High Performance & Scientific Computing

Compiling



Compiling on ISAAC: Intel Programming Environment

ISAAC supports two major compilers, Intel and GNU. These compilers are selected by loading the correct programing environment that includes compiler and Intel MPI libraries. These programming environments are named PE-intel and PE-gnu, respectively.   

The default programing environment on the ISAAC is the Intel programing environment (PE-intel), which includes the Intel compilers and Intel MPI libraries.  To change to a different compiler version or MPI library the current loaded modules can be swapped via:

module swap intel-compilers intel-compilers/<VERSION>

 module swap intel-mpi intel-mpi/<VERSION>

The <VERSION> in the above commands must be replaced with an available version.  To see the available versions of Intel compilers and MPI libraries issue the command:

module avail intel

Compiling on ISAAC: GNU Programming Environment

To compile using GNU compilers, the programming environment will need to be changed to the GNU programming environment (PE-gnu).  This can be done via the module swap command:

module swap PE-intel PE-gnu

To change to a different compiler version or MPI library the current modules can be swapped via:

module swap gcc gcc/<VERSION>

module swap intel-mpi intel-mpi/<VERSION>

The <VERSION> in the above commands must be replaced with an available version.  To see the available versions of GNU compilers and Intel MPI libraries issue the commands:

module avail gcc

module avail intel-mpi

Compiling on ISAAC: OpenMPI library

Developers can use the OpenMPI library by unloading the existing intel MPI library and loading the openMPI library:

module unload intel-mpi

module load openmpi/<VERSION>

The <VERSION> in the above commands must be replaced with an available version or omitted to load the default version. To see the available versions of the OpenMPI library issue the command.

module avail openmpi

Please note that OpenMPI libraries with “gcc” in their names are compiled for the GNU programming environment (PE_gnu). Otherwise, they are compiled for use in the Intel programming environment (PE_Intel).

Compiling on ISAAC: Using OpenMP

Compiling codes with shared memory parallelization via OpenMP is handled by the compilers, with appropriate compiler flags such as –qopenmp (Intel) and –fopenmp (GNU). Please consult with the appropriate compiler documentation for more details.

Compiling on ISAAC: Compiler Wrappers for MPI

Compiler wrappers are available on the ISAAC to compile parallel MPI applications written in C, C++, or Fortran. The table below shows the commands for both the native compiler and the MPI wrapper. The MPI wrappers automatically link to the appropriate MPI libraries without additional compiler flags.  As mentioned above, OpenMP can be enabled with either native compiler or MPI wrapper by including the appropriate flag.

Compiler (PE module)Intel (PE-intel)GNU (PE-gnu)
Language/CommandCompilerMPI WrapperCompilerMPI Wrapper
Ciccmpiiccgccmpicc
C++icpcmpiicpcg++mpicxx
Fortranifortmpiifortgfortranmpif90

Compiling for the AMD Rome node:

Intel Compiler

Codes built by Intel compiler should not include Intel processor targeted options such as the –xHost flags for example, -xCORE-AVX2, –xAVX, and –xSSE4.2.  Options that are not Intel processor specific should be utilized such as the –march flags for example, -march=core-avx2, –mavx, and –msse4.2.  Please note that newer versions of this compiler may be necessary to utilize architecture specific options. Please refer to the compiler documentation for more details.

GNU compiler

Codes built by GNU compiler with generic optimization flags should work on any node. Examples of general architecture flags include -msse4.2, -mavx, and -mavx2. For the AMD 7542 processors the specific flag –march=znver2 may be utilized. Please note that newer versions of this compiler may be necessary to utilize architecture specific options.  Please refer to the compiler documentation for more details.