Math Kernel Library
|Initial release||May 9, 2003|
2022.0 / December 21, 2021
|Written in||C/C++, Intel DPC++ Compiler, Fortran|
|Operating system||Microsoft Windows, Linux, macOS|
|Platform||Intel Xeon, Intel Xe, Intel Core, Intel Atom|
|Type||Library and framework|
|License||freeware under ISSL|
Intel oneAPI Math Kernel Library (Intel oneMKL; formerly Intel Math Kernel Library or Intel MKL), is a library of optimized math routines for science, engineering, and financial applications. Core math functions include BLAS, LAPACK, ScaLAPACK, sparse solvers, fast Fourier transforms, and vector math.
Intel oneAPI Math Kernel Library is not to be confused with oneAPI Math Kernel Library (oneMKL) Interfaces, a piece of open-source glue code that allows Intel MKL routines to be used from Data Parallel C++.
History and licensing
Intel launched the Math Kernel Library on May 9, 2003, and called it blas.lib. The project's development teams are located in Russia and the United States.
Since April 2020, MKL has become part of oneAPI. Commercial support for oneMKL is available when purchased as part of oneAPI Base Toolkit.
Performance and vendor lock-in
MKL and other programs generated by the Intel C++ Compiler and the Intel DPC++ Compiler improve performance with a technique called function multi-versioning: a function is compiled or written for many of the x86 instruction set extensions, and at run-time a "master function" uses the CPUID instruction to select a version most appropriate for the current CPU. However, as long as the master function detects a non-Intel CPU, it almost always chooses the most basic (and slowest) function to use, regardless of what instruction sets the CPU claims to support. This has netted the system a nickname of "cripple AMD" routine since 2009. As of 2020[update], Intel's MKL, which remains the numeric library installed by default along with many pre-compiled mathematical applications on Windows (such as NumPy, SymPy). Although relying on the MKL, MATLAB implemented a workaround starting with Release 2020a which ensures full support for AVX2 by the MKL also for non Intel (AMD) CPUs.
In older versions, setting the undocumented environment variable
MKL_DEBUG_CPU_TYPE=5 could be used to override the vendor string dependent codepath choice and activate supported instructions up to AVX2 on AMD processor based systems resulting in equal or even better performance when compared to Intel CPUs. Since at least Update 1 2020, the environment variable does not work anymore.
At least two routes for hooking the MKL's internal routines to remove the discrimination have been discovered. The hook can be added at compile-time by linking or at run-time by injection. Agner Fog discovered that MKL and ICC binaries also have a hidden non-discriminating dispatcher. A
mkl_serv_intel_cpu_true function was discovered in 2019. Fog's intel_dispatch_patch provides code that hooks both routes. According to Daniël de Kok, just patching the latter function on MKL 2020 Update 1 improves performance for AMD Zen.
Intel MKL has the following functional categories:
- Linear algebra: BLAS routines are vector-vector (Level 1), matrix-vector (Level 2) and matrix matrix (Level 3) operations for real and complex single and double precision data. LAPACK consists of tuned LU, Cholesky and QR factorizations, eigenvalue and least squares solvers. MKL also includes Sparse BLAS, ScaLAPACK, Sparse Solver, Extended Eigensolver, PBLAS and BLACS.
- Since MKL uses standard interfaces for BLAS and LAPACK, the application which uses other implementations can get better performance on Intel and compatible processors by re-linking with MKL libraries.
- MKL includes a variety of Fast Fourier Transforms (FFTs) from 1D to multidimensional, complex to complex, real to complex, and real to real transforms of arbitrary lengths. Applications written with the open source FFTW can be easily ported to MKL by linking with interface wrapper libraries provided as part of MKL for easy migration.
- Cluster versions of LAPACK and FFTs are also available as part of MKL to take advantage of MPI parallelism in addition to single node parallelism from multithreading.
- Vector math functions include computationally intensive core mathematical operations for single and double precision real and complex data types. These are similar to libm functions from compiler libraries but operate on vectors rather than scalars to provide better performance. There are various controls for setting accuracy, error mode and denormalized number handling to customize the behavior of the routines.
- Statistics functions include random number generators and probability distributions. optimized for multicore processors. Also included are compute-intensive in and out-of-core routines to compute basic statistics, estimation of dependencies etc.
- Data fitting functions include splines (linear, quadratic, cubic, look-up, stepwise constant) for 1-dimensional interpolation that can be used in data analytics, geometric modeling and surface approximation applications.
- Deep Neural Network
- Partial Differential Equations
- Nonlinear Optimization Problem Solvers
- OneAPI (compute acceleration)
- List of numerical libraries
- Automatically Tuned Linear Algebra Software (ATLAS)
- GotoBLAS and OpenBLAS
- Integrated Performance Primitives
- "Intel® Math Kernel Library Release Notes and New Features". software.intel.com.
- Intel® oneAPI Math Kernel Library (oneMKL) | Intel® Software
- "Intel Simplified Software License".
- "Intel Math Kernel Library".
- "Intel Math Kernel Library (MKL)".
- "MKL - Intel Math Kernel Library".
- "oneapi-src/oneMKL". oneAPI-SRC. 19 March 2021.
oneMKL interfaces are an open-source implementation of the oneMKL Data Parallel C++ (DPC++) interface according to the oneMKL specification. It works with multiple devices (backends) using device-specific libraries underneath.
- "Intel launches library tool for developers. (Intel Math Kernel Library 6.0) (Brief Article)". Telecomworldwire. May 9, 2003. Retrieved November 29, 2009.
- "Intel Math Kernel Library Licensing FAQ".
- Agner Fog. "Agner's CPU blog - Intel's "cripple AMD" function".
- "Comment chain in: r/matlab - How-To force Matlab to use a fast codepath on AMD Ryzen/TR CPUs - up to 250% performance gains". reddit. Retrieved 2020-06-06.
- "High-Performance Computing Center Stuttgart - Knowledge Base - Libraries(Hawk)". Retrieved 2020-06-06.
- "Crippled No Longer: Matlab Now Runs on AMD CPUs at Full Speed - ExtremeTech". www.extremetech.com. Retrieved 2020-10-29.
- "r/matlab - How-To force Matlab to use a fast codepath on AMD Ryzen/TR CPUs - up to 250% performance gains". reddit. Retrieved 2019-11-27.
- Sherbaz (2019-11-06), GitHub - SherbazHashmi/HackathonServer: Hackathon Python Server with ArcGIS Integration, retrieved 2019-11-27
- "MKL has bad performance on an AMD cpu". Mingru Yang.
- de Kok, Daniël. "Intel MKL on AMD Zen". danieldk.eu.
- admin (2019-11-14). "Developer Reference for Intel® Math Kernel Library - C". software.intel.com. Retrieved 2019-11-27.