Compilers Installed on LC Platforms

As of 01/8/16

Platform Links | Documentation | Defaults | Version Notes | Additional Notes

Platform Links

  OCF x86_64 CHAOS 5 ansel, aztec, cab, catalyst, edge, herd, rzalastor, rzcereal, rzhasgpu rzmerl, rzzeus, sierra
  SCF x86_64 CHAOS 5 graph, inca, juno, max, muir, zin
  ISNSI x86_64 CHAOS 5 pinot
  OCF IBM BG/Q rzuseq, vulcan
  SCF IBM BG/Q seq

Top

Compiler Documentation

Top

Default Compilers and Versions by Platform

OCF x86_64 CHAOS 5 Platforms
ansel, aztec, cab, catalyst, edge, herd, rzalastor, rzcereal, rzhasgpu rzmerl, rzzeus, sierra
Vendor Language Version Commands
GNU FORTRAN 4.4.7 Serial gfortran
MPI mpigfortran
C 4.4.7 Serial gcc
MPI mpigcc
C++ 4.4.7 Serial g++
MPI mpig++
Intel FORTRAN 14.0.174 Serial ifort
MPI mpiifort
C 14.0.174 Serial icc
MPI mpiicc
C++ 14.0.174 Serial icpc
MPI mpiicpc
PGI FORTRAN 8.0-1 Serial pgf77, pgf90, pgf95
MPI mpipgf77, mpipgf90, mpipgf95
C 8.0-1 Serial pgcc
MPI mpipgcc
C++ 8.0-1 Serial pgCC
MPI mpipgCC

Top

SCF x86_64 CHAOS 5 Platforms
graph, inca, juno, max, muir, zin
Vendor Language Version Commands
GNU FORTRAN 4.4.7 Serial gfortran
MPI mpigfortran
C 4.4.7 Serial gcc
MPI mpigcc
C++ 4.4.7 Serial g++
MPI mpig++
Intel FORTRAN 14.0.174 Serial ifort
MPI mpiifort
C 14.0.174 Serial icc
MPI mpiicc
C++ 14.0.174 Serial icpc
MPI mpiicpc
PGI FORTRAN 8.0-1 Serial pgf77, pgf90, pgf95
MPI mpipgf77, mpipgf90, mpipgf95
C 8.0-1 Serial pgcc
MPI mpipgcc
C++ 8.0-1 Serial pgCC
MPI mpipgCC

Top

ISNSI x86_64 CHAOS 5 Platforms
pinot
Vendor Language Version Commands
GNU FORTRAN 4.4.7 Serial gfortran
MPI mpigfortran
C 4.4.7 Serial gcc
MPI mpigcc
C++ 4.4.7 Serial g++
MPI mpig++
Intel FORTRAN 14.0.174 Serial ifort
MPI mpiifort
C 14.0.174 Serial icc
MPI mpiicc
C++ 14.0.174 Serial icpc
MPI mpiicpc
PGI FORTRAN 8.0-1 Serial pgf77, pgf90, pgf95
MPI mpipgf77, mpipgf90, mpipgf95
C 8.0-1 Serial pgcc
MPI mpipgcc
C++ 8.0-1 Serial pgCC
MPI mpipgCC

Top

OCF IBM BG/Q Platforms
rzuseq, vulcan
Vendor Language Version Commands
IBM XL FORTRAN 14.1 Serial bgxlf, bgf77, bgfort77, bgxlf90, bgf90, bgxlf95, bgf95, bgxlf2003, bgf2003, bgxlf2008, bgf2008
MPI mpixlf77, mpixlf90, mpixlf95, mpixlf2003
C 12.1 Serial bgxlc, bgcc, bgc89, bgc99
MPI mpixlc
C++ 12.1 Serial bgxlC, bgxlc++
MPI mpixlC
GNU FORTRAN 4.4.7 Serial powerpc-bgq-linux-gfortran
MPI mpif77, mpif90
C 4.4.7 Serial powerpc-bgq-linux-gcc
MPI mpicc
C++ 4.4.7 Serial powerpc-bgq-linux-c++, powerpc-bgq-linux-g++
MPI mpicxx

Top

SCF IBM BG/Q Platforms
seq
Vendor Language Version Commands
IBM XL FORTRAN 14.1 Serial bgxlf, bgf77, bgfort77, bgxlf90, bgf90, bgxlf95, bgf95, bgxlf2003, bgf2003, bgxlf2008, bgf2008
MPI mpixlf77, mpixlf90, mpixlf95, mpixlf2003
C 12.1 Serial bgxlc, bgcc, bgc89, bgc99
MPI mpixlc
C++ 12.1 Serial bgxlC, bgxlc++
MPI mpixlC
GNU FORTRAN 4.4.7 Serial powerpc-bgq-linux-gfortran
MPI mpif77, mpif90
C 4.4.7 Serial powerpc-bgq-linux-gcc
MPI mpicc
C++ 4.4.7 Serial powerpc-bgq-linux-c++, powerpc-bgq-linux-g++
MPI mpicxx

Top

Alternate Compiler Versions

Modifying Default Compiler Versions with Dotkit: Default compiler versions can be modified using Dotkit. Dotkit starts up by default at login time on all CHAOS Linux machines. To load a Dotkit package, use the use command. For example, running use ic-9.1.052 will cause the icc, ifort, mpiicpc, etc. commands to invoke the 9.1.052 version of the Intel compilers. Note that Dotkit works by modifying environment variables, thus the changes are only valid for the session in which the use command was invoked. These changes can be made persistent by invoking the Dotkit in your startup script, in which case it is suggested to run use -q to run Dotkit in quiet mode. To view available compiler Dotkits run the use -l compilers command. More information about Dotkit can be found on LC's Dotkit page.

Alternate compiler versions: Older and newer versions of all compilers (including MPI wrappers) are available through version specific names such as ifort-12.1.339 and mpipgcc-7.1.3. LC provides a utility to see a full list of available compiler commands. This utility is available via the compilers command. Specific queries, based on vendor, language, or parallelism model (serial or MPI), can be made to this utility. For query options, run compilers -h.

Top

Additional Notes

Clang note: Various Clang installations have been made available. For more information, refer to the Clang wiki on the LC Confluence server.

SYS_TYPE note: Executables compiled on machines of one SYS_TYPE are not likely to run on machines of a different SYS_TYPE. The exception is that executables may run on both chaos_5_x86_64_ib and chaos_5_x86_64. Some software and libraries may be available for some SYS_TYPEs and not others. Some utilities and libraries may be in different places on machines of different SYS_TYPEs. You may need to modify your makefiles or build scripts when transitioning to a machine of a different SYS_TYPE.

GNU compiler note: Our GNU compilers on Linux systems are versions provided to us by RedHat, not vanilla versions available from GNU. They may perform differently or have different features than the vanilla GNU builds. Builds of GNU's versions of these compilers tend not to work on our Linux systems because of incompatibilities with binutils.

gfortran and g77 note: The GNU Fortran compiler command has changed between version 3, the CHAOS 3 default, and version 4, the CHAOS 4 default. On CHAOS 4 machines, and subsequently CHAOS 5 machines, the default GNU Fortran compiler is invoked with the gfortran command. If you use the g77 command on a CHAOS 5 system, you will get the non-default GNU Fortran compiler (version 3).

Pathscale note: As of CHAOS 5, LC no longer supports the Pathscale compilers.

CUDA note: The CUDA Toolkit is available on systems with compatible GPU accelerators. Information on how to build codes with CUDA can be found on LC's CUDA pages.

OpenCL note: OpenCL is available on systems with GPU accelerators. Information on how to build codes with OpenCL can be found on LC's OpenCL pages.

Vectorization with the Intel Compiler note: Vectorization is becoming increasingly important for performance on modern processors with widening SIMD units. More information on how to vectorize with the Intel compilers can be found on LC's vectorization page.

Static Security Analysis with the Intel Compiler note: The Intel Compiler includes a feature known as Static Security Analysis (SSA), which performs static analysis of source code to uncover security vulnerabilities and code correctness issues. More information how to use SSA with the Intel compilers can be found on LC's SSA page.

Intel compiler mixed language note:

When calling a Fortran routine compiled with ifort from C or C++, it is recommended that you call the Intel-specific initialization and finalization routines, for_rtl_init_ and for_rtl_finish_. This is particularly important when using ifort runtime options such as -check all. For example, you will first need to declare the following functions:

void for_rtl_init_(int *, char **);
int for_rtl_finish_();

(if using C++, you will need to declare them as extern "C"):

extern "C" {
    void for_rtl_init_(int *, char **);
    int for_rtl_ffffinish_();
};

From your C or C++ main you will then need to initialize and finalize with these functions, for example:

int main(int argc, char **argv)
{
    for_rtl_init_(&argc, argv);

    /* your code here... */

    int io_status = for_rtl_finish_();
    return 0;
}

Because these routines are Intel specific, you may want to encapsulate them within #ifdef directives for the Intel compiler defined macro __INTEL_COMPILER.

MOVING FROM INTEL 9.1 TO INTEL 11.1:

This note is old, however, it still applies to users who would like to migrate away from the 9.1 compiler. The 9.1 compiler does not officially support newer operating systems (including CHAOS 5) and may not be installed for future OS upgrades, thus users are advised to use a newer version of the Intel compiler. While this note pertains to migration to the 11.1 compiler, it is recommended that users move at least to the 12.1 compiler and more preferrably to the 14.0 compiler.

For more details on the options below, please refer to the man pages (man ifort or man icc) or the full documentation available in:

/usr/local/tools/icc-11.1.046/Documentation/en_US/documentation_c.htm

/usr/local/tools/ifort-11.1.046/Documentation/en_US/documentation_f.htm

The maintain precision -mp option has been deprecated in favor of the -fp-model options. The -fp-model flags allow users to trade off floating point optimizations for accuracy and consistency. Intel recommends specifying both -fp-model precise and -fp-model source, which our benchmarking has suggested results in a typical slowdown of less than 1% up to 10%. Users are advised to consult the documentation to determine which options best suit their needs.

For additional guidance (your results may vary), one user has suggested the following options to get a combination of good performance with accurate results:

-g -O3 -ip -ansi-alias -restrict -msse3 -unroll-aggressive -fp-model strict -fp-model source -prec-div -prec-sqrt -no-ftz

Another user reported that in order to get results consistent with the 9.1 compiler at -O2 to specify -O2 -nolib-inline with the 11.1 compiler and to get results consistent with the 9.1 compiler at -O3 to specify:

-O3 -msse3 -ip -unroll-aggressive -finline-functions -fp-model precise -fp-model source -no-ftz -prec-div -prec-sqrt -nolib-inline

The behavior of the -std=c99 option has been changed to enforce strict ANSI conformance. Users may notice compiler warnings about function calls such as gethostname or strdup. To get the old behavior, users must specify -std=c99 -U__STRICT_ANSI__.

The basic optimization recommendation is -O2, which is enabled by default. More aggressive optimizations can be enabled with the -fast option. Note that the -fast option enables several other options including -xHOST, which enables SSE instructions to be generated based on the compilation host. Thus, binaries built on Coastal with the -fast option may not run on Peloton or TLCC machines. In general, if you want a single binary that can Coastal, Peloton, and TLCC machines while still taking advantage of Coastal's more advanced SSE unit, you can specify -axSSE4.2, which will use runtime processor detection to determine when to run with the SSE4.2 instructions. For more information about optimizations please refer to the full compiler documentation or the Intel optimization quick reference guide at:

/usr/local/tools/icc-11.1.046/Documentation/en_US/Intel_11_Optimization_Quick_Reference.pdf

/usr/local/tools/ifort-11.1.046/Documentation/en_US/Intel_11_Optimization_Quick_Reference.pdf

Code developers are advised to use the -warn interfaces flag with their Fortran codes. This flag tells the compiler to check the interfaces of all subroutine and function invocations to ensure that they match compiler generated interface blocks for subroutine and function definitions in your code. Note, this option works by generating additional .f90 and .mod files. Please refer to the ifort man page for more information.

Top