JUCE FFT and Intel IPP

Hello

I believe the JUCE FFT on Mac uses the Accelerate framework so in an effort to improve FFT performance on Windows (specifically the FIR class) I have installed Intel IPP and ticked the “Use Intel IPP” box in the Projucer.

Is that it?

Do I need to do anything else?

How do I verify the FFT class is using IPP?

Yes, that’s all you need to do.

To check that IPP is being used you can stick a breakpoint at juce_FFT.cpp:829, just inside IntelPerformancePrimitivesFFT::create (const int), and then launch the program. The breakpoint will be hit if IPP is being used.

On SR’s branch JUCE uses the IPP FFT on Intel Macs if you want (set JUCE_IPP_AVAILABLE=1), we’ve found that it is slightly faster than Apple’s.

Here’s something I’ve noticed. I have to enable the IPP libraries manually in Visual Studio 2019 otherwise the Properties section for the shared code target is set to “NO” until I set it to Static Library as below.

Is your Projucer built from the very latest develop? I added a feature very recently to support the new “oneAPI” distribution of the IPP library:

If you haven’t tried this yet, please rebuild Projucer from the current develop branch, ensure that “Use IPP Library (oneAPI)” is set to an appropriate value, then resave your project and try building it in Visual Studio.

5 Likes

No, I’m using the latest download 6.0.8. Ok, I’ll give that a go, thanks!

Yes, that works and breakpoints hit at IntelPerformancePrimitivesFFT::create().

Here’s an odd thing. Every time I open a session with the Projucer built from the develop branch some of the settings revert to defaults. For example Runtime Library reverts to DLL when it should be static for this plugin:

I’ve noticed this too, but was unsure if this was a byproduct of rebuilding the Projucer more often, and the settings reverting to defaults each time the Projucer was rebuilt. I’ve been adding new fields in prep to submit some PRs for mobile exporter feature requests and was trying to pinpoint exactly when the values were being reset to defaults.

I’ve put a potential fix together. It still needs to be reviewed by the team, but it’ll hopefully be out in the next few days.

4 Likes

@reuk does FloatVectorOperations support using IPP internally yet?

1 Like

Not currently, no.

1 Like

Thanks for reporting this issue. It should be fixed by this commit:

2 Likes