Skip to content

Commit

Permalink
add gh200 prgenv-gnu/24.7 recipe (#118)
Browse files Browse the repository at this point in the history
* add gh200 prgenv-gnu/24.7 recipe
* add prgenv-gnu docs, and clean up some old docs
  • Loading branch information
bcumming authored Jul 1, 2024
1 parent a43037b commit 6d4f4c1
Show file tree
Hide file tree
Showing 8 changed files with 202 additions and 1 deletion.
2 changes: 2 additions & 0 deletions config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
119 changes: 119 additions & 0 deletions docs/uenv-prgenv-gnu.md
Original file line number Diff line number Diff line change
@@ -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.

3 changes: 2 additions & 1 deletion mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions recipes/prgenv-gnu/24.7/gh200/compilers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
bootstrap:
spec: [email protected]
gcc:
specs:
- [email protected]
7 changes: 7 additions & 0 deletions recipes/prgenv-gnu/24.7/gh200/config.yaml
Original file line number Diff line number Diff line change
@@ -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.

33 changes: 33 additions & 0 deletions recipes/prgenv-gnu/24.7/gh200/environments.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
gcc-env:
compiler:
- toolchain: gcc
spec: gcc
mpi:
spec: [email protected]
gpu: cuda
unify: true
specs:
- aws-ofi-nccl@master
- cmake
- [email protected]
- fftw
- fmt
- hdf5
- libtree
- meson
- nccl
- nccl-tests
- ninja
- openblas threads=openmp
- [email protected]
- [email protected]
variants:
- +mpi
- +cuda
- cuda_arch=90
views:
default:
link: roots
uenv:
prefix_paths:
LD_LIBRARY_PATH: [lib, lib64]
11 changes: 11 additions & 0 deletions recipes/prgenv-gnu/24.7/gh200/extra/reframe.yaml
Original file line number Diff line number Diff line change
@@ -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
23 changes: 23 additions & 0 deletions recipes/prgenv-gnu/24.7/gh200/modules.yaml
Original file line number Diff line number Diff line change
@@ -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: ['%[email protected]', 'gcc %[email protected]']
projections:
all: '{name}/{version}'

0 comments on commit 6d4f4c1

Please sign in to comment.