Developer Guide

Contents

Core and Support Functions

There are several general purpose functions that simplify using the library and report information on how it is working:
  • Init
    /
    GetCpuFeatures
    /
    SetCpuFeatures
    /
    GetEnabledCpuFeatures
  • GetStatusString
  • GetLibVersion
  • Malloc
    /
    Free

Init
/
GetCpuFeatures
/
SetCpuFeatures
/
GetEnabledCpuFeatures

The
ippInit
function detects the processor type and sets the dispatcher to use the processor-specific code of the Intel® IPP library corresponding to the instruction set capabilities available. If your application does not call the
ippInit
function, initialization of the library to the available instruction set capabilities is performed automatically with the first call of any Intel IPP function from the domain different from
ippCore
.
In some cases like debugging and performance analysis, you may want to get the data on the difference between various processor-specific codes on the same machine. Use the
ippSetCpuFeatures
function for this. This function sets the dispatcher to use the processor-specific code according to the specified set of CPU features. You can obtain features supported by CPU using
ippGetCpuFeatures
and obtain features supported by the currently dispatched Intel IPP code using
ippGetEnabledCpuFeatures
. If you need to enable support of some CPU features without querying the system (without CPUID instruction call), you must set the
ippCPUID_NOCHECK
bit for
ippSetCpuFeatures
, otherwise, only supported by the current CPU features are set.
The
ippInit
,
ippGetCpuFeatures
,
ippGetEnabledCpuFeatures
, and
ippSetCpuFeatures
functions are a part of the
ippCore
library.

GetStatusString

The
ippGetStatusString
function decodes the numeric status return value of Intel® IPP functions and converts them to a human readable text:
status= ippInit(); if( status != ippStsNoErr ) { printf("IppInit() Error:\n"); printf("%s\n", ippGetStatusString(status) ); return -1; }
The
ippGetStatusString
function is a part of the
ippCore
library.

GetLibVersion

Each domain has its own
GetLibVersion
function that returns information about the library layer in use from the dispatcher. The code snippet below demonstrates the usage of the
ippiGetLibVersion
from the image processing domain:
const IppLibraryVersion* lib = ippiGetLibVersion(); printf(“%s %s %d.%d.%d.%d\n”, lib->Name, lib->Version, lib->major, lib->minor, lib->majorBuild, lib->build);
Use this function in combination with
ippInitCpu
to compare the output of different implementations on the same machine.

Malloc
/
Free

Intel IPP functions provide better performance if they process data with aligned pointers. Intel IPP provides the following functions to ensure that data is aligned appropriately - 16-byte for CPU that does not support Intel® Advanced Vector Extensions (Intel® AVX) instruction set, 32-byte for Intel AVX and Intel® Advanced Vector Extensions 2 (Intel® AVX2), and 64-byte for Intel® Many Integrated Core instructions.
void* ippMalloc(int length) void ippFree(void* ptr)
The
ippMalloc
function provides appropriately aligned buffer, and the
ippFree
function frees it.
The signal and image processing libraries provide
ippsMalloc
and
ippiMalloc
functions, respectively, to allocate appropriately aligned buffer that can be freed by the
ippsFree
and
ippiFree
functions.
  • When using buffers allocated with routines different from Intel IPP, you may get better performance if the starting address is aligned. If the buffer is created without alignment, use the
    ippAlignPtr
    function.
For more information about the Intel IPP functions see the
Intel® Integrated Performance Primitives for Intel® Architecture Developer Reference
available in Intel® Software Documentation Library.

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804