Intel® IPP - Threading / OpenMP* FAQ

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)             

  • Windows*: mt suffix in a library name (ipp<domain>mt.lib)
  • Linux* and OS X*: no suffix in a library name (libipp<domain>.a)

Dynamic Linking: Default (no suffix)

  • Windows*: ipp<domain>.lib
  • Linux*: libipp<domain>.a
  • OS X*: libipp<domain>.dylib

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.

After selecting threaded libraries, the selected option will get highlighted with a  mark and the memory requirement for threaded libraries will get highlighted.

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

 

For more complete information about compiler optimizations, see our Optimization Notice.

7 comments

Top
Intel Software Network Support's picture

All - please post your technical questions to the Intel(R) IPP forum at
http://software.intel.com/en-us/forums/intel-integrated-performance-primitives/ for the fastest response. Technical support is not ordinarily available via the article comments.

idrajeevgmail.com's picture

Hi,
I am trying to compile IPP sample code with the IPP library but it failed at following location...can anyone help me why

C:Documents and SettingsrtiwariDesktopIPP_SAMPLES>cd w_ipp-samples_p_5.2.049ipp-samplesaudio-video-codecs

C:Documents and SettingsrtiwariDesktopIPP_SAMPLESw_ipp-samples_p_5.2.049ipp-samplesaudio-video-codecs>
C:Documents and SettingsrtiwariDesktopIPP_SAMPLESw_ipp-samples_p_5.2.049ipp-samplesaudio-video-codecs>build3
2.bat
"C:Program FilesIntelipp5.2ia32toolsenvippenv.bat"
IA32 Architecture selected
Searching for default compiler.
The system cannot find the path specified.
Microsoft Visual Studio 2005 compiler selected
Start components compile
******* pipelineumc_pipeline : FAILED
******* corevm : PASSED
******* coreumc : PASSED
******* codecavi_spl : PASSED
******* codeccolor_space_converter : PASSED
******* codeccommon : PASSED
******* codecdv100_dec : FAILED
******* codecdv50_dec : FAILED
******* codecdv_dec : FAILED
******* codecdv_enc : PASSED
******* codecdv50_enc : PASSED
******* codecdv100_enc : PASSED
******* codech264_dec : PASSED
******* codech264_enc : FAILED
******* codech264_spl : PASSED
******* codecjpeg : FAILED

Ying H. (Intel)'s picture

Hi SADI,
the main difference may be OpenCV use C code, while IPP fact detect sample use optimized IPP functions such as ippiApplyHaarClassifier(). But IPP face detction is just sample code to show how to use the IPP functions, you may extend it's functionality based on your algorithm. Meanwhile, OpenCV should be detect IPP automatically.

Here is a FAQ about IPP and OpenCV for your reference
<<http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-open-source-computer-vision-library-opencv-faq/>>

Best Regards,
Ying H.

anonymous's picture

Hi
I am currently using Opencv face detection but it is very slow in speed and performance is not good for commercial use. Now I am thinking of Intel IPP libraries.
IPP libraries have Face detection and sample sources along with a trained cascade.
I want to know the difference between Intel IPP Face detection and Opencv Face detection(Both speed and Performance comparison).

Filename:w_ipp-samples_p_6.0.0.130.zip (downloaded from Intel Homepage for evaluation)
Directory: ipp-samples\computer-vision\Face_Detection

Best regards
SADI

Ying Song (Intel)'s picture

Response to kkb1020: Please check with the Intel IPP umc manual for IPP thread method and codec structure, it is located in \ipp-samples\audio-video-codecs\doc folder.

Matthias H. (Intel)'s picture

According to IPP 6.0 doc the environment variable OMP_NUM_THREADS is ignored. So it's no longer possible to set OMP_NUM_THREADS=1 in order to switch off multithreading.

kkb1020's picture

Hello, I study Intel IPP Code Samples. Especially, I concentrate on simple_player. I want to know structure of simple_player. How can Media Data play better than other player? For example, I measured decoding time of H.264 Data using IPP and FFmpeg. The result, Decoding time of IPP is very faster than FFmpeg.

So, if you don&#39;t mind, I&#39;d like to send me IPP thread method and codec structure.

Thank you for your attention. Wait your reply.

kb1020.kim@samsung.com

Add a Comment

Have a technical question? Visit our forums. Have site or software product issues? Contact support.