The National Institute for Computational Sciences

Compiling

 Compiling on ACF: Intel Programming Environment

 

ACF 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 ACF 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 ACF: 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 ACF: 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 ACF: 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 ACF: Compiler Wrappers for MPI

 

Compiler wrappers are available on the ACF 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 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.