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-mapor-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
defaultanddefaultmapclauses
For OpenMP 5.2:
maskedconstruct withfilterclauseOMP_PLACESextended syntaxFortran:
allocatorsconstruct forALLOCATEstatementMiscellaneous new syntax allowed by specification (e.g.
declare target,ordered, metadirective)
For OpenMP 5.1:
Fortran:
thread_limitclause ontargetFortran:
tileandunrollconstructsFortran: Allow an
BLOCK…ENDBLOCKas OpenMP structured blockstrictextension fornum_tasksandgrain_sizeontaskloopmaskedconstruct and related combined constructsprimarythread affinity policy_DEVsuffix for device-specific environment variablesomp_target_is_accessibleroutineAllow
scandirective 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:
TOKENIZESPLITPREVIOUSNEXT
KINDdata types withinISO_FORTRAN_ENVupdates, including:LOGICAL8LOGICAL16LOGICAL32LOGICAL64REAL16
Automatic allocation of lengths of character variables
atedit descriptorControl 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_CLOCKintrinsic argumentCOUNT_RATEISO_C_BINDINGupdated to support the newF_C_STRINGandC_F_STRPOINTERsubroutinesConditional expressions
Conditional arguments (exclusive of
.NIL.)IEEE_ARITHMETICroutines are nowPUREandSIMPLEUpdated 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
-hompCAST-38096
use_device_ptrFortran clause not correctly handledCAST-37908 Fortran
sanitize=addresshas problems in CCE 18 and CCE 19CAST-37842 Memory leak with CCE Fortran with lots of open/close calls
CAST-37681 Fortran does not support
use_device_addrwith omp requiresunified_shared_memoryCAST-37645 OpenACC error when renaming module variable
CAST-37556 CCE 19.0.0 RC
-gcauses some OpenMP GPU code to crash at runtimeCAST-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
crayftnruntime error with user defined operator on associate nameCAST-35034 OpenACC reductions with array variables are not supported
CAST-35032 Bad performance with OpenACC
kernelswhen used with assumed shape arraysCAST-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-1774error 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
-helpcommand 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
mancommand followed by the name of the manpage. For more information about manpages, see theman(1)manpage by entering:hostname> man man
Basic CCE
manpages provided includecrayftn(1),craycc(1),crayCC(1),intro_openmp(7),intro_openacc(7), andintro_MPI(3).The
ftn(1),cc(1), andCC(1)manpages are disambiguation manpages that provide basic introductions to the compiler environment. For information specific to the CCE Fortran compiler, see thecrayftn(1)manpage. For information specific to the CCE C, C++, or UPC compiler, see theclang(1)manpage.Alternatively, the
craycc(1)andcrayCC(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 |
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-modulescontains Environment Modules modulefiles for CCE. The modulefiles rely on the CrayPE Drivers (CC,cc, andftn) to invoke CCE compilers and automatically link with libraries from other loaded CPE modulefiles.cce-<version>-lmodcontains Lmod modulefiles for CCE. The modulefiles rely on the CrayPE Drivers (CC,cc, andftn) to invoke CCE compilers and automatically link with libraries from other loaded CPE modulefiles.cce-<version>-modulelesscontains the CCE moduleless compiler driverscrayCC,craycc,craycxx, andcrayftn. The moduleless compiler drivers invoke CCE compilers without automatically linking with libraries from loaded CPE modulefiles.
Optionally, you can install:
cce-<version>-gpu-amdto compile applications for AMD GPUs.cce-<version>-gpu-nvidiato compile applications for NVIDIA GPUs.cce-<version>-pgas-ofito compile applications for PGAS on the OFI network target.cce-<version>-docfor online documentation, including man pages.cce-<version>-develfor compiler development.cce-<version>-set-defaultto 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.