This page documents the compilers available on the El Capitan Systems, along with details about how they are deployed to the user environment

Compilers

LC considers cce and rocmcc to be the names of compiler families, similar to the names gcc or clang. These 2 compiler families are provided by HPE as part of the CORAL2 contract. They are intended to function completely independently and the goal is for these to be able to compile all projects intended for El Capitan platforms. Both of these compilers are clang-based with the intent to upstream as many features as possible to clang main-line.

Available Compilers

Cray Compiler Family: cce

Historically, the cce (Cray Compiler Environment) has provided the cc (C), CC;(C++), and ftn (Fortran) compiler executables. These compliers are deployed as part of the Cray programing environment and their behavior is highly dependent on the environment modules loaded at both build time and run time (see Cray Modules Guide). By loading different modules, users can enable MPI, GPU, and other software libraries.

As part of the CORAL 2 contract, HPE is providing module-independent compilers; exposed to users via the cce/VERSION-magic modules. The compiler executables are named craycc (C), crayCC (C++), and crayftn (Fortran). See the [TODO LINK](LC Magic Modules Guide) for more details.

AMD Compiler Family: rocmcc

More details on the AMD ROCm Compiler family can be found in the official documentation pages. The following table is an excerpt of their compiler disambiguation page:

Term Description

amdclang++

Clang/LLVM-based compiler that is part of rocm-llvm package. The source code is available at https://github.com/RadeonOpenCompute/llvm-project.

AOCC

Closed-source clang-based compiler that includes additional CPU optimizations. Offered as part of ROCm via the rocm-llvm-alt package. See for details, https://developer.amd.com/amd-aocc/.

HIP-Clang

Informal term for the amdclang++ compiler

HIPify

Tools including hipify-clang and hipify-perl, used to automatically translate CUDA source code into portable HIP C++. The source code is available at https://github.com/ROCm-Developer-Tools/HIPIFY

hipcc

HIP compiler driver. A utility that invokes clang or nvcc depending on the target and passes the appropriate include and library options for the target compiler and HIP infrastructure. The source code is available at https://github.com/ROCm-Developer-Tools/HIPCC.

ROCmCC

Clang/LLVM-based compiler. ROCmCC in itself is not a binary but refers to the overall compiler.

rocmcc modules

The rocmcc compiler family provides executables named amdclangamdclang++, and amdflang.

Note: The amdflang compiler remains under initial development and is not fully functioning as of December 2022. It is recommended that users instead build fortran projects with crayftn. LC is supplying specific versions of the rocmcc/VERSION-magic modules which do this, see the LC Magic Modules Guide for more information. 

rocm modules and hipcc

ROCm provides a complier wrapper for HIP code, called hipcc , which is available in the rocm modules. This is a perl script that actually calls amdclang++ under the covers.

Gnu Compiler Family: gcc

The gcc (Gnu Compiler Collection) provides gcc (C), g++ (C++), and gfortran (Fortran) compiler executables.

User Environment

LC has traditionally deployed wrappers around vendor-supplied compilers. While this solves common issues for some users, it can complicate things for others. For the El Capitan systems, users can select which experience they would like for their environment. 

  HPE / Cray Provided LLNL Provided
Modules
  • Traditional cray environment.
  • Same at all HPE sites
  • Highly dependent on modules/environment
  • Requires same modules loaded for building and running 
  • See Cray Modules Guide
  • Easy to setup/use
  • Magic by John Gyllenhaal
  • Does not require modules for running
  • Not portable beyond LC
  • See LC Magic Modules Guide
Explicit-paths
  • Designed for spack
  • No environment dependencies
  • Portable to all HPE sites (newer installations)
  • See Spack Guide
  • No environment dependencies
  • Optional John Gyllenhaal magic
  • Not portable beyond LC
  • Recommended for complex builds
  • See Explicit build paths example

How do I know if I'm using LLNL-specific modules or the Cray/HPE modules?

The LC modules (with John G magic) include a -magic appended to the version number.

Recommended Use of XPMEM and GTL Libraries

As of August 2024, we are recommending that users always link their application with -lxpmem and the GTL library. These recommended link modifications are done automatically with the -magic wrappers for cray-mpich/8.1.30 (and later), but can be turned off.

See additional details and documentation on the known issues page.