cpeAMD toolchain¶
Note: The options are for the aocc.py file included in this repository and are
not the same as those for the repository at CSCS.
Note about the compilers¶
- AMD/ROCm 5.0.2 is based on LLVM 14.0.0
Available options¶
The cpeAMD toolchain supports the common toolchain options, the additional AMD flags and some additional Cray-specific flags, two of which are really just redefinitions of standard compiler flags.
Default toolchain options that may not behave as expected¶
-
rpath: rpath linking in EasyBuild has not been properly tested in the HPE Cray PE. -
unroll: As it is not clear from the docunentation for the Fortran compiler which options should be set to enable or disable (if any at all)
AMD-specific toolchain options¶
| Option | Categorie | What? |
|---|---|---|
| lto | code generation | Enable Link Time Optimization (in the default 'full' mode) |
| offload-lto | code generation | Enable LTO for offload compilation (in the default 'full' mode) |
cpeAMD-specific flags (coming from the HPE Cray PE compiler wrappers)¶
| Option | Categorie | What? |
|---|---|---|
| dynamic | code generation | Generate dynamically linked executable (default: True) |
| mpich-mt | parallelism | Alternate Cray-MPICH library for MT support (default: False) |
mpich-mt: Directs the driver to link in an alternate version of the Cray-MPICH library which provides fine-grained multi-threading support to applications that perform MPI operations within threaded regions. (default: False)
Two further options trigger different compiler flags than in the GCC toolchain: verbose
and optarch but have otherwise the same meaning.
Mapping of options onto compiler flags¶
Compiler optimization level¶
The common options translate into:
| Option | Flag |
|---|---|
| noopt | -O0 |
| lowopt | -O1 |
| defaultopt | -O2 -fvectorize -fslp-vectorize |
| opt | -O3 |
Other optimization-related options (and see also parallelism below):
| Option | Flag |
|---|---|
| unroll | -funroll-loops |
| optarch | TODO |
Floating point precision¶
The decision of our mapping is based partly on information from Cray and partly on looking through various manuals on Clang.
- Level
strict: We simply stick to-ffp-model=strict. This automatically disables all of the-ffast-mathenablements so there is no need to add-fno-fast-math. Note that at this level, fused multiply adds are disabled. - Level
precise: We stick to-ffp-model=preciseand add-ffp-contract=fast-honor-pragmas. - Default level: Currently the same as
strict. - Level
loose: Set to-ffp-model=fastbut try to turn on again a few safeguards:-ffp-contract=fast-honor-pragmas,-fhonor-infinities,-fhonor-nans,-fsigned-zeros. - Level
veryloose: Set to-ffp-model=fast
Note: Very recnet versions of clang add -ffp-contract=fast-honor-pragmas which
may be interesting to add to precise, defaultprec and loose but is not
yet supported by AOCC 2.2.
| Option | Flag |
|---|---|
| strict | -ffp-model=strict |
| precise | -ffp-model=precise |
| defaultprec | -ffp-model=precise |
| loose | -ffp-model=fast -fhonor-infinities -fhonor-nans -fsigned-zeros |
| veryloose | -ffp-model=fast |
Other floating-point optimisation and accuracy-related flags:
| Option | What? |
|---|---|
| ieee | Not supported in clang/flang |
Common parallelism-related options¶
| Option | Flag |
|---|---|
| vectorize | False: -fno-vectorize -fno-slp-vectorize |
| True: -fvectorize -fslp-vectorize | |
| loop | -ftree-switch-conversion -floop-interchange -floop-strip-mine -floop-block |
| openmp | -fopenmp |
| usempi | No compiler flags |
| mpich-mt | -craympich-mt |
Code generation and linking options¶
| Option | Flag |
|---|---|
| dynamic | No flag as this is currently the only mode supported |
| lto | -flto |
| offload-lto | -foffload-lto |
| 32bit | -m32 |
| debug | -g |
| pic | -fPIC |
| packed-linker-options | Pack the linker options as comma separated list (default: False) |
| shared | -shared |
| static | -static |
| rpath | Use RPATH wrappers when --rpath is enabled in EasyBuild configuration (default: True) |
NOTE: rpath has not yet been checked and is likely broken. There is a better way to do this in the /hPE Cray PE
than what EasyBuild does as the wrappers already support rpath linking.
Source-related options¶
| Option | Flag |
|---|---|
| cstd | -std=%(value)s |
| i8 | -fdefault-integer-8 |
| r8 | -fdefault-real-8 |
| f2c | -ff2c |
Miscellaneous options¶
| Option | Flag |
|---|---|
| verbose | -craype-verbose |