Cray Compiler Overview

Software enhancements and support

This section describes software enhancements and support details for the HPE CCE 19.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 19.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 19.0.0 base.

Miscellaneous features and enhancements

  • LLVM 19 base

  • CCE now links against its own build of ROCm Device Libraries for HIP and OpenMP offload code when targeting AMD GPUs, rather than linking against ROCm Device Libraries from an external ROCm install. This provision can be overridden with the “–rocm-device-lib-path” flag.

  • Native CUDA or HIP device functions can be called from OpenMP offload regions. This process requires explicitly passing the CUDA or HIP device object files to the OpenMP device linker using the device linker pass-through compiler flags, “-Wc” for Fortran and “-Xoffload-linker” for C/C++.

  • CCE Fortran now only pattern matches to Cray Libsci calls if a cray-libsci module is loaded or the CCE Fortran driver auto detects a compatible Cray Libsci installation.

  • Added the following OpenACC features:

    • Update directives processed in the order they appear

    • Enforce restrictions on variables allowed in the deviceptr clause

    • Support for two reference counters

    • Support radeon device type

    • Support init, shutdown, and set directives

    • Support acc_get_default_async and acc_set_default_async routines

    • Support auto loop clause

    • Migrated Fortran openacc_lib module into libmodules

  • Added the following OpenMP 5.1/5.2 features:

    • Dispatch support

    • Support ‘omp_set_num_teams’, ‘omp_get_max_teams’, ‘omp_set_teams_thread_limit’, ‘omp_get_teams_thread_limit’ routines

    • Support ‘indirect’ clause on declare target directive

    • Change behavior of order(concurrent) related to reproducibility

    • ‘destroy’ clause on depobj construct now accepts an argument

    • Support ‘omp_aligned_alloc’, ‘omp_calloc’, ‘omp_aligned_calloc’, ‘omp_realloc’ MM routines

    • Support ‘omp_all_memory’ keyword in ‘depend’ clause

    • Support ‘OMP_NUM_TEAMS’ and ‘OMP_TEAMS_THREAD_LIMIT’ variables

    • Support ‘target_device’ selector set

    • Support iterators in ‘map’ clause and motion clauses

    • Handle DV-based objects in has_device_addr/use_device_addr clauses

    • Allow indirect calls to device procedures

    • Support OpenMP indirect clause for derived type without explicit mapper

    • Support ‘assumes’, ‘begin assumes’, and ‘assume’ directives

    • Support ‘target_device’ selector set

    • Support ‘unconstrained’ and ‘reproducible’ modifiers in ‘order’ clause

    • Support ‘omp_all_memory’ keyword in ‘depend’ clause

    • Support ‘dispatch’ construct and ‘adjust_args’, ‘append_args’ clauses for ‘declare variant’

    • Support ‘begin declare variant’ directive

    • Support indirect function calls in mapped structs

    • Distinguish “pointee” vs “pointer” for DV-based list items

    • Support iterators in motion clauses

    • Automatically translate/attach C++ vtable pointers when mapping C++ objects

    • Explicit indirect function pointer mapping

    • Support virtual function calls for mapped class objects on device

    • Support ‘indirect’ clause on declare target directive

    • Register C++ vtable with OpenMP runtime to support virtual calls on GPU

    • Support ‘omp_all_memory’ keyword in ‘depend’ clause

  • Added the following Fortran 2023 features:

    • Allow an object with a coarray ultimate component to be array or allocatable

    • Coarray put with notify

    • RANK clause

    • Use integer arrays to specify subscripts and section subscripts

    • Reduction Specifier for DO CONCURRENT to Support Intrinsic Functions

    • Error conditions in collectives

  • Transitioned to LLVM provided PTX Generation

  • GNU OpenMP Interoperability

  • Optimized AMD Turin Support

  • Initial support for Intel Emerald Rapids

  • RHEL 9.5 x86_64 support

  • RHEL 9.5 aarch64 support

  • ROCm 6.3

  • NVIDIA SDK 24.11

  • Enhanced DWARF Support

Compatibilities, incompatibilities, and differences

This CCE release is supported on:

  • HPE Cray supercomputer systems running CSM with SLES15 SP6 COS 25.3 (COS Base 3.3.0/USS 1.3.0) or SLES15 SP5 COS 24.7 (COS Base 3.1.0/USS 1.1.0)

  • HPE Cray supercomputer systems running HPCM with SLES15 SP6 COS 25.3 (COS Base 3.3.0/USS 1.3.0) or SLES15 SP5 COS 24.7 (COS Base 3.1.0/USS 1.1.0)

  • HPE Cray supercomputer systems running HPCM with RHEL 8.10

  • 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.3

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. You can install the main cce-<version> package to use the CCE C, C++, and Fortran compilers. 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 manpages.

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

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.