Spack

跳转到:导航搜索

spack (https://github.com/spack/spack) 是一个用于编译 HPC 软件及其依赖项的工具。编译后的软件作为环境 提供,以便可以同时存在应用程序的多个版本。检测到最相关的 CPU 架构,并且编译后的软件会自动针对其进行优化。

对于 openSUSE Leap、Tumbleweed 和 SLES,提供了一个 系统软件包,其优点是可以安装所有必要的依赖项并使核心工具可用于 spack。其他与 spack 相关的系统软件包也会在安装后添加到 spack 配置中。

此外,spack 作为 root 用户调用时与作为普通用户调用时表现不同。以 root 用户构建的所有软件包对系统上的所有用户可用,而作为普通用户构建的软件包仅对该用户可用。

快速入门

spack 可以使用以下命令安装:

 sudo zypper install spack

为了加载所有相关的环境变量,应该重新登录并使用以下命令获取 spack 环境:

 source /usr/share/spack/setup-env.sh

可以使用以下命令检查安装:

 spack spec netcdf-c

这显示了为了从源代码编译 netccdf-c 将要安装的所有软件包。输出中的插入符号 '^' 表示对特定软件包的依赖关系,可以在命令行中更改。例如

 spack spec netcdf-c^mpich

将显示构建 netcdf-c 所需的所有软件包,而不是默认的 openmpi,而是使用 mpich

现在可以使用以下命令安装软件包:

 spack install netcdf-c^mpich

这将构建并安装带有所有必需依赖项的软件包。可以使用以下命令加载/使用生成的软件包:

 spack load netcdf-c@4.7.4

或者使用环境模块:

 module load netcdf-c-4.7.4-gcc-11.1.1-tlfohef

其中模块的确切名称可以使用以下命令显示:

  module av

SUSE 包

SUSE 包和标准安装之间存在一些差异。

  1. 如果用户可以写入 /usr/lib/spack,则软件包和生成的模块将存储在该位置下。如果用户是 root 或在 spack 组中,则为真。生成的模块安装在 /usr/share/spack/modules/linux-<distribution>-<arch>
  2. 外部软件包,如 M4autoconf,在 spack 安装时检测到,并且在安装相关软件包时(例如,新的 gcc 版本)也会检测到。

软件包搜索和信息

可以使用以下命令显示使用 spack 安装的已安装软件包:

 spack find

并使用以下命令显示所有可用软件包:

 spack list [regexp]

可以使用以下命令获取有关软件包的详细信息:

 spack info <packagename>

这将打印构建软件包的所有版本和选项。

软件包构建

使用 'install' 命令完成软件包编译和安装。但建议先使用 'spec' 命令列出软件包的所有依赖项。因此,命令

 spack install/spec <package-name>

将安装/列出 <package-name> 所需的所有软件包。可以使用 '@' 设置软件包版本:

 spack install/spec <package-name>@<version>

并且可以使用 '%' 设置编译:

 spack install/spec <package-name>@<version>%gcc@7.5.0

将使用 'gcc7' 构建软件包。使用 '+' 启用软件包的二进制构建和安装选项,使用 '~' 禁用。使用 '^' 设置构建依赖项。

示例

     hdf5                          hdf5 configuration, when used as depdency
     hdf5 @1.10.1                  hdf5 version 1.10.1
     hdf5 @1.8:                    hdf5 1.8 or higher
     hdf5 @1.8: %gcc               hdf5 1.8 or higher built with gcc
     hdf5 +mpi                     hdf5 with mpi enabled
     hdf5 ~mpi                     hdf5 with mpi disabled
     hdf5 +mpi ^mpich              hdf5 with mpi, using mpich
     hdf5 +mpi ^openmpi@1.7        hdf5 with mpi, using openmpi 1.7
     boxlib dim=2                  boxlib built for 2 dimensions
     libdwarf %intel ^libelf%gcc
         libdwarf, built with intel compiler, linked to libelf built with gcc
     mvapich2 %gcc fabrics=psm,mrail,sock
         mvapich2, built with gcc compiler, with support for multiple fabrics, default version

编译器

编译器不被视为普通依赖项,因此必须使用 '%' 强制使用特定编译器,而不是像普通依赖项一样使用 '^'。可以使用 'spack' 的编译器可以列出:

 spack compiler list

当使用 spack 安装或编译新编译器时,必须使用以下命令将其告知 spack

 spack compiler find

请注意,编译器必须在 $PATH 中,因此如果编译器是使用 spack 构建的,则必须先加载模块,然后才能使用 find 命令。

外部程序

spack 可以使用以下命令找到外部程序,如 autoconfcmake

spack external find

外部查找由 rpm 在安装 spack 或安装新相关软件包时执行。