Native (per-platform--optimized) FFT


#1

Does JUCE use Apple’s Accelerate FFT on iOS/OSX builds?

If not, would it be a nice feature?


#2

Does the Apple version beat the Intel IPP library implementation?


#3

@p-i: Yes.
@mike-ambidio: It’s generally equal or better last I checked, especially on ARM where IPP doesn’t run. :wink:


#4

I took a look at the source code for the dsp::fft implementation some month ago. I think I remember that when you instantiate the first dsp::fft, it will check which dsp engines are available at runtime. All engines have some kind of fixed rank number, so after all engines were scanned, it chooses the one with the highest rank available. I think the ranking was FFTW(statically linked) > Intel > Apple Accelerate > FFTW(dynamically loaded if available) > JUCE fallback FFT algorithm. So the JUCE team seems to consider the Intel algorithms to beat the Accelerate framework. Of course on iOS Accelerate would be chosen as there is no Intel FFT on that platform, on Windows no Accelerate FFT would be choosen as there is no such thing on Windows and so on.

Please correct me if I remember this completely wrong or something changed in that ranking in the last month.