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.
Para obtener más información sobre las optimizaciones del compilador, consulte el aviso sobre la optimización.