Skip to content

prgenv-gnu

Provides a set of tools and libraries built around the GNU compiler toolchain. It is the go to programming environment on all systems and target node types, that is it is the first that you should try out when starting to compile an application or create a python virtual environment.

alternatives to prgenv-gnu

The prgenv-nvfortran is for applications that require the NVIDIA Fortran compiler - typically because they need to use OpenACC or CUDA Fortran.

The linalg environment is similar to prgenv-gnu, with additional linear algebra and mesh partitioning algorithms.

Versioning

The naming scheme is prgenv-gnu/<version>, where <version> has the YY.M[M] format, for example November 2024 is 24.11, and January 2025 would be 25.1.

The release schedule is not fixed, with new versions will be released roughly every 3-6 months, when there is a compelling reason to update.

version node types system
25.06 (prerelease) gh200 daint
24.11 a100, gh200, zen2 daint, eiger, santis, clariden, bristen
24.7 gh200, zen2 daint, eiger, todi

The key updates in version 24.11:v1 from the 24.7 version were:

  • upgrading the versions of gcc@13 and cuda@12.6
  • upgrading cray-mpich to version 8.1.30
  • adding kokkos
  • adding gsl
all packages exposed via the default and modules views in v1
24.7:v2 changelog

The v2 update added netcdf, specifically the following packages:

Prerelease

The prgenv-gnu/25.06 uenv is currently available as a prerelease on daint, and is subject to change before the final release. Prereleases are tagged with rcN tags. Let us know if you find issues with the uenv.

Unstable Spack version used for the uenv

If you are building software through spack on top of a uenv, be aware that the 25.06 uenv is based on a prerelease version of Spack that contains many breaking changes. Using a commit other than the one used to build the uenv will likely result in issues.

The key updates in version 25.06 compared to 24.11 are:

  • upgrading GCC to version 14 and CUDA to version 12.9
  • upgrading cray-mpich to version 8.1.32
all packages exposed via the default and modules views in v1

The list of 25.06 package versions is yet to be finalized

How to use

The environment is designed as a fairly minimal set of

There are three ways to access the software provided by prgenv-gnu, once it has been started.

The simplest way to get started is to use the default file system view, which automatically loads all of the packages when the uenv is started.

test mpi compilers and python provided by prgenv-gnu/24.11

# start using the default view
$ uenv start --view=default prgenv-gnu/24.11:v1

# the python executable provided by the uenv is the default, and is a recent version
$ which python
/user-environment/env/default/bin/python
$ python --version 
Python 3.12.5

# the mpi compiler wrappers are also available
$ which mpicc
/user-environment/env/default/bin/mpicc
$ mpicc --version
gcc (Spack GCC) 13.3.0
$ gcc --version # the compiler wrapper uses the gcc provided by the uenv
gcc (Spack GCC) 13.3.0

The uenv provides modules for all of the software packages, which can be made available by using the modules view in No modules are loaded when a uenv starts, and have to be loaded individually using module load.

starting prgenv-gnu and listing the provided modules

$ uenv start prgenv-gnu/24.11:v1 --view=modules
$ module avail
    ---------------------------- /user-environment/modules ----------------------------
   aws-ofi-nccl/git.v1.9.2-aws_1.9.2    lua/5.4.6
   boost/1.86.0                         lz4/1.10.0
   cmake/3.30.5                         meson/1.5.1
   cray-mpich/8.1.30                    nccl-tests/2.13.6
   cuda/12.6.2                          nccl/2.22.3-1
   fftw/3.3.10                          netlib-scalapack/2.2.0
   fmt/11.0.2                           ninja/1.12.1
   gcc/13.3.0                           openblas/0.3.28
   gsl/2.8                              osu-micro-benchmarks/5.9
   hdf5/1.14.5                          papi/7.1.0
   kokkos-kernels/4.4.01                python/3.12.5
   kokkos-tools/develop                 superlu/5.3.0
   kokkos/4.4.01                        zlib-ng/2.2.1
   libtree/3.1.1

The gnu programming environment is a very good base for building software with Spack, because it provides compilers, MPI, Python and common packages like hdf5.

Check out the guide for using Spack with uenv.