Cray Compiler Overview

Software enhancements and support

This section describes software enhancements and support details for the HPE CCE 20.0.0 release.

Language technology

  • HPE Cray Fortran fully supports the Fortran 2018 standard.

  • The C and C++ compilers are based on Clang and LLVM 20.0.0.

    • C fully supports c89 with partial support for c99, c11, and c17.

    • C++ fully supports C++17 with partial support for C++20 and C++23.

  • LLVM version 20.0.0 base.

Miscellaneous features and enhancements

  • LLVM 20 base (merges up to May 27, 2025 - LLVM version 20.1.6)

  • C++ virtual and indirect function calls are supported in C/C++ OpenMP offload regions when compiling with either -fopenmp-offload-translate-at-map or -fopenmp-offload-translate-at-call.

  • Added/Extended support for OpenMP features, including:

    • For OpenMP 6.0:

      • Free-agent threads

      • Reductions on private variables

      • Self mapping for accelerators

      • Fortran: Miscellaneous extensions to default and defaultmap clauses

    • For OpenMP 5.2:

      • masked construct with filter clause

      • OMP_PLACES extended syntax

      • Fortran: allocators construct for ALLOCATE statement

      • Miscellaneous new syntax allowed by specification (e.g. declare target, ordered, metadirective)

    • For OpenMP 5.1:

      • Fortran: thread_limit clause on target

      • Fortran: tile and unroll constructs

      • Fortran: Allow an BLOCKENDBLOCK as OpenMP structured block

      • strict extension for num_tasks and grain_size on taskloop

      • masked construct and related combined constructs

      • primary thread affinity policy

      • _DEV suffix for device-specific environment variables

      • omp_target_is_accessible routine

      • Allow scan directive to apply to array sections

  • This HPE CCE release supports language features specified by the Fortran 2023 standard, with the exception of .NIL., as noted below.

    • New Fortran 2023 Intrinsics, including:

      • TOKENIZE

      • SPLIT

      • PREVIOUS

      • NEXT

    • KIND data types within ISO_FORTRAN_ENV updates, including:

      • LOGICAL8

      • LOGICAL16

      • LOGICAL32

      • LOGICAL64

      • REAL16

    • Automatic allocation of lengths of character variables

    • at edit descriptor

    • Control over leading zeros in output of real values

    • Capability to use an coarray ultimate component object type to be an array or allocatable

    • Full support for the scaled-by-Pi trig functions (sinpi, tanpi, and so forth)

    • Update to the SYSTEM_CLOCK intrinsic argument COUNT_RATE

    • ISO_C_BINDING updated to support the new F_C_STRING and C_F_STRPOINTER subroutines

    • Conditional expressions

    • Conditional arguments (exclusive of .NIL.)

    • IEEE_ARITHMETIC routines are now PURE and SIMPLE

    • Updated line and statement length maximums, as well as the number of continuation lines

    • Added “Put with notify” capabilities

    • Subscripts and section subscripts support the @ identifier and can be specified using integer arrays.

    • Integer arrays can be used to specify bounds in an array specification.

  • AMD Turin Support (500W)

  • SLES15 SP7 x86_64 support

  • SLES15 SP7 aarch64 support

  • RHEL 9.6 x86_64 support

  • RHEL 9.6 aarch64 support

  • ROCm 6.4

  • NVIDIA SDK 25.05

  • Enhanced DWARF Support

Issues or Bugs Resolved

  • CAST-38682 Thornado linking error with CCE/20.0.0

  • CAST-38098 BerkeleyGW unrecoverable lib-4425 Fortran error when -homp

  • CAST-38096 use_device_ptr Fortran clause not correctly handled

  • CAST-37908 Fortran sanitize=address has problems in CCE 18 and CCE 19

  • CAST-37842 Memory leak with CCE Fortran with lots of open/close calls

  • CAST-37681 Fortran does not support use_device_addr with omp requires unified_shared_memory

  • CAST-37645 OpenACC error when renaming module variable

  • CAST-37556 CCE 19.0.0 RC -g causes some OpenMP GPU code to crash at runtime

  • CAST-37555 CCE 18.0.1 Fortran ftn-1426 recursive reshape error

  • CAST-37554 Fortran ICE when compiling submodules with subroutines that contain procedures

  • CAST-37534 Fortran internal compiler error with subroutine calls within submodule function block constructs

  • CAST-37455 Compilation performance issue with CCE 17.0.0/18.0.0

  • CAST-37351 Issue compiling coarray Fortran

  • CAST-37191 Fortran OpenMP runtime error when using map(alloc:) on MI300A (Minikin)

  • CAST-37086 CCE 17.0.0 linker bug

  • CAST-36485 Derived datatypes not thread safe

  • CAST-36453 Target openmp array reduction poor performance

  • CAST-36272 Fortran-derived type data transfer not working with CCE (OpenMP target offload)

  • CAST-35535 crayftn runtime error with user defined operator on associate name

  • CAST-35034 OpenACC reductions with array variables are not supported

  • CAST-35032 Bad performance with OpenACC kernels when used with assumed shape arrays

  • CAST-34762 Fortran and OpenAcc on AMD GPU

  • CAST-34739 Wrong data attribute for scalar in OpenACC data

  • CAST-33011 OpenACC compile time error with Fortran strings

  • CAST-33010 OpenACC error with zero-sized Fortran array

  • CAST-30651 Unable to use runtime variable in OpenMP thread_limit(var) clause

Compatibilities, incompatibilities, and differences

  • CCE 20.0.0 is not compatible with Fortran modules produced by prior versions of CCE. Compiling source code that uses a Fortran module produced by a prior version of CCE results in an ftn-1774 error message at compile time. If you encounter this error message, you must rebuild your Fortran modules with CCE 20.0.0.

  • LLVM backends for unsupported targets are deprecated and will be removed in a future release. LLVM backends for all supported CPU and GPU targets will be retained (X86, AArch64, NVPTX, and AMDGPU).

  • Support for the AMD GPU gfx940 target is deprecated and will be removed in a future release.

  • AMD GPU code object version 4 is deprecated and will be removed in a future release. The default code object version is 5, so this change only affects explicit use of the flag -mcode-object-version=4.

This CCE release is supported for the following configurations:

  • CSM 1.7 and HPCM 1.14

  • RHEL 8.10 (x86) and RHEL 9.5 & 9.6 (x86 & aarch64) with USS 1.4.

  • SLES15 SP7 ([HPCM only] x86 & aarch64) and SLES15 SP6 (x86 & aarch64) with COS 25.9

  • HPE Apollo 2000 Gen10Plus systems running RHEL 8.9

  • AMD GPU offloading support requires at least ROCm 6.0 and is tested up to ROCm 6.4

Documentation

  • Cray Compiling Environment Release Overview (20.0)

  • Cray Fortran Reference Manual

  • Cray C and C++ Quick Reference

  • Basic man pages: crayftn(1), craycc(1), crayCC(1), intro_openmp(7), intro_openacc(7)

  • Please see https://clang.llvm.org/docs/UsersManual.html or use the -help command line option for more information on using Clang.

Accessing product documentation

Access HPE documents and manpages for HPE CCE releases from:

  • HPE Support Center

    CCE user guides (i.e., Fortran, Perftools, Cassini, Quick Reference, Release Overview, and CSM/HPCM/Apollo2000/XD2000 user guides) before CPE 24.11 can be retrieved from the HPE Support Center and the CPE Online Documentation Page. See Available publications for a complete list.

    CCE and CSM/HPCM/Apollo2000/XD2000 user guides for CPE 24.11 (and later) are available at the online CPE documentation page at https://cpe.ext.hpe.com/docs/latest/index.html

    To narrow search results from the HPE Support Center website, enter the publication and release number (for example, S-5212 18.0.0).

    CPE installation guides for any release can be retrieve from the HPE Support Center website or the CPE online documentation site.

  • Release Package

    All HPE Cray Programming Environment (CPE) and HPE Cray Compiling Environment (CCE) documents are included in documentation tar files provided in the release package. See Available publications for details.

  • Manpages

    Manpages are textual help files available from the command line on HPE and HPE Cray systems. To access manpages, enter the man command followed by the name of the manpage. For more information about manpages, see the man(1) manpage by entering:

    hostname> man man
    

    Basic CCE man pages provided include crayftn(1), craycc(1), crayCC(1), intro_openmp(7), intro_openacc(7), and intro_MPI(3).

    The ftn(1), cc(1), and CC(1) manpages are disambiguation manpages that provide basic introductions to the compiler environment. For information specific to the CCE Fortran compiler, see the crayftn(1) manpage. For information specific to the CCE C, C++, or UPC compiler, see the clang(1) manpage.

    Alternatively, the craycc(1) and crayCC(1) manpages are aliases that redirect to the Clang C, C++, and UPC manpage.

  • Third-party documentation

    Third-party documentation is not provided by HPE.

Additional resources

Product

Documentation Source

Clang/LLVM C and C++ compiler

Documentation for the CCE C and C++ compilers is available here, in the clang(1) manpage, and can be accessed by entering the -help command line option.

GNU compilers

Documentation for the GNU C and Fortran compilers is available here

glibc

glibc documentation is available here

GLIB

GLIB documentation is available here

RPM

RPM documentation is available here

Installing CCE

CCE is distributed as a set of RPM packages.

To use the CCE compilers, install a CCE compiler driver package. There are three CCE compiler driver packages:

  • cce-<version>-environment-modules contains Environment Modules modulefiles for CCE. The modulefiles rely on the CrayPE Drivers (CC, cc, and ftn) to invoke CCE compilers and automatically link with libraries from other loaded CPE modulefiles.

  • cce-<version>-lmod contains Lmod modulefiles for CCE. The modulefiles rely on the CrayPE Drivers (CC, cc, and ftn) to invoke CCE compilers and automatically link with libraries from other loaded CPE modulefiles.

  • cce-<version>-moduleless contains the CCE moduleless compiler drivers crayCC, craycc, craycxx, and crayftn. The moduleless compiler drivers invoke CCE compilers without automatically linking with libraries from loaded CPE modulefiles.

Optionally, you can install:

  • cce-<version>-gpu-amd to compile applications for AMD GPUs.

  • cce-<version>-gpu-nvidia to compile applications for NVIDIA GPUs.

  • cce-<version>-pgas-ofi to compile applications for PGAS on the OFI network target.

  • cce-<version>-doc for online documentation, including man pages.

  • cce-<version>-devel for compiler development.

  • cce-<version>-set-default to set CCE <version> as the default CCE on the system.

For a minimal installation suitable for running applications built by CCE, install only cce-<version>-runtime. Also install any GPU and PGAS packages that the application requires.

Procedure

To install CCE RPMs, use a package manager or use the rpm command. A package manager handles RPM dependencies automatically. The rpm command does not handle RPM dependencies automatically. Zypper is the recommended package manager on SLES systems. DNF is the recommended package manager on RHEL systems. For details on configuring each package manager, refer to the package manager’s documentation.

To install a package with Zypper, run:

hostname## zypper install <package_name>

To install a package with DNF, run:

hostname## dnf install <package_name>

To install an RPM with the rpm command, run:

hostname## rpm -ivh <rpm_name>.<arch>.rpm

Setting the default CCE version

To set CCE version <version> as default:

hostname## /opt/cray/pe/admin-pe/set_default_files/set_default_cce_<version>

To use CCE:

hostname> module load PrgEnv-cray

This module defines the system paths and environment variables needed to build an application using CCE for supported systems and loads and links additional libraries as required. The exact modules loaded vary depending on the system type.

To switch to the x.y.z version of CCE:

hostname> module swap cce cce/x.y.z

Note that users at sites that opt to not enable CPE by default must source $CRAY_ENABLE_PE to enable use of the CPE module environment.

Compiling and linking code

To compile and link code, always use either the ftn, cc, or CC command. Due to the multiple compiling environments potentially available on HPE systems, the craype module provides compiler drivers that forward the ftn, cc, and CC commands to the commands required by specific compilers.