diff --git a/config.yaml b/config.yaml index 5a344e17..66b1464b 100644 --- a/config.yaml +++ b/config.yaml @@ -174,8 +174,10 @@ uenvs: # zen2 and zen3 targets use the same recipe zen2: 24.7/mc zen3: 24.7/mc + gh200: 24.7/gh200 deploy: eiger: [zen2] + todi: [gh200] quantumespresso: "v7.1": recipes: diff --git a/docs/uenv-prgenv-gnu.md b/docs/uenv-prgenv-gnu.md new file mode 100644 index 00000000..26abf7be --- /dev/null +++ b/docs/uenv-prgenv-gnu.md @@ -0,0 +1,119 @@ +# prgenv-gnu uenv + +Provides a small set of tools and libraries built around the GNU compiler toolchain. + +It provides the GCC compilers (gcc, g++ and gfortran), MPI (cray-mpich), Python, cuda (on systems with NVIDIA GPUs). + +The following packages are provided: + +* `aws-ofi-nccl` +* `cmake` +* `cray-mpich` + * built with `cuda` support on systems with NVIDIA GPUs +* `cuda` + * only on systems with NVIDIA GPUs +* `fftw` +* `fmt` +* `gcc` +* `hdf5` +* `libtree` +* `meson` +* `nccl-tests` +* `nccl` +* `ninja` +* `openblas` + * built with OpenMP support +* `osu-micro-benchmarks` +* `python` + * a recent version of python 3 + +## 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. + +=== "views" + + The simplest way to get started is to use the file system view. A single view is provided: + + * before v24.7: the `default` view + * since v24.7: the `develop` view + + ``` + # set when starting the uenv + uenv start --view=develop prgenv-gnu/24.7:v1 + + # set after starting + # NOTE: this method will be deprecated + uenv start prgenv-gnu/24.7:v1 + uenv view develop + + # example: the python executable provided by the uenv will be available + which python + /user-environment/env/default/bin/python + + # example: the python version is more recent that the 3.6 version in /usr/bin + python --version + Python 3.12.1 + ``` + + +=== "modules" + + The uenv provides modules for all of the software packages. + The modules are not available by default when a uenv starts, and have to be enabled. + + ```bash + # with v4 of uenv: + uenv start prgenv-gnu/24.7 + uenv modules use + + # with v5 of uenv: + + # method 1: enable modules when the uenv is started + uenv start --view=modules prgenv-gnu/24.7 + + # method 2: enable modules after the uenv has started + uenv start prgenv-gnu/24.7 + uenv view modules + ``` + +=== "spack" + + To use Spack, you can check the [guide for using Spack with uenv](https://eth-cscs.github.io/alps-uenv/uenv-compilation-spack/). + + !!! note + + If using the most recent release of uenv and a compatible uenv, load the `spack` view: + + ```bash + # start the uenv with the spack view + # note: the version might differ from the one in this example + uenv start --view=spack prgenv-gnu/24.7:v1 + ``` + + Loading the `spack` view sets the following environment variables (with example values): + + ``` + UENV_SPACK_CONFIG_PATH /user-environment/config + UENV_SPACK_URL https://github.com/spack/spack.git + UENV_SPACK_COMMIT b5fe93fee1eec46a0750bd340198bffcb92ff9eec + ``` + +## platform specific hints + +=== "gh200" + + The version of MPI (cray-mpich) provided on Grace Hopper systems (Todi at the time of writing) supports GPU-direct or GPU aware communication, whereby pointers to GPU buffers can be passed directly to MPI calls. + No special steps have to be taken to compile your code, however the following environment variable must be set to run an application that uses GPU pointers: + + ```bash + export MPICH_GPU_SUPPORT_ENABLED=1 + ``` + + +=== "multicore" + + There are no platform-specific notes for multicore. + diff --git a/mkdocs.yml b/mkdocs.yml index 88fe1ee3..27b2a2f8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -5,10 +5,11 @@ nav: - 'Overview': uenv-overview.md - 'cp2k': uenv-cp2k.md - 'gromacs': uenv-gromacs.md + - 'lammps': uenv-lammps.md - 'linaro-forge': uenv-linaro-forge.md - 'namd': uenv-namd.md + - 'prgenv-gnu': uenv-prgenv-gnu.md - 'quantumespresso': uenv-qe.md - - 'quantumespresso-gh200': uenv-qe-gh200.md - 'vasp': uenv-vasp.md - 'Developers': - 'tutorial: application': pkg-application-tutorial.md diff --git a/recipes/prgenv-gnu/24.7/gh200/compilers.yaml b/recipes/prgenv-gnu/24.7/gh200/compilers.yaml new file mode 100644 index 00000000..8209f0c2 --- /dev/null +++ b/recipes/prgenv-gnu/24.7/gh200/compilers.yaml @@ -0,0 +1,5 @@ +bootstrap: + spec: gcc@12.3 +gcc: + specs: + - gcc@13.2 diff --git a/recipes/prgenv-gnu/24.7/gh200/config.yaml b/recipes/prgenv-gnu/24.7/gh200/config.yaml new file mode 100644 index 00000000..58805955 --- /dev/null +++ b/recipes/prgenv-gnu/24.7/gh200/config.yaml @@ -0,0 +1,7 @@ +name: prgenv-gnu +spack: + commit: releases/v0.22 + repo: https://github.com/spack/spack.git +store: /user-environment +description: GNU Compiler toolchain with cray-mpich, Python, CMake and other development tools. + diff --git a/recipes/prgenv-gnu/24.7/gh200/environments.yaml b/recipes/prgenv-gnu/24.7/gh200/environments.yaml new file mode 100644 index 00000000..967b59ff --- /dev/null +++ b/recipes/prgenv-gnu/24.7/gh200/environments.yaml @@ -0,0 +1,33 @@ +gcc-env: + compiler: + - toolchain: gcc + spec: gcc + mpi: + spec: cray-mpich@8.1.29 + gpu: cuda + unify: true + specs: + - aws-ofi-nccl@master + - cmake + - cuda@12.4 + - fftw + - fmt + - hdf5 + - libtree + - meson + - nccl + - nccl-tests + - ninja + - openblas threads=openmp + - osu-micro-benchmarks@5.9 + - python@3.12 + variants: + - +mpi + - +cuda + - cuda_arch=90 + views: + default: + link: roots + uenv: + prefix_paths: + LD_LIBRARY_PATH: [lib, lib64] diff --git a/recipes/prgenv-gnu/24.7/gh200/extra/reframe.yaml b/recipes/prgenv-gnu/24.7/gh200/extra/reframe.yaml new file mode 100644 index 00000000..b71f2797 --- /dev/null +++ b/recipes/prgenv-gnu/24.7/gh200/extra/reframe.yaml @@ -0,0 +1,11 @@ +default: + features: + - cuda + - mpi + - osu-micro-benchmarks + - openmp + - serial + cc: mpicc + cxx: mpic++ + ftn: mpifort + activation: /user-environment/env/default/activate.sh diff --git a/recipes/prgenv-gnu/24.7/gh200/modules.yaml b/recipes/prgenv-gnu/24.7/gh200/modules.yaml new file mode 100644 index 00000000..623307b0 --- /dev/null +++ b/recipes/prgenv-gnu/24.7/gh200/modules.yaml @@ -0,0 +1,23 @@ +modules: + # Paths to check when creating modules for all module sets + prefix_inspections: + bin: + - PATH + lib: + - LD_LIBRARY_PATH + lib64: + - LD_LIBRARY_PATH + + default: + arch_folder: false + # Where to install modules + roots: + tcl: /user-environment/modules + tcl: + all: + autoload: none + hash_length: 0 + exclude_implicits: true + exclude: ['%gcc@7.5.0', 'gcc %gcc@7.5.0'] + projections: + all: '{name}/{version}'