Intel® Integrated Performance Primitives (Intel® IPP) v6.0 for Windows*
Getting Started Guide

 

Contents

Learning About the API
Environment Variables
Header Files
Calling Intel IPP functions
Using the Intel IPP DLLs and Dispatcher
Building a Custom DLL
Using the Intel IPP Static Libraries
Using the Intel IPP DLL-finding Static Libraries
Using the Intel IPP Performance Benchmark Tool

Learning About the API

There are many ways to learn more about using Intelョ Integrated Performance Primitives (Intelョ IPP) and the functionality that it offers:

Environment Variables

Each platform offers batch file from the tools\env directory to set lib, include, and path environment variables for Intel IPP. 

Header Files

The Intel IPP functions and structures are defined in several header files in the include directory. The file ipp.h includes all of these. For forward compatibility, include only ipp.h in your program.

Calling Intel IPP Functions

Because of the DLL dispatcher and merged static library mechanisms described below, calling Intel IPP functions is as simple as calling any other C function. The multiple versions of optimized code for each function are concealed under a single entry point.

Refer to the manuals for descriptions of Intel IPP functions.

Using the Intel IPP DLLs and Dispatchers

The DLLs IPP*.dll are "dispatcher" DLLs. These DLLs are in the bin directory. At run time they will detect the processor and load the correct processor-specific DLLs. This allows your code to call Intel IPP functions without worrying about which processor the code will execute on - the appropriate version is automatically used. These processor-specific DLLs are named *px*.dll, *t7*.dll, *w7*.dll, *v8*.dll and  *p8*.dll . The only actions needed to use the Intel IPP DLLs, once the "stub" static libraries are linked, is to insure that the dispatching DLLs and the processor-specific DLLs are on the path.

Processor Codes

The Intel IPP comes with "stub" static library files that load the Intel IPP DLLs and link to the correct entry points. In order to use the DLLs, link to the files ipp*em64t.lib in the stublib directory. You will either need to set your lib environment variable using or according to the ippenvem64t.bat file, above; or refer to these files using their full path. Including these libraries is all you need to do to dynamically link to the DLL for the appropriate processor.

The DLLs ipp*em64t.dll are "dispatcher" DLLs. These DLLs are in the bin directory. At run time they will detect the processor and load the correct processor-specific DLLs. This allows your code to call Intelョ IPP functions without worrying about which processor the code will execute on - the appropriate version is automatically used. These processor-specific DLLs are named *mx*.dll, *m7*.dll , *u8*.dll and *y8*.dll , they are located in the bin directory. The only actions needed to use the Intelョ IPP DLLs, once the "stub" static libraries are linked, is to insure that the dispatching DLLs are on the path and the processor-specific DLLs are located in the same directory as the dispatching DLLs when your program is executed.

PLEASE NOTE: It is required that the appropriate libiomp5.dll is also included in your PATH environment variable. Include the directory bin when running on a system with Intel 64. There are known incompatibilities with other versions of
libiomp5.dll. If you run in to problems, make sure that there are no other versions of libiomp5.dll on your PATH.

Processor Codes

The Intel IPP comes with "stub" static library files that load the Intel IPP DLLs and link to the correct entry points. In order to use the DLLs, link to the files ipp*64.lib (for Itaniumョ-based applications) in the stublib directory. You will either need to set your lib environment variable using the ippenv64.bat file or refer to these files using their full path. Including these libraries is all you need to do to dynamically link to the DLL for the appropriate processor.

The DLLs ipp*64.dll are "dispatcher" DLLs. These DLLs are in the bin directory. At run time they will detect the processor and load the correct processor-specific DLLs. This allows your code to call Intel IPP functions without worrying about which processor the code will execute on - the appropriate version is automatically used. The only actions needed to use the Intel IPP DLLs, once the "stub" static libraries are linked, is to insure that the dispatching DLLs and the processor-specific DLLs are on the path.

PLEASE NOTE: Starting with Intel IPP 4.0, it is required that the appropriate libguide40.dll is also included in your PATH environment variable. Include the directory bin when running on an Itaniumョ architecture-based system. There are known incompatibilities with other versions of libguide40.dll. If you run in to problems, make sure that there are no other versions of libguide40.dll on your PATH.

Intel IPP 6.0 uses OpenMP* 2.0 to implement it's threading. To control the # of threads and thread behavior, use the OpenMP environment variables and API's. Some examples are OMP_NUM_THREADS, omp_set_num_threads(int num_threads), or OMP_SET_NESTED. The relevant OpenMP* function calls and environment variables are described in sections 3 and 4 of:
http://www.openmp.org/drupal/mp-documents/cspec20.pdf  .

Processor Codes

Building a Custom DLL

The Building Custom DLLs tool is used create a custom DLL that contains only the required Intel IPP functions needed by a given application. See the Intel IPP Linkage Samples for details. Currently it is available for IA-32 Intelョ Architecture and Intelョ 64 (Intelョ EM64T) Architecture. You may check the customDLL sample located in directory ..\ipp-samples\advanced-usage\linkage\customdll after sample installation.

Using the Intel IPP Static Libraries

The Intel IPP also comes with "merged" static library files that contain every processor version of each function. Just as with the DLL dispatcher, the appropriate version of a function is executed when the function is called.  This mechanism is not as convenient as the DLL mechanism, but can result in a smaller total code size.

For example, for IA-32 Intelョ Architecture, In order to use these static libraries, link to the files ipp*merged.lib in the lib directory. You will either need to set your lib environment variable using the ippenv.bat file or refer to these files using their full path.  See the Intel IPP Samples for details.

If you desire to link to a single processor specific static library only, please see the tool Using Intel IPP to create a Single Processor Application included in this package.

Using the Intel IPP DLL-finding Libraries

Overview

The DLL-finding libraries are dispatchers for the merged libraries described in the previous section. They provide a way of applying Intel IPP functions so that you do not need to create special definitions of the entry points for the Intel IPP functions you call as you would using the merged libraries. All that is required is to include the DLL-finding libraries into your project and call the Intel IPP functions from your source code.

Another feature of the DLL-finding libraries is that they allow automatic updating of a end-user application with new versions of Intel IPP functions. The dispatcher searches the PATH for the Intel IPP DLL dispatchers (ex. ipps.dll). If the dispatcher finds a newer version of the code in the Intel IPP DLL(s), the code from the newer DLL(s) is used in place of the code built-in to the application. So, there is no development needed to take advantage of the latest Intel IPP optimizations or new Intel processors!

There are some disadvantages in using the DLL-finding libraries as compared to the merged libraries. When using the DLL-finding libraries, it is not possible to exclude any cpu-specific code; all processor versions (IA-32 only) of each function will be linked into your application. Also, you cannot use the DLL-finding libraries in kernel mode.

Building Procedures

Follow the steps below to build your application using the Intel IPP DLL-finding libraries:

Using the Intel IPP Performance Benchmark Tool

The Intel IPP Package provides a tool "perfsys" to test the performance of each Intel IPP function in the API.
For more details on running the performance test tool,  please check the
readme.htm under directory .\tools\perfsys\.

Intel, the Intel logo, Intel SpeedStep, Intel NetBurst, Intel NetStructure, MMX, i386, i486, Intel386, Intel486, Intel740, IntelDX2, IntelDX4, IntelSX2,Celeron, Intel Centrino, Intel Xeon, Intel XScale, Itanium, Pentium, Pentium II Xeon, Pentium III Xeon, Pentium M, and VTune are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

* Other names and brands may be claimed as the property of others.
 
Copyright ゥ 2002-2008 Intel Corporation.