Dynamic Dispatching

By default, the first time you run an application that uses Intel® IPP, a dispatcher checks to determine the processor and then loads a special dynamically linked library (DLL) corresponding to the processor type. 

When you link the Intel IPP software dynamically, a special CPU-specific code dispatcher invokes the function versions that have the best performance on the target processor. This dispatcher does not add anything to the performance overhead because it connects an entry point of an Intel IPP function with the corresponding specific code only once. This connection is made during the initialization of the application that contains a call to an Intel IPP function. 

In the dynamic link case, each processor gets its own library. The library names are suffixed by the processor abbreviation. For example, ippsw7.lib (libippsw7.a for Linux*) is the Intel® Pentium® 4 processor-optimized signal-processing library. 

The graph on this page shows the dynamic dispatching mechanism. 

The import libraries ipps20.lib, ippi20.lib, and others, as well as ippcore.lib, are used at the link time. The runtime library ippcore detects the CPU and, in case of signal processing, ipps20.dll dispatches each Intel IPP signal processing function. During the DLL initialization, functions in ippcore are called to obtain the CPU setting, then a waterfall procedure is carried out to determine the best available optimization (w7, a6, or px). Finally, all functions in ipps20.dll are re-directed to corresponding libraries (ippsw7.dll, ippsa6.dll, or ippspx.dll). This detection and dispatch process is automatic.

In Linux*, the library names are slightly different but the same mechanism applies.

Dynamic dispatching ensures easy portability of applications to any of the supported platforms. If you upgrade your CPU, there is no need to re-link or re-adjust anything, the dispatcher will link to the corresponding library.