Modules and Compilers¶
Modules¶
A modular software environment is available on Isambard-AI and Isambard 3. Here is a list of common module commands:
-
module avail
Shows the modules available on the system -
module load
Load a module into your current session -
module unload
Unload a module from your current session -
module list
List all the modules loaded in your current session -
module purge
Unload all the modules from your current session
BriCS-supplied Modules¶
BriCS provide the following modules to help the user's experience:
Module Name | Description | Default |
---|---|---|
brics/default |
Default module for the user environment. | |
brics/userenv |
Sets $LOCALDIR , $SCRATCHDIR , and $TMPDIR . See the system storage page for more information. |
|
brics/emacs |
Provides the Emacs text editor. | |
brics/tmux |
Provides the tmux terminal multiplexer. Please ensure you reload the module when restarting your terminal and your sessions will persist. | |
brics/nccl |
This module is required for multi-node GPU workflows. This provides both NCCL (compiled against libfabric ) and the NCCL AWS-OFI plugin to support the high speed network (Slingshot). |
|
brics/ompi |
OpenMPI v5.0.5 built with cuda and libfabric support. Libfabric is required for Slingshot support. Please ensure you are familiar with the MPI documentation.Note This OpenMPI only supports running with the --mpi=pmix flag set for srun . |
|
brics/singularity-multi-node |
This module provides support for multi-node singularity jobs. Please read the Singularity Multi-node documentation. |
Programming environments¶
Both Isambard-AI and Isambard 3 are from HPE/Cray and therefore use Cray Programming Environments.
To see available programming environments perform a module av PrgEnv
or for more detail module spider PrgEnv
.
$ module av PrgEnv
---------------------- /opt/cray/pe/lmod/modulefiles/core ----------------------
PrgEnv-cray/8.5.0 PrgEnv-gnu/8.5.0
The recommended programming environment is PrgEnv-gnu
. This should provide moderately good performance and users are more likely to be familiar with its behaviour. It consists of a suite of libraries and packages which have been built with the GNU compiler (i.e. gcc
).
Loading a programming environment brings in all dependencies automatically, e.g.
$ module load PrgEnv-gnu
$ module list
Currently Loaded Modules:
1) brics/userenv/2.4 5) craype-arm-grace 9) cray-mpich/8.1.28
2) brics/default/1.0 6) libfabric/1.15.2.0 10) PrgEnv-gnu/8.5.0
3) gcc-native/12.3 7) craype-network-ofi
4) craype/2.7.30 8) cray-libsci/23.12.5
The version of gcc
can be seen in the gcc-native
modules (i.e. 12.3). libfabric
is the communication library for the high-speed interconnect (Slingshot 11). cray-libsci
is a library of common scientific packages (LAPACK, BLAS etc). cray-mpich
provides the MPI libraries.
The traditional way to use the compilers is to use the Cray compiler wrappers. CC
for C++, cc
for C, ftn
for Fortran. The compiler will be based on the PrgEnv
loaded, PrgEnv-gnu
in example above.
$ CC --version
g++-12 (SUSE Linux) 12.3.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ cc --version
gcc-12 (SUSE Linux) 12.3.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ ftn --version
GNU Fortran (SUSE Linux) 12.3.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
The Compiler wrappers will automatically bring in the other Cray libraries such as MPI from cray-mpich
and scientific libraries from cray-libsci
.
Compiler options¶
For general information please refer to NVIDIA Grace Performance Tuning Guide
GNU compilers¶
To instruct the compiler to target the Nvidia Grace Superchip, use the compiler option -mcpu=neoverse-v2
. Note that this is different from how we would do this for x86 processors (eg Intel or AMD), where -march
is used.
Other useful compilers¶
Other modules can be loaded such as module load nvidia
will load just the Nvidia compiler.
$ nvc --version
nvc 23.9-0 linuxarm64 target on aarch64 Linux -tp neoverse-v2
NVIDIA Compilers and Tools
Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
$ nvc++ --version
nvc++ 23.9-0 linuxarm64 target on aarch64 Linux -tp neoverse-v2
NVIDIA Compilers and Tools
Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
$ nvfortran --version
nvfortran 23.9-0 linuxarm64 target on aarch64 Linux -tp neoverse-v2
NVIDIA Compilers and Tools
Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
Note that just loading just a compiler such as module load nvidia
will not load any MPI libraries automatically. The Programming Environment support for the Nvidia compiler will be improved in future system updates.
For further information on MPI please see our MPI guide.