Intel MKL and Intel IPP: Choosing a High Performance FFT

Note: This document applies to Intel MKL 11.0 or later and Intel IPP 7.1 or later.


The purpose of this document is to help developers determine which FFT, Intel MKL or Intel IPP, is best for their application.


Fourier transforms are used in signal processing, image processing, physics, statistics, finance, cryptography, and many other areas. The Discrete Fourier transform (DFT) mathematical operation converts a signal from the time domain to the frequency domain and back.

DFT processing time can dominate a software application. Using a fast algorithm, Fast Fourier transform (FFT), reduces the number of arithmetic operations from O(N2) to O(N log2 N) operations. Intel MKL and Intel IPP are highly optimized for Intel architecture-based multi-core processors using the latest instruction sets, parallelism, and algorithms.

Read further to decide which FFT is best for your application.

Below is a brief summary of the Intel MKL and Intel IPP libraries. For more details on these products, visit the Intel MKL web site and the Intel IPP web site.

Table 1: Comparison of Intel MKL and Intel IPP Functionality


 Intel MKL

Intel IPP

Target Applications

Mathematical applications for engineering, scientific and financial applications

Media and communications applications for audio, video, imaging, speech recognition and signal processing

Library Structure

  • Linear algebra
  • BLAS
  • Fast Fourier transforms
  • Vector math
  • Vector statistics
  • Random number generators
  • Convolution and correlation
  • Partial differential equations
  • Optimization solvers
  • Sparse Solvers
  • Signal processing
  • Image processing, compression and color conversion
  • String processing
  • Cryptography
  • Computer vision
  • Data compression
  • Matrix and vector math
  • Audio coding 
  • Speech coding and recognition
  • Video coding

Linkage Models

Static, dynamic, custom dynamic

Static, dynamic, custom dynamic

Operating Systems

Windows*, Linux*, Mac OS X*

Windows, Linux, Mac OS X, QNX*

Processor Support

IA-32 and Intel® 64 architecture-based and compatible platforms(1*)

IA-32 and Intel® 64 architecture-based and compatible platforms (2*)

both of these libraries contain the generic code optimized for processors with Intel® Streaming SIMD Extensions  (Intel® SSE) and code optimized for processors with Intel SSE2, SSE3, SSE4.1, SSE4,2, AVX and AVX2  instruction set

1* - IPP provides optimized code for Intel® Atom™ processor 

2* - started with version11.1, Intel(R) MKL started to support new  Intel Xeon Phi™ coprocessors

Intel MKL and Intel IPP Fourier Transform Feature

The Fourier Transforms provided by MKL and IPP are respectively targeted for the types of applications targeted by MKL (engineering and scientific) and IPP (media and communications).  In the table below, we highlight specifics of the MKL and IPP Fourier Transforms that will help you decide which may be best for your application.

Table 2: Comparison of Intel MKL and Intel IPP DFT Features


Intel MKL

Intel IPP


Cluster FFT
FFTW 2.x and 3.x



C and Fortran

LP64 (64-bit long and pointer)
ILP64 (64-bit int, long,  and pointer)



1-D up to 7-D

1-D (Signal Processing)
2-D (Image Processing)

Transform Sizes

32-bit platforms - maximum size is 2^31-1
64-bit platforms - 264 maximum size

FFT - Powers of 2 only

DFT -232 maximum size (*)

Mixed Radix Support

2,3,5,7,11 and 13 kernels (**)

DFT - 2,3,5,7 kernels (**)

Data Types

(See Table 3 for detail)

Real & Complex
Single- & Double-Precision

Real & Complex
Single- & Double-Precision


Transforms can be scaled by an arbitrary floating point number (with precision the same as input data)

Integer ("fixed") scaling

  • Forward 1/N
  • Inverse 1/N
  • Forward + Inverse  SQRT (1/N)


Platform dependent

  • IA-32: All (except 1D when performing a single transform and sizes are not power of two)
  • Intel® 64: All (except in-place power of two)

1D and 2D


Data Types and Formats

The Intel MKL and Intel IPP Fourier transform functions support a variety of data types and formats for storing signal values. Mixed types interfaces are also supported. Please see the product documentation for details.

Table 3: Comparison of Intel MKL and Intel IPP Data Types and Formats


Intel MKL

Intel IPP

Real FFTs


Single, Double

Single, Double

1D Data Types

Real for all dimensions

Signed short, signed int, float, double

2D Data Types

Real for all dimensions

Unsigned char, signed int, float

1D Packed Formats

CCS, Pack, Perm, CCE

CCS, Pack, Perm

2D Packed Formats

CCS, Pack, Perm, CCE


3D Packed Formats



Format Conversion Functions



Complex FFTs


Single, Double

Single, Double

1D Data Types

Complex for all dimensions

Signed short, complex short, signed int, complex integer, complex float, complex double

2D Data Types

Complex for all dimensions

Complex float

Formats Legend
CCE - stores the values of the first half of the output complex conjugate-even signal
CCS - same format as CCE format for 1D, is slightly different for multi-dimensional real transforms
For 2D transforms. CCS, Pack, Perm are not supported for 3D and higher rank
Pack - compact representation of a complex conjugate-symmetric sequence
Perm - same as Pack format for odd lengths, arbitrary permutation of the Pack format for even lengths
RCPack2D - exploits the complex conjugate symmetry of the transformed data to store only half of the resulting Fourier coefficients


The Intel MKL and Intel IPP are optimized for current and future Intel® processors, and are specifically tuned for two different usage areas:

  • Intel MKL is suitable for large problem sizes typical to FORTRAN and C/C++ high-performance computing software such as engineering, scientific, and financial applications.
  • Intel IPP is specifically designed for smaller problem sizes including those used in multimedia, data processing, communications, and embedded C/C++ applications.

Choosing the Best FFT for Your Application

Before making a decision, developers must understand the specific requirements and constraints of the application. Developers should consider these questions:

  • What are the performance requirements for the application? How is performance measured and what is the measurement criteria? Is a specific benchmark being used? What are the known performance bottlenecks?
  • What type of application is being developed? What are the main operations being performed and on what kind of data?
  • What API is currently being used in the application for transforms? What programming language(s) is the application code written in?
  • Does the FFT output data need to be scaled (normalized)? What type of scaling is required?
  • What kind of input and output data does the transform process? What are the valid and invalid values? What type of precision is required?


Intel MKL and Intel IPP both provide optimized Fourier Transform functions. For more detailed information on the FFT APIs, parameters and formats, please refer to the following documents:

 30-day evaluation packages are available for free download from intel registration center


Other Resources

*   - Actually less than 2^32. Maximum int is 2^31-1, but allowed maximum size is even smaller, ~2^29.
** - Both libraries support arbitrary radix in optimized manner, that is O(N log N), but these specific radixes are better optimized than others. 

Optimization Notice

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804

Per informazioni complete sulle ottimizzazioni del compilatore, consultare l'Avviso sull'ottimizzazione