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 amdclang, amdclang++, 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 |
|
|
Explicit-paths |
|
|
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.