Installing software using Spack

Spack is a package manager for supercomputers. It can be used for installing scientific software and libraries for your own software development project in an easy way.

Below you can find short information on how to use spack at PDC, but the full documentation for spack is available online at

Please note that while there is a central Spack installation used by PDC staff to install software in /pdc/software/..., you cannot use this yourself to install software as it is write-protected. The Spack philosophy of working is instead that you work with your own Spack installation yourself in your private space. It is possible to link your own installation to the PDC central one and reduce the number of package you need to compile by using the so-called “chaining” functionality, see more information here

Setting the environment

This module will facilitate the installation of the desired software into your home folder and will build software and modules into ~/.local/spack/ by default. If you would like to store your easybuild installation elsewhere please set its environment variable prior of loading the spack-user module.


To activate spack-user.

ml PDC/23.12
ml spack-user/0.21.2

Finding and listing available software

If you would like to find out what software you can install, use the list command:

$ spack list kokkos
==> 6 packages.
kokkos  kokkos-kernels  kokkos-kernels-legacy  kokkos-legacy  kokkos-nvcc-wrapper  py-pykokkos-base

More details about a specific packages, such as configuration flags and build options can be seen with spack info

$ spack info kokkos
$ spack info kokkos
CMakePackage:   kokkos

    Kokkos implements a programming model in C++ for writing performance
    portable applications targeting all major HPC platforms.


Maintainers: @DavidPoliakoff @jciesko

Externally Detectable:


Preferred version:

Installing software using spack

Installing software using spack in the most basic way is simply:

spack install <software>

If there are other packages or libraries that needs to be installed for this software to work, they are also installed automatically. In general, though, you would like to be more specific, and request a certain version of a software, or maybe a specific compiler to be used. There is a specific syntax for doing that:




Which version to install/use


Which compiler to use


Add a specific dependency

This is an example of an installation of Amber 18 where it is compiled with GCC version 9.3.0 and a specific ncurses package

spack install amber@18%gcc@9.3.0^ncurses@6.2
==> amber: Successfully installed amber-18-js3n7jolbdh7gknbfuiwf5vutoaljckd
Fetch: 1.09s.  Build: 46.92s.  Total: 48.01s.
[+] $HOME/spack/opt/spack/cray-sles15-zen2/gcc-9.3.0/amber-18-js3n7jolbdh7gknbfuiwf5vutoaljckd

It is often useful to do a dry run before installing to see what Spack thinks it needs to install. This can be done with spec command. For example, what will happen when we request LINPACK?

$ spack spec -I hpl
Input spec
-   hpl

-   hpl@2.3%gcc@11.2.0~openmp arch=cray-sles15-zen2
[+]      ^cray-libsci@ arch=cray-sles15-zen2
[+]      ^mpich@8.1.11%gcc@11.2.0~argobots+fortran+hwloc+hydra+libxml2+pci+romio~slurm~two_level_namespace~verbs+wrapperrpath device=ch4 netmod=ofi pmi=pmi arch=cray-sles15-zen2

Here Spack will compile and install LINPACK using gcc version 11.2.0, MPICH for MPI, and Cray’s LibSci for BLAS and LAPCK. Only the LINPACK package itself will be compiled. Cray Libsci and MPICH are already installed, as indicated by the [+] symbols at the beginning of the lines.

Installing non-downloadable software

In some cases it is not possible to directly download the software you are interested in as the software is restricted by license or other.

In this case you have to download it manually and create folder for it. See instructions at

Garbage collection

Installing and uninstalling softwares will in the end use up your disk space so it is good practice to do some garbage collection

spack gc

How to execute your software

Software installed by Spack are put in the directory spack/opt/spack/cray-sles15-zen2/<compiler>/<software>. This can be a bit tedious to use every time, so there are two ways to make it more convenient. Spack automatically makes module files for all installed software, which shows up when you do module avail, provided that you can run the Spack initilization script mentioned above. You can then use the module load command in the way as you would do for other software at PDC, but in this case you load a software from your own Spack installation.

$ module avail hpl

--------------------------- /cfs/klemming/scratch/y/ypetla/spack/spack/share/spack/modules/cray-sles15-zen2 ---------------------------

Alternatively, you can use Spack’s built-in mechanism for loading software packages, which works similarily to module load:

$ spack load hpl
$ which xhpl

…and the software will be directly available via your command line.