I'm getting this error when I compile my program with Intel's compiler v14:
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Platforms\x64\PlatformToolsets\Intel C++ Compiler XE 14.0\ImportBefore\Intel.Libs.IPP.Intel C++ Compiler XE 14.0.targets(91,5): error : IPP multi-threaded libraries are not installed.
I have Parallel Studio XE 2013 for windows, I thought it came included with IPP, did I miss something?
You need to reinstall PS2013 in "modify" mode and use "customizing" (or "customize") button on one of installation dialogs. There you need to specify that the installation of IPP multi-threaded libraries is required. By default they are OFF.
Multi-threaded libraries are deprecated because internal (inside a primitive) threading is significantly less effective than external (at the application level) threading. Moreover - IPP internally is threaded with OMP, Linux p-threads or Win API or any other threading engine know nothing about OMP and if application is threaded with any other threading tool - you can face with different issues like thread oversubscription, conflicts, etc. With new IPP versions we provide a lot of new APIs for 1D (ipps) and 2D (ippi) functions that support external threading. Several IPP functions combined into 1 pipeline that is threaded externally are significantly more efficient from the performance and power points of view than sequential call of internally-threaded variants of these functions.
So does that mean if I am using the IPP functions in for example a Windows DirectShow Filter where multiple instances may be active within a process then I need to provide my own external locks around calls to IPP functions?.
But if i need just to do a single function on single data continuously, lets say a 2d fourier transform possibly on a big data chunk, and at the same time is unable or dont have the time to do a good optimization myself and yet this function dominates execution time and uses its core up 100%, is it still not a good reason to use the multithreaded version?
as Igor mentioned IPP team introduced Threading Layer for IPP libraries. It realizes the same functionality as IPP multi-threaded libraries and additionally enable a customer to organize threading for a custom pipeline that has much better performance vs. IPP threaded libraries. The Threading Layer are supported OpenMP and TBB tools starting from IPP 2019 gold release.
In a one of next IPP 2019 updates you can see an example of usage IPP Threading Layer in several modes and you can see performance benefits.
Yes there are a small % of cases when internal threading gives better performance results vs. external threading. But in general external threading is more effective.