Spack Modules: Release 23.1.0

The software stack spack/23.1.0 is a major release that brings many changes. Please refer below for a detailed list of major and minor changes to the software stack.

Highlights & changes with the new software stack,

  • Using the Spack/23.1.0 software stack, will not auto-load any of the modules (e.g., compilers, MPI, and MKL). Giving users a clean environment to start with. Also in the future, when version 23.1.0 or later versions of the Spack software stack become the default, we will no longer automatically load any modules.
  • Highlights
    • As with previous software stack updates, this release brings new versions (refer Change log below) of various packages, ensuring you have access to the latest features and improvements.
    • Improved Module Interactions
      • We have made a few changes to enhance the maintainability and long-term support of the software stack, particularly in terms of module interactions.
      • Such as removing redundant module suffixes (see below "notes" for details), adding required prerequisites, etc.
        • Simples names such as intel-* will replace intel-oneapi-* (compilers, mpi, mkl, vtune, etc...) removing the oneapi.
        • For the sake of clarity, intel-mpi & -mkl modules names will not have extra suffixes such as -gcc,-intel, -seq, etc..
      • To adhere to compatibility between compatible modules, we have introduced module prerequisites that will take care of compatibility between the loaded modules.
    • Bundle Modules
      • We are supporting a few bundle modules that combine commonly used software into a single module.
      • Such as
        • python-base & python-extended
        • intel-toolkit
        • autotools
  • It's strongly recommended to read "Notes" the changes to understand the changes. 

How to use the new software stack, spack/23.1.0?

This software stack is rolled out as a **non-default** on both machines (CoolMUC-2 & SuperMUC-NG). You will have to explicitly swap/switch spack modules to access the new software stack. The best way is to purge all loaded modules and load the Spack/23.1.0 like,

$> module purge ; module load spack/23.1.0

Please be aware, 

  • Using the "module purge" command will unload all previously loaded modules from your terminal shell, including automatically loaded ones such as "intel," "intel-mpi," and "intel-mkl." This step is crucial to prevent potential errors that may arise due to lingering modules.

Change Log

Changes

Status in Spack/23.1.0

Notes: 

Available on Plattformx86_64, Haswell (CoolMUC2), Skylake (SuperMUC-NG)
date of release15.05.2022
OSSLES 15.1 (CoolMUC2), SLES 15.3 (SuperMUC-NG)
Spack Version0.21.x 
Environment Modules Version

5.1.1

 

Compilers
GCCIntelNAGNVHPC

gcc/8.5.0

gcc/9.5.0

gcc/10.4.0

gcc/11.3.0

gcc/12.2.0

intel/18.0.5

intel/19.1.2

intel/20.0.4

intel/2021.4.0

intel/2022.2.0

intel/2023.1.0

nag/7.1  

nvhpc/22.9

nvhpc/22.11

nvhpc/23.1

nvhpc/23.3

  • Multiple compiler modules can be loaded together.
    • $> module load intel gcc
  • Different versions of the same compilers shall not be loaded together. 
  • For the sake of clarity, module alias will not be created for compiler modules
    • For example, gcc module is provided as "gcc/12.2.0" instead of "gcc12"


  • We will not longer provide intel-oneapi-* (compilers, mpi, mkl, vtune, etc...) but instead short names such as intel-* (removing the oneapi).
Module Names

PACKAGE/version-suffix1-suffix2-suffix3

suffices are as follows

Suffix

Description

-intel<version>

E.g. intel21, intel23

compiled with the Intel 23 (major version) compiler suite 

-gcc<version>

E.g. gcc11, gcc12

compiled with the gcc 12 (major version) compiler suite 
-impiwith MPI support (Intel MPI)
-ompi

with MPI support (OpenMPI)

-openmpwith threading support by OpenMP

-i32 / -i64
-r32 / -r64

32/64 bit integer/float support
-X11with X11 support
-pythonwith python support

Example:

$> module avail gsl

gsl/2.6-gcc12

gsl/2.6-intel23

gsl/2.7-gcc12

gsl/2.7-intel23

  • Application packages made available in the tree with haswell, skylake-avx512 are built using optimization flags for underlying architecture.

 


MPI Modules
Intel-MPIOpenMPI

intel-mpi/2018.4.274

intel-mpi/2019.12.320

intel-mpi/2021.6.0

intel-mpi/2021.7.0

intel-mpi/2021.9.0

openmpi/3.1.6-gcc12

openmpi/3.1.6-intel23

openmpi/3.1.6-nag7.1

openmpi/4.0.7-gcc12

openmpi/4.0.7-intel23

openmpi/4.0.7-nag7.1

openmpi/4.1.5-gcc12

openmpi/4.1.5-intel23

openmpi/4.1.5-nag7.1


  • Intel MPI modules will not have -intel and -gcc suffixes.
    • Intel-mpi will have a module naming scheme such as

      • intel-mpi/version

      compared to the existing naming scheme, the module with suffixes such as,

      • intel-mpi/version-gcc or -intel


  • MPI variables (MPI_CC, MPI_CXX, MPI_FC, MPI_F77, MPI_F90) in the module will be set to compatible MPI wrappers based on the already loaded compiler module (intel or gcc).
  • What if both intel and gcc modules are loaded together?
    • In this case, when loading intel-mpi the preferred compiler will be Intel (that means MPI_* variables will set intel-compatible wrappers).
  • module swap intel gcc or other way around will swap intel-mpi module with correct MPI_* variables.


  • Any MPI modules, intel-mpi or openmpi,  will have a prereq of the compatible compiler. What does it mean?
    • If you load an MPI module, a compiler module will be auto-loaded.
  • For OpenMPI modules, 
    • openmpi module naming scheme is openmpi/version-compilername-majorcompilerversion
    • if you load a openmpi module with -intel*, this will auto load intel compiler. 
    • if you load a openmpi module with -gcc*, this will auto load gcc compiler.


  • We have introduced the prerequeste of compatible MPI module in all the packages which are dependents of MPI.
MKL Modules

intel-mkl/2020.4.304

intel-mkl/2021.4.0

intel-mkl/2023.1.0

  • Intel MKL modules will not have -gcc and -seq suffixes.
    • Intel-mkl will have a module naming scheme such as

      • intel-mkl/version

      compared to the existing naming scheme, the module with suffixes such as,

      • intel-mkl/version-gcc or -seq
  • Extra variables have been provided in the MKL modules that will help users to get linker flags(with default options).
  • $> module show intel-mkl will provide you further information about default options used for provided variables stating linker flags.  
  • We strongly recommend to use MKL linker tool available in your shell (after loading MKL module) or use web interface of MKL linker tool. 

 

Python Modules

python/3.7.16-base

python/3.7.16-extended

python/3.8.16-base

python/3.8.16-extended

python/3.10.10-base

python/3.10.10-extended

Please check the python documentation.

The old intel python modules are still available but need to be loaded explicitly.

 

intel-toolkit

Performance tools (advisor, inspector, itac, ...) Modules

With the latest software stack, we have added components of intel-oneapi toolkits. Checkout Intel-OneAPI Toolkit components

intel-toolkit/2021.4.0

intel-toolkit/2023.1.0

  • OneAPI components are provided as a bundle module. Use the intel-toolkit module to get more oneAPI components in your terminal. 
  • Observe that we have shorted the module name from intel-oneapi-* (compilers, mpi, mkl, vtune, etc...) to intel-* (removing the oneapi).