Intel® Integrated Performance Primitives (Intel®
IPP) v5.3 Update 3 for Linux* on Intel® 64 (Intel® EM64T)
Getting Started Guide
Learning About the API
There are many ways to learn more about using Intel IPP and the functionality
that it offers:
- Documentation including in this package - The file
the doc directory lists all available manuals, and other
documents provided in this Intel IPP package
- Intel IPP Website -
information, evaluation release and support resource such as FAQs, technical
support and online documentations, etc.
- Intel IPP Samples - There are extensive code
samples that show implementation in source code of many functional areas
that Intel IPP offers. They are downloadable
- Manuals - Extensive API descriptions and several small code
examples can be found in the manuals ippiman.pdf, ippsman.pdf, ippmman.pdf
You will need to add the path to the shared library to the LD_LIBRARY_PATH
variable (see below). You will also need to specify the location for the Intel®
IPP include and lib files. The shell script ippvarsem64t.sh in the tools/env directory sets your lib, include, and
path environment variables for Intel® IPP.
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 shared library 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
Using the Intel IPP Shared Libraries and Dispatchers
Before using the Intel IPP shared libraries, you should add a path to the libraries
to the system variable LD_LIBRARY_PATH. For example, if the libraries are
in the /opt/intel/ipp/5.3.x.xxx/em64t/sharedlib folder, then the following command line
should be entered:
On an Intel 64 Architecture based system:
The shared libraries libipp*em64t.so are
"dispatcher" dynamic libraries. At run time they will detect the processor and
load the correct processor-specific shared libraries. This allows your code to
call Intel® IPP functions without worrying about which processor the
code will execute on - the appropriate version is automatically loaded and used.
These processor-specific libraries are named *mx.so, *m7.so,
*u8.so and *y8.so. All of these libraries are in the sharedlib
required that the appropriate libguide.so is also included in your PATH
environment variable. Include the directory sharedlib when
running on a IA-32 system. There are known incompatibilities with other versions
of libguide.so. If you run in to problems, make sure that there are no
other versions of libguide.so on your PATH.
- y8 - New Optimizations for 64-bit applications
on 45nm Intel® Core™2 Duo (Penryn) family processors
u8 - New Optimizations for 64-bit applications
on Intel® Core™ 2 and Intel® Xeon® 5100 Processors
- mx - C-optimized for all
Intel 64 Architecture based
- m7 - Optimized for
Intel 64 Architecture based
Using the Intel IPP Static Libraries
The Intel IPP also comes with "merged" static library files
that contain every Intel 64 processor version of each function. Just as with the
dynamic dispatcher, the appropriate version of a function is executed when the
function is called. This mechanism is not as convenient as the dynamic
mechanism, but can result in a smaller total code size.
In order to use these static libraries, link to the files libipp*mergedem64t.a
in the lib directory. Please check
Linkage Samples for more details
Using the Intel IPP Shared Object
shared object finding libraries are dispatchers for the merged libraries
described in the previous section. They provide a way of applying Intel
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 shared object finding libraries
into your project and call the Intel IPP functions from your source code.
Another feature of the shared object 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 shared object
dispatchers (ex. libipps.so). If the dispatcher finds a newer version of
the code in the Intel IPP shared object(s), the code from the newer shared object(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 shared object finding libraries
as compared to the merged libraries. When using the shared object 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 shared object finding libraries in kernel mode.
Follow the steps below to build your application using
the Intel IPP shared object finding libraries:
Using the Intel IPP
Performance Benchmark Tool
- Include ipp.h, libippcoreem64t.a, and the
appropriate libipp**emergedem64t.a file(s) to your project and build tree.
- Note: You must link the ippcore functions
statically (using libippcore.a)
- Make sure the appropriate libipp**mergedem64t.a
file(s) are in your build tree
- Call ippStaticInit() before calling other Intel®
- Call ippStaticInitBest() instead to turn off
the shared object finding feature (always uses statically linked code)
- Calling ippStaticFree() releases the resources
used by ippStaticInit(), and then calls the ippStaticInitBest() function
- Call the Intel IPP functions required in your
application source code
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 on
Architecture , please check the
readme.htm under directory
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.