IntelOneapi
oneAPI packages in Spack
Spack can install and use the Intel oneAPI products. You may either use spack to install the oneAPI tools or use the Intel installers. After installation, you may use the tools directly, or use Spack to build packages with the tools.
The Spack Python class IntelOneapiPackage
is a base class that is
used by IntelOneapiCompilers
, IntelOneapiMkl
,
IntelOneapiTbb
and other classes to implement the oneAPI
packages. See the Package List for the full list of available
oneAPI packages or use:
spack list -d oneAPI
For more information on a specific package, do:
spack info --all <package-name>
Intel no longer releases new versions of Parallel Studio, which can be used in Spack via the Intel. All of its components can now be found in oneAPI.
Examples
Building a Package With icx
In this example, we build patchelf with icc
and icx
. The
compilers are installed with spack.
Install the oneAPI compilers:
spack install intel-oneapi-compilers
Add the compilers to your compilers.yaml
so spack can use them:
spack compiler add `spack location -i intel-oneapi-compilers`/compiler/latest/linux/bin/intel64
spack compiler add `spack location -i intel-oneapi-compilers`/compiler/latest/linux/bin
Verify that the compilers are available:
spack compiler list
The intel-oneapi-compilers
package includes 2 families of
compilers:
intel
:icc
,icpc
,ifort
. Intel’s classic compilers.oneapi
:icx
,icpx
,ifx
. Intel’s new generation of compilers based on LLVM.
To build the patchelf
Spack package with icc
, do:
spack install patchelf%intel
To build with with icx
, do
spack install patchelf%oneapi
Using oneAPI MPI to Satisfy a Virtual Dependence
The hdf5
package works with any compatible MPI implementation. To
build hdf5
with Intel oneAPI MPI do:
spack install hdf5 +mpi ^intel-oneapi-mpi
Using Externally Installed oneAPI Tools
Spack can also use oneAPI tools that are manually installed with Intel Installers. The procedures for configuring Spack to use external compilers and libraries are different.
Compilers
To use the compilers, add some information about the installation to
compilers.yaml
. For most users, it is sufficient to do:
spack compiler add /opt/intel/oneapi/compiler/latest/linux/bin/intel64
spack compiler add /opt/intel/oneapi/compiler/latest/linux/bin
Adapt the paths above if you did not install the tools in the default
location. After adding the compilers, using them is the same
as if you had installed the intel-oneapi-compilers
package.
Another option is to manually add the configuration to
compilers.yaml
as described in Compiler configuration.
Libraries
If you want Spack to use oneMKL that you have installed without Spack in
the default location, then add the following to
~/.spack/packages.yaml
, adjusting the version as appropriate:
intel-oneapi-mkl:
externals:
- spec: intel-oneapi-mkl@2021.1.1
prefix: /opt/intel/oneapi/
Using oneAPI Tools Installed by Spack
Spack can be a convenient way to install and configure compilers and libraries, even if you do not intend to build a Spack package. If you want to build a Makefile project using Spack-installed oneAPI compilers, then use spack to configure your environment:
spack load intel-oneapi-compilers
And then you can build with:
CXX=icpx make
You can also use Spack-installed libraries. For example:
spack load intel-oneapi-mkl
Will update your environment CPATH, LIBRARY_PATH, and other environment variables for building an application with oneMKL.
More information
This section describes basic use of oneAPI, especially if it has changed compared to Parallel Studio. See Intel for more information on Selecting libraries to satisfy virtual packages, Unrelated packages, Integrating external libraries, and Tips for configuring client packages to use MKL.