Cray Programming Environment (CPE)¶
The Cray Programming Environment (CPE) is a suite of software: programming environments, compilers, libraries and tools.
The CPE is provided to users on Alps as containers.
CPE is the cray modules
The familiar modules that provide the Prgenv-gnu
and Prgenv-cray
programming environments, and packages like cray-python
and cray-fftw
, that will be familiar from the old Piz Daint system.
CPE is not supported on Alps
The Cray modules were provided on the old Daint system, and CSCS supported their use and provided software built on top of them.
Alps is a big change - the CPE modules are not provide as officially supported software. They are provided as is to users who still need to use them, however CSCS will not be able to provide detailed support for issues that arise when using them.
The recommended method for building and running software is to use uenv or containers.
CPE in a container¶
Available versions¶
The PrgEnv-gnu
and PrgEnv-cray
programming environments are provided as separate containers, instead of having both in one container, named gnu-$version
and cray-$version
respectively.
The version
is the CPE version in the container.
zen2 |
gh200 |
|
---|---|---|
cpe-gnu-24.7 |
❌ | ✅ |
cpe-cray-24.7 |
❌ | ✅ |
only available on gh200
The CPE container is only provided on systems with the "container engine" container runtime, which is currently the Grace-Hopper systems Daint, Clariden and Santis.
How to use¶
Before you start
To use the CPE containers as documented below, you need to set the EDF_PATH
environment variable.
To start a session with the CPE (see available-versions above):
Once the container starts up you can directly use the programming environment, because there will be modules loaded by default at startup.$ srun -p debug --environment=cpe-cray-24.07 --pty bash
$ module list
Currently Loaded Modules:
1) craype-arm-grace 4) cce/18.0.0 7) cray-mpich/8.1.30
2) craype-network-ofi 5) craype/2.7.32 8) cuda/12.6
3) xpmem/2.9.6 6) PrgEnv-cray/8.5.0 9) craype-accel-nvidia90
$ module avail
---- /opt/cray/pe/lmod/modulefiles/mpi/crayclang/17.0/ofi/1.0/cray-mpich/8.0 ----
cray-hdf5-parallel/1.14.3.1 cray-parallel-netcdf/1.12.3.13
---------- /opt/cray/pe/lmod/modulefiles/comnet/crayclang/17.0/ofi/1.0 ----------
cray-mpich-abi/8.1.30 cray-mpich/8.1.30 (L)
------------- /opt/cray/pe/lmod/modulefiles/compiler/crayclang/17.0 -------------
cray-hdf5/1.14.3.1 cray-libsci/24.07.0
------------------ /opt/cray/pe/lmod/modulefiles/mix_compilers ------------------
cce-mixed/18.0.0
---------------- /opt/cray/pe/lmod/modulefiles/cpu/arm-grace/1.0 ----------------
cray-fftw/3.3.10.8
------------- /opt/cray/pe/lmod/modulefiles/craype-targets/default --------------
craype-accel-amd-gfx908 craype-hugepages16M craype-network-none
craype-accel-amd-gfx90a craype-hugepages1G craype-network-ofi (L)
craype-accel-amd-gfx940 craype-hugepages256M craype-network-ucx
craype-accel-amd-gfx942 craype-hugepages2G craype-x86-genoa
craype-accel-host craype-hugepages2M craype-x86-milan-x
craype-accel-nvidia70 craype-hugepages32M craype-x86-milan
craype-accel-nvidia80 craype-hugepages4M craype-x86-rome
craype-accel-nvidia90 (L) craype-hugepages512M craype-x86-spr-hbm
craype-arm-grace (L) craype-hugepages64M craype-x86-spr
craype-hugepages128M craype-hugepages8M craype-x86-trento
---------------------- /opt/cray/pe/lmod/modulefiles/core -----------------------
PrgEnv-cray/8.5.0 (L) cray-libsci_acc/24.07.0 cray-python/3.11.7
cce/18.0.0 (L) cray-pmi/6.1.15.19 craype/2.7.32 (L)
----------------------------- /opt/cray/modulefiles -----------------------------
xpmem/2.9.6 (L)
----------------------------- /opt/cscs/modulefiles -----------------------------
cuda/12.6 (L)
$ CC --version
Cray clang version 18.0.0 (0e4696aa65fa9549bd5e19c216678cc98185b0f7)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/cray/pe/cce/18.0.0/cce-clang/aarch64/share/../bin
The recommended way of using CPE in a container is to start the container, and use $SCRATCH
and $STORE
to interact with persistent data. Please remember that any data that is written to a directory that is not mounted from the host system will be lost, after the container stops.
Note
By default, the paths /capstor
, /iopsstor
are mounted to the same paths inside the container.
Additionally /users
will be mounted at /users.host
, so you can access data in your home folder, but with a slightly different path. This is on purpose, and you can override this behaviour by writing your own EDF file, especially using the key base_environment
, referencing the predefined CPE environment files and override what you would like to change.