Skip to content

Commit 1aa18ee

Browse files
authored
add prgenv-[gnu,nvfortran] docs (#50)
* add prgenv-nvfortran uenv docs * add prgenv-gnu uenv docs
1 parent 741fa50 commit 1aa18ee

File tree

2 files changed

+229
-4
lines changed

2 files changed

+229
-4
lines changed

docs/software/prgenv/prgenv-gnu.md

Lines changed: 123 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,126 @@
11
[](){#ref-uenv-prgenv-gnu}
22
# prgenv-gnu
33

4-
!!! todo
5-
write some docs
4+
Provides a set of tools and libraries built around the GNU compiler toolchain.
5+
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.
6+
7+
!!! note "alternatives to prgenv-gnu"
8+
9+
The [`prgenv-nvfortran`][ref-uenv-prgenv-nvfortran] is for applications that require the NVIDIA Fortran compiler - typically because they need to use OpenACC or CUDA Fortran.
10+
11+
The [`linalg`][ref-uenv-linalg] environment is similar to prgenv-gnu, with additional linear algebra and mesh partitioning algorithms.
12+
13+
## Versioning
14+
15+
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`.
16+
17+
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.
18+
19+
| version | node types | system |
20+
|-----------|-----------|--------|
21+
| 24.7 | gh200, zen2 | daint, eiger, todi |
22+
| 24.11 | a100, gh200, zen2 | daint, eiger, santis, clariden, bristen |
23+
24+
=== "24.11"
25+
26+
The key updates in version 24.11 were:
27+
28+
* upgrading the versions of gcc@13 and [email protected]
29+
* upgrading cray-mpich to version 8.1.30
30+
* adding kokkos
31+
* adding gsl
32+
33+
A complete list of packages exposed via the `default` and `modules` views is:
34+
35+
* [[email protected]_1.9.2](https://packages.spack.io/package.html?name=aws-ofi-nccl)
36+
* [[email protected]](https://packages.spack.io/package.html?name=boost)
37+
* [[email protected]](https://packages.spack.io/package.html?name=cmake)
38+
* [[email protected]](https://packages.spack.io/package.html?name=cray-mpich)
39+
* [[email protected]](https://packages.spack.io/package.html?name=cuda)
40+
* in the `gh200` and `a100` images
41+
* [[email protected]](https://packages.spack.io/package.html?name=fftw)
42+
* [[email protected]](https://packages.spack.io/package.html?name=fmt)
43+
* [[email protected]](https://packages.spack.io/package.html?name=gcc)
44+
* [[email protected]](https://packages.spack.io/package.html?name=gsl)
45+
* [[email protected]](https://packages.spack.io/package.html?name=hdf5)
46+
* [[email protected]](https://packages.spack.io/package.html?name=kokkos-kernels)
47+
* [kokkos-tools@develop](https://packages.spack.io/package.html?name=kokkos-tools)
48+
* [[email protected]](https://packages.spack.io/package.html?name=kokkos)
49+
* [[email protected]](https://packages.spack.io/package.html?name=libtree)
50+
* [[email protected]](https://packages.spack.io/package.html?name=lua)
51+
* [[email protected]](https://packages.spack.io/package.html?name=lz4)
52+
* [[email protected]](https://packages.spack.io/package.html?name=meson)
53+
* [[email protected]](https://packages.spack.io/package.html?name=nccl-tests)
54+
* [[email protected]](https://packages.spack.io/package.html?name=nccl)
55+
* [[email protected]](https://packages.spack.io/package.html?name=netlib-scalapack)
56+
* [[email protected]](https://packages.spack.io/package.html?name=ninja)
57+
* [[email protected]](https://packages.spack.io/package.html?name=openblas)
58+
* built with the OpenMP threading back end
59+
* [[email protected]](https://packages.spack.io/package.html?name=osu-micro-benchmarks)
60+
* [[email protected]](https://packages.spack.io/package.html?name=papi)
61+
* [[email protected]](https://packages.spack.io/package.html?name=python)
62+
* [[email protected]](https://packages.spack.io/package.html?name=superlu)
63+
* [[email protected]](https://packages.spack.io/package.html?name=zlib-ng)
64+
65+
## How to use
66+
67+
The environment is designed as a fairly minimal set of
68+
69+
There are three ways to access the software provided by prgenv-gnu, once it has been started.
70+
71+
=== "the default view"
72+
73+
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.
74+
75+
!!! example "test mpi compilers and python provided by prgenv-gnu/24.11"
76+
```bash
77+
# start using the default view
78+
> uenv start --view=default prgenv-gnu/24.11:v1
79+
80+
# the python executable provided by the uenv is the default, and is a recent version
81+
> which python
82+
/user-environment/env/default/bin/python
83+
> python --version
84+
Python 3.12.5
85+
86+
# the mpi compiler wrappers are also available
87+
> which mpicc
88+
/user-environment/env/default/bin/mpicc
89+
> mpicc --version
90+
gcc (Spack GCC) 13.3.0
91+
> gcc --version # the compiler wrapper uses the gcc provided by the uenv
92+
gcc (Spack GCC) 13.3.0
93+
```
94+
95+
=== "modules"
96+
97+
The uenv provides modules for all of the software packages, which can be made available by using the `modules` view in
98+
No modules are loaded when a uenv starts, and have to be loaded individually using `module load`.
99+
100+
!!! example "starting prgenv-gnu and listing the provided modules"
101+
```bash
102+
> uenv start prgenv-gnu/24.11:v1 --view=modules
103+
> module avail
104+
---------------------------- /user-environment/modules ----------------------------
105+
aws-ofi-nccl/git.v1.9.2-aws_1.9.2 lua/5.4.6
106+
boost/1.86.0 lz4/1.10.0
107+
cmake/3.30.5 meson/1.5.1
108+
cray-mpich/8.1.30 nccl-tests/2.13.6
109+
cuda/12.6.2 nccl/2.22.3-1
110+
fftw/3.3.10 netlib-scalapack/2.2.0
111+
fmt/11.0.2 ninja/1.12.1
112+
gcc/13.3.0 openblas/0.3.28
113+
gsl/2.8 osu-micro-benchmarks/5.9
114+
hdf5/1.14.5 papi/7.1.0
115+
kokkos-kernels/4.4.01 python/3.12.5
116+
kokkos-tools/develop superlu/5.3.0
117+
kokkos/4.4.01 zlib-ng/2.2.1
118+
libtree/3.1.1
119+
```
120+
121+
=== "Spack"
122+
123+
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.
124+
125+
[Check out the guide for using Spack with uenv][ref-building-uenv-spack].
126+
Lines changed: 106 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,109 @@
11
[](){#ref-uenv-prgenv-nvfortran}
22
# prgenv-nvfortran
33

4-
!!! todo
5-
write some docs
4+
The `prgenv-nvfortran` uenv provides a set of tools and libraries for building applications that need the NVIDIA Fortran compiler
5+
Specifically, it is intended for building and running applications that **require** one of the following:
6+
* OpenACC for GPU acceleration;
7+
* CUDA Fortran for GPU acceleration.
8+
9+
!!! note
10+
By default, use the `prgenv-gnu` toolchain for a generic environment for building GPU applications.
11+
It provides CUDA and libraries with GPU support enabled for the Grace-Hopper nodes, the gnu compiler toolchain that it provides has better C and C++ standards complianace, and it also provides more libraries and tools than this `nvfortran` uenv.
12+
13+
## Versioning
14+
15+
The naming scheme is `prgenv-nvfortran/<version>:v<i>`, where `<version>` matches the version of the NVIDIA HPC SDK.
16+
17+
* the SDK is released every two months, and is numbered in the `YY.M[M]` format, e.g. `24.1` and `24.11`.
18+
* the `prgenv-nvfortran` will be released three times a year (every second NVHPC release).
19+
20+
The currently supported versions are:
21+
22+
| `prgennv-nvhpc` | NVHPC |
23+
| -------------- | ----- |
24+
| 24.11 | 24.11 |
25+
26+
=== "24.11"
27+
28+
Version 24.11 provides the following software:
29+
30+
* [[email protected]](https://packages.spack.io/package.html?name=cmake)
31+
* [[email protected]](https://packages.spack.io/package.html?name=cray-mpich)
32+
* [[email protected]](https://packages.spack.io/package.html?name=cuda)
33+
* [[email protected]](https://packages.spack.io/package.html?name=fftw)
34+
* [[email protected]](https://packages.spack.io/package.html?name=fmt)
35+
* [[email protected]](https://packages.spack.io/package.html?name=gcc)
36+
* [[email protected]](https://packages.spack.io/package.html?name=hdf5)
37+
* [[email protected]](https://packages.spack.io/package.html?name=libtree)
38+
* [[email protected]](https://packages.spack.io/package.html?name=lua)
39+
* [[email protected]](https://packages.spack.io/package.html?name=lz4)
40+
* [[email protected]](https://packages.spack.io/package.html?name=meson)
41+
* [[email protected]](https://packages.spack.io/package.html?name=netcdf-c)
42+
* [[email protected]](https://packages.spack.io/package.html?name=netcdf-fortran)
43+
* [[email protected]](https://packages.spack.io/package.html?name=ninja)
44+
* [[email protected]](https://packages.spack.io/package.html?name=nvhpc)
45+
* [[email protected]](https://packages.spack.io/package.html?name=nvpl-blas)
46+
* [[email protected]](https://packages.spack.io/package.html?name=nvpl-lapack)
47+
* [[email protected]](https://packages.spack.io/package.html?name=osu-micro-benchmarks)
48+
* [[email protected]](https://packages.spack.io/package.html?name=python)
49+
* [[email protected]](https://packages.spack.io/package.html?name=zlib-ng)
50+
51+
??? note "I need a different version"
52+
If you need a version of the NVHPC SDK that is not provided, e.g. the 25.1 version that falls between 24.11 and 25.4, make a request on the [CSCS service desk](https://jira.cscs.ch/plugins/servlet/desk).
53+
54+
## How to use
55+
56+
The image is only provided on Alps systems that have NVIDIA GPUs.
57+
To see which versions have been installed on a system:
58+
59+
```bash
60+
# search for uenv on the current system
61+
uenv image find prgenv-nvfortran
62+
63+
# search for uenv on all systems
64+
uenv image find prgenv-nvfortran@*
65+
66+
# pull a version
67+
uenv image find prgenv-nvfortran/24.11:v1
68+
```
69+
70+
=== "the nvfort view"
71+
72+
The nvfort view loads all of the packages into your environment (equivalent to loading all the modules at once):
73+
74+
```bash
75+
uenv start prgenv-nvfortran/24.11:v1 --view=nvfort
76+
mpif90 --version
77+
```
78+
79+
The above example shows that the MPI compiler wrappers are using the underlying NVIDIA compiler.
80+
The following wrappers are available:
81+
82+
* `mpif77`
83+
* `mpif90`
84+
* `mpifort`
85+
86+
And the following C/C++ wrapers are available:
87+
88+
* `mpicc`
89+
* `mpicxx`
90+
91+
=== "the modules view"
92+
93+
The modules view will start the uenv, and make a set of modules available:
94+
95+
```
96+
> uenv start prgenv-nvfortran/24.11:v1 --view=nvfort,modules
97+
> module avail
98+
---------------------------- /user-environment/modules ----------------------------
99+
aws-ofi-nccl/master libtree/3.1.1 ninja/1.12.1
100+
cmake/3.30.5 lua/5.4.6 nvhpc/24.11
101+
cray-mpich/8.1.30 lz4/1.10.0 nvpl-blas/0.3.0
102+
cuda/12.6.0 meson/1.5.1 nvpl-lapack/0.2.3.1
103+
fftw/3.3.10 nccl-tests/2.13.6 osu-micro-benchmarks/5.9
104+
fmt/11.0.2 nccl/2.22.3-1 python/3.12.5
105+
gcc/13.2.0 netcdf-c/4.9.2 zlib-ng/2.2.1
106+
hdf5/1.14.5 netcdf-fortran/4.6.1
107+
```
108+
109+
None of the modules are loaded by default, so you will have to load the required modules

0 commit comments

Comments
 (0)