Intel® Integrated Performance Primitives (Intel® IPP) Developer Guide and Reference

ID 790148
Date 3/22/2024
Public
Document Table of Contents

Data Types

The datatype field indicates data types used by the function, in the following format:

<bit depth><bit interpretation>,

where

bit depth = <1|8|16|32|64>

and

bit interpretation<u|s|f>[c]

Here u indicates “unsigned integer”, s indicates “signed integer”, f indicates “floating point”, and c indicates “complex”.

Intel IPP supports the data types of the source and destination for signal processing functions listed in the table below.

NOTE:

In the lists of function parameters, the Ipp prefix is added to the data type. For example, 8-bit signed data is denoted as Ipp8s type. These Intel IPP-specific data types are defined in the respective library header files.

Data Types Supported by Intel IPP for Signal Processing
Type Usual C Type Intel IPP Type
8u unsigned char Ipp8u
8s signed char Ipp8s
16u unsigned short Ipp16u
16s signed short Ipp16s
16sc complex short Ipp16sc
32u unsigned int Ipp32u
32s signed int Ipp32s
32f float Ipp32f
32fc complex float Ipp32fc
64s __int64 (Windows*) or long long (Linux*) Ipp64s
64f double Ipp64f
64fc complex double Ipp64fc

For functions that operate on a single data type, the datatype field contains only one of the values listed above.

If a function operates on source and destination signals that have different data types, the respective data type identifiers are listed in the function name in order of source and destination as follows:

<datatype> = <src1Datatype>[src2Datatype][dstDatatype]

For example, the function ippsDotProd_16s16sc_Sfs computes the dot product of 16-bit short and 16-bit complex short source vectors and stores the result in a 16-bit complex short destination vector. The dstDatatype modifier is not present in the name because the second operand and the result are of the same type. The result is scaled and saturated.

There are several data types, namely 24u, 24s and 16f that are not supported by Intel IPP, but can be readily converted to the supported data types for further processing by the library functions.

For the unsigned 24u data, each vector element consists of three consecutive bytes represented as Ipp8u data types. It has a little-endian byte order when a lower order byte is at the lower address. These data may be converted to and from 32u or 32f data types by using the appropriate flavors of the Intel IPP function ippsConvert.

For the signed 24s data, each vector element consists of three consecutive bytes represented as Ipp8s data types. It has a little-endian byte order when a lower order byte is at the lower address. The sign is represented by the most significant bit of the highest order byte. These data may be converted to and from 32s or 32f data types by using the appropriate flavors of the Intel IPP function ippsConvert.

For the 16f format, 16-bit floating point data (half type) can represent positive and negative numbers, whose magnitude is between roughly 6.1e-5 and 6.5e4, with a relative error of 9.8e-4 ; numbers smaller than 6.1e-5 can be represented with an absolute error of 6.0e-8 . All integers from -2048 to +2048 can be represented exactly.

The figure below illustrates the bit-layout for a half number:



s is the sign-bit, e is the exponent, and m is the significand.

These data may be converted to and from 16s and 32f data types by using the appropriate flavors of the Intel IPP function ippsConvert.