In Intel® Integrated Performance Primitives (Intel® IPP) 8.2 and later versions, multi-threading (internal threading) libraries are deprecated due to issues with performance and interoperability with other threading models, but made available for legacy applications. Intel IPP threaded libraries are not installed by default; these threaded libraries are available by the custom installation, so the code written with these libraries will still work as before. However, the multi-threaded libraries are deprecated and moving to external threading is recommended. Your feedback is welcome. Please fill out the deprecated feature feedback form with your usage specifics
For new application development, it is highly recommended to use the single-threaded versions with application-level threading (as shown in the below picture).
Intel IPP 8.2 and later versions installation will have single threaded libraries in the following directory structure:
<ipp directory>lib/ia32 – Single-threaded Static and Dynamic for IA32 architecture
<ipp directory>lib/intel64 - Single-threaded Static and Dynamic for Intel 64 architecture
Static linking (both single-threaded and multi-threaded libraries)
Dynamic Linking: Default (no suffix)
Q: Does Intel IPP support external multi-threading? Thread-safe?
Answer: Yes, Intel IPP supports external threading as in the below picture. The user has the option to use different threading models like Intel® Threading Building Blocks, Intel® Cilk™ Plus, Windows* threads, OpenMP* or PoSIX*. All Intel Integrated Performance Primitives functions are thread-safe.
Q: How do I get Intel IPP threaded libraries?
Answer: While installing Intel IPP, choose the ‘custom’ installation option. Then you will get the option to select threaded libraries for different architectures.
To select the right package of threaded libraries, right-click and enable the ‘Install’ option.
Threading in Intel IPP 8.1 and earlier versions
Threading within the deprecated multi-threaded add-on packages of the Intel IPP library is accomplished by use of the OpenMP* library. Intel IPP 8.0 continues the process of deprecating threading inside Intel IPP functions that was started in version 7.1. Though not installed by default, the threaded libraries can be installed so code written with these libraries will still work as before. However, moving to external threading is recommended.
Q: How can I determine the number of threads Intel IPP creates?
Answer: You can use the function ippGetNumThreads to find the number of threads created by Intel IPP.
Q: How do I control the number of threads Intel IPP creates?
Answer: Call the function ippSetNumThreads to set the number of threads created.
Q: Is it possible to prevent Intel IPP from creating threads?
Answer: Yes, if you are calling the Intel IPP functions from multiple threads, it is recommended to have Intel IPP threading turned off. There are 3 ways to disable multi-threading:
- Link to the non-threaded static libraries
- Build and link to a custom DLL using the non-threaded static libraries
- Call ippSetNumThread(1)
Q: When my application calls Intel IPP functions from a separate thread, the application hangs; how do I resolve this?
Answer: This issue occurs because the threading technologies used in your application and in Intel IPP (which has OpenMP* threading) are incompatible. The ippSetNumThreads function has been developed so that threading can be disabled in the dynamic libraries. Please also check the sections above for other ways to prevent Intel IPP functions from creating threads.
Q: Which Intel IPP functions contain OpenMP* code?
Answer: The "ThreadedFunctionsList.txt" file in the ‘doc’ folder under the product installation directory provides a detailed list of threaded functions in the Intel IPP Library. The list is updated in each release.
Please let us know if you have any feedback on deprecations via the feedback URL