Intel Math Kernel Library (MKL)
The Intel Maths Kernel Libraries (MKL) contain a variety of optimised numerical libraries including BLAS, LAPACK, ScaLAPACK and FFTW. In general, the exact commands required to build against MKL depend on the details of compiler, environment, requirements for parallelism, and so on. The Intel MKL link line advisor should be consulted.
Some examples are given below. Note that loading the mkl
module will provide
the environment variable MKLROOT
which holds the location of the various MKL components.
Important
The cray-libsci
module is loaded by default for all users and this module
also contains definitions of BLAS, LAPACK and ScaLAPACK routines that conflict
with those in MKL. The mkl
module automatically unloads cray-libsci
.
Important
The mkl
module needs to be loaded both at compile time and at runtime
(usually in your job submission script).
Tip
MKL only supports the GCC programming environment (PrgEnv-gnu
).
Other programming environments may work but this is untested and unsupported
on ARCHER2.
Note
Loading the mkl
module sets the environment variable MKL_DEBUG_CPU_TYPE=5
which is required to get good performance on AMD systems.
Serial MKL with GCC
Swap modules:
module restore PrgEnv-gnu
module load mkl
Language | Compile options | Link options |
---|---|---|
Fortran | -m64 -I"${MKLROOT}/include" |
-L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl |
C/C++ | -m64 -I"${MKLROOT}/include" |
-L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl |
Threaded MKL with GCC
Swap modules:
module restore PrgEnv-gnu
module load mkl
Language | Compile options | Link options |
---|---|---|
Fortran | -m64 -I"${MKLROOT}/include" |
-L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lm -ldl |
C/C++ | -m64 -I"${MKLROOT}/include" |
-L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_intel_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lm -ldl |
MKL parallel ScaLAPACK with GCC
Swap modules:
module restore PrgEnv-gnu
module load mkl
Language | Compile options | Link options |
---|---|---|
Fortran | -m64 -I"${MKLROOT}/include" |
-L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -Wl,--no-as-needed -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -lmkl_blacs_intelmpi_lp64 -lgomp -lpthread -lm -ldl |
C/C++ | -m64 -I"${MKLROOT}/include" |
-L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -Wl,--no-as-needed -lmkl_intel_lp64 -lmkl_gnu_thread -lmkl_core -lmkl_blacs_intelmpi_lp64 -lgomp -lpthread -lm -ldl |