Intel® IPP - Threading / OpenMP* FAQ


White Paper: Threading and Intel® Integrated Performance Primitives


Does Intel® IPP support multi-threading? Is it thread safe?
Yes. Intel IPP supports multi-threading in the dynamic libraries and threaded static libraries (like ipp*merged_t.lib, which are avaiable since 6.x). The no_threaded static libraries like (lib*emerged.lib lib*merged.lib) do not support multi-threading. All the functions have been tested to be thread safe.

Which Intel IPP functions contain OpenMP* code?
Intel IPP Threading Functions Knowledge base provide an a detailed list for IPP threading functions. Quickly, you can find this "ThreadedFunctionsList.txt" file under "doc" folder under product installation directory. The list is updated in each release.

How can I determine the number of threads the Intel IPP creates?
You can use the function ippGetNumThreads to find the number of threads created by the Intel IPP.

How do I control the number of threads the Intel IPP creates?
Call the function ippSetNumThreads to set the number of threads created.

Is it possible to prevent Intel IPP from creating threads?
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)

There are few more information described in Intel IPP user's guide Chapter 6 "Supporting Multithreaded Applications". You can find this document under \doc folder ( mainly for Windows) or check Intel IPP Document page at: http://www.intel.com/cd/software/products/asmo-na/eng/346532.htm for reference.

How can I obtain performance data for Intel IPP threaded functions?
The Intel IPP Performance Tests measure the performance of Intel IPP functions. Find out the Intel IPP threaded API list and generate performance data for these Intel IPP functions that contain OpenMP code. Refer to " Using the Performance Tool in Intel IPP" for more information on using this tool.

How do I resolve issues with libguide.dll and my thread manager tool?
It is not possible in all cases to determine the cause of incompatibility with thread manager software. 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.

When my application calls Intel IPP functions from a separate thread, the application hangs; how do I resolve this?
This issue occurs because the threading technology used in your application and in the Intel IPP (OpenMP) 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.

What is the difference between libiomp5md.lib library and libguide40.lib?
Both files are Intel OpenMP* run-time libraries. The libiomp5md.dll is the new Intel OpenMP* Compatibility library and the libguide40.dll is the legacy OpenMP library. Beginning with Intel IPP 6.0, libiomp5md.dll is the default threading library. Although libguide40.dll is still included for backwards compatibility, we strongly recommend users to use and distribute libiomp5md.dll. The file libguide40.dll/lib will be removed in an upcoming release.

I have several libiomp5*.* libraries on my system, which one should I use?
The OpenMP libraries are available in many of the Intel Software Development Products: Intel IPP , Intel® MKL, Intel® C++ Compiler, Intel® Fortran Compiler, Intel® Parallel Composer.  In general,

  • when using a single product in your appication development, please use libiomp5* provided with the product.
  • when using more than one product, for example, when using Intel® C++ compiler and Intel IPP to build your application,  please use the libiomp5* distributed with the compiler.
For more complete information about compiler optimizations, see our Optimization Notice.

Comments

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't mind, I'd like to send me IPP thread method and codec structure.

Thank you for your attention. Wait your reply.

kb1020.kim@samsung.com

matthias-hahn (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.

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.

'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 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.

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

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.