Compiling on ISAAC Legacy
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/Command | Compiler | MPI Wrapper | Compiler | MPI Wrapper |
C | icc | mpiicc | gcc | mpicc |
C++ | icpc | mpiicpc | g++ | mpicxx |
Fortran | ifort | mpiifort | gfortran | mpif90 |
Compiling for the AMD Rome node:
Intel Compiler
Codes built by Intel compilers 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.