Intel provides two FFT libraries - one in MKL (“Math Kernel Library”) and one in IPP (“Integrated Performance Primitives”).

I wasn’t aware of this fact until I was looking into switching code which uses an Intel FFT to use JUCE’s new wrapper of an Intel FFT. I then found out that my colleague’s code uses Intel IPP while JUCE wraps Intel MKL.

So what are the differences? which one is better? which should I use?

- Intel provides a comparison page which says that for “media and communications” (“Signal processing”, “Audio coding”, “Speech coding and recognition”) IPP is the right choice, and that it is “specifically designed for smaller problem sizes including those used in multimedia” and “embedded C/C++ applications”.
- From FFTW’s (somewhat old) benchmark results it looks like IPP’s FFT handily beats MKL’s (and beats FFTW too) where it’s available (power-of-2 ffts).
- KFR’s fft benchmark compares to IPP and FFTW but doesn’t even mention MKL. So this implies that according to them IPP is the obvious choice between the too?

Does anyone have additional data about this? Does anyone know why JUCE chose MKL rather than IPP?