Intel® IPP Legacy Libraries

By Ying Hu, Igor Astakhov

Published:08/27/2015   Last Updated:08/28/2018


Starting with Intel® Integrated Performance Primitives (Intel IPP) 9.0, significant effort has gone into streamlining the Intel IPP code base. Several function domains, including Small Matrix Operations (ippMX), Realistic Rendering (ippRR), Video codecs (ippVC) Image Compression (Jpeg, ippJP), Spiral Generated (ippGen), the Data Integrity(ippDI), Audio codecs (ippAC) and Speech codecs (ippSC), were deprecated, and they are not part of the Intel IPP release.

To smooth the code transition, Intel IPP provides a separate package called "Legacy Libraries". This package is independent from Intel® IPP product and contains the major removed functions in Intel IPP 9.0 as well as the deprecated functions in previous Intel® IPP releases.

Please note: The deprecated functions in Intel IPP Legacy Libraries are moved outside of the Intel IPP product, and they will not be optimized for future architectures (the latest optimization are targeted for Intel Advanced Vector Extensions 2 instruction set), and support for these legacy functions is also discontinued.

Introduction

Legacy Function Naming

In comparison to the previous Intel IPP library versions, all APIs got additional “legacy90” prefix – therefore the real entry point for the functions, for example, ippmInvert_m_64f function now is legacy90ippmInvert_m_64f. Renaming to the previously known API is done via “#define” C directive in the ipp<domain>90legacy_redef.h header file. The purpose of renaming is to distinguish supported functions from legacy, and to provide opportunity to restore some functions in the main package in case of a lot of customers’ requests and feedbacks.

Service Functions and Initialization

All legacy domains are self-sufficient, that means they don’t depend on any other Intel IPP domain: neither from the main package nor from the legacy library. It also means that all required service functions and internal dependencies are embedded into the Intel IPP legacy domains and instead of the “ipp” prefix (as in the main package ippCore domain) have “legacy90ipp<domain letter>” prefix. These functions are:

Intel IPP main package, ippCore domain

Intel IPP legacy package, ippGen domain

ippGetLibVersion

use legacy90ipp<domain>GetLibVersion instead

ippGetStatusString

use function from the main package

ippGetCpuClocks

use function from the main package

ippSetFlushToZero

use function from the main package

ippSetDenormAreZeros

use function from the main package

ippAlignPtr

use function from the main package

ippMalloc

use function from the main package

ippFree

use function from the main package

ippInit

legacy90ipp<domain>Init

ippGetCpuFreqMhz

use function from the main package

ippSetNumThreads

legacy90ipp<domain>SetNumThreads

ippGetNumThreads

legacy90ipp<domain>GetNumThreads

ippGetMaxCacheSizeB

use function from the main package

ippGetCpuFeatures

use function from the main package

ippGetEnabledCpuFeatures

use function from the main package

ippSetCpuFeatures

doesn’t work for legacy – legacy domains always dispatch the most appropriate code version for the HW they are executed on

The absence of other Core functions can be solved by linking to the actual ippCore library from the main Intel IPP package and doesn’t affect efficiency of the legacy domains. In case of dynamic linking, the legacy domains are auto-initialized at the DllMain()  stage to the best optimized layer. In case of static linking, for all previous library versions it was required to call ippInit() in order to take advantage of the full Intel IPP optimization, otherwise, the least optimized implementation was chosen by default. Starting from Intel IPP 9.0 (and therefore this is true for the legacy package too) Intel IPP merged libraries have got the auto-initialization capability, thus, if your application does not call legacy90ipp<domain>Init(), the Intel IPP library will be auto-initialized at the first call of any Intel IPP function from the Intel IPP domain different from ippCore. Therefore, the legacy flavor of the Intel IPP 9.0 static library doesn’t require any special stage for initialization; the best optimization layer is dispatched automatically. If you need any other service functions from the Core domain that are absent in the Intel IPP legacy library, link your application with the ippCore domain from the main Intel IPP 9.0 package.

Download and Installation

1) Intel® IPP Legacy Libraries need to be used with Intel IPP 9.0 and the later versions (Intel IPP 2017, Intel IPP 2018) of main packages. Please install the latest version of Intel IPP for the main packages.  Intel IPP is available as part of Intel® Parallel Studio XE, or Intel® System Studio products. It is also available as a standalone package with the Community License.  

Use the links in the table below to get the Intel IPP legacy packages for Linux*, Windows*, or OS X*: 

Windows*                                           ipp90legacy_win_9.0.0.009.zip                      
Linux*                ipp90legacy_lin_9.0.0.009.tar                      
OS X*                           ipp90legacy_osx_9.0.0.009.tar                     

 2) To install the Legacy Libraries, extract all files from the archive. Please read the End User License Agreement (EULA) included in this package,  and check the “Installation” section in the readme.txt file to  learn the password for unzipping the files.

Note:
 a)Intel® IPP Legacy Libraries are delivered with Intel IPP 9.0, but they can be used with the new versions of Intel IPP as well.

 b)To use Intel IPP Legacy libraries with Intel® IPP 2018 update 3, or a later version, user need to update "ippdefs90legacy.h" file in the legacy library, and change the following content around line #35: 

    Before: 
         #ifndef __IPPDEFS_90_LEGACY_H__
        #define __IPPDEFS_90_LEGACY_H__

        #include "ippbase.h"
        #include "ipptypes.h"

    After:
        #ifndef __IPPDEFS_90_LEGACY_H__
        #define __IPPDEFS_90_LEGACY_H__

        #include "ippbase.h"
        #include "ipptypes.h"
        #if !defined( __STDCALL )
        #define __STDCALL IPP_STDCALL 
        #endif

                 
 
Legacy Libraries Usage

The Readme file (readme.txt) in the package provides the instructions on how to use Intel IPP The library.Follow the steps and examples in the files to learn Intel IPP Legacy Libraries usage.

To build Intel IPP  libraries with the legacy sample code, please check the article on how to build Intel® IPP legacy samples with Intel IPP 9.0 legacy libraries.

Questions and Feedback

If you have any problems on moving to the new versions of Intel® IPP, please visit our Get Help page for support options.

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.