Intel IPP库使用入门

来源:互联网 发布:skype无法连接到网络 编辑:程序博客网 时间:2024/05/11 18:49
version 1.0
2008-11-11

说明:本文基于IPP v5.3 update 3 for Windows* on IA-32,参考的文档采用安装包安装的文档;

文档“userguide_win_ia32.pdf”包含了本文的大部分信息;

1        IPP概述

全称:Intel® IntegratedPerformance Primitives

 

按目标CPU型号,IPP库分为以下几种类型(参考ReleaseNotes.htm):

IA-3232位处理器包括Intel® Core™2DuoPentium® 4Xeon®Celeron®等,这是我们常用的CPU类型;

Intel® 64:基于IA-32、带有64位扩展的CPU,操作系统为64位;

IntelItanium®Intel Itanium® 2 处理器且操作系统为64位;

Intel®IXP4XX Network Processors:包括某些用于嵌入式系统的CPU

1.1        IPP库提供4大类型的函数:

l        信号处理(SignalProcessing),包括了语音识别、语音流编码、语音编码等的函数;

l        图形与视频处理(Image andVideo Processing),包括了图像处理、视频流编码等的函数;

l        Small Matrices RealisticRendering,包括了VectorMatrix等的处理函数;

l        加解密(Cryptography),包括数字认证、公钥加密等的函数;

2        基本使用

2.1        安装

Windows版本可从官方网站下载试用版本,直接安装即可;注意,请选择目标CPU型号对应的安装包下载;有

开发包安装后,在安装目录下的tools/runtime目录中有一个可二次分发的安装,该程序默认会根据CPU型号仅安装合适的运行时库,但这可以通过命令行来控制;参考该目录下的“readme.htm”。运行时库的目的安装位置为system32

2.2        验证安装及获得版本信息

tools/env/ippenv.bat可用于设置环境变量

ia32/demo/ ippsDemo.exe可用于验证安装后路径是否已经设置

tools/support/iplid.exe可用于获得版本信息

2.3        开发环境要求

本部分参考“ReleaseNotes.htm”;

900MB以上空闲磁盘空间;

Windows XP及以上OSVC.NET 2003及以上版本的VC,注意不包括VC6

2.4        头文件及库文件及开发环境准备

ipp.h包含了所有需要的IPP头文件,工程中只要include它就可以了;

开发环境:将IPP路径添加到VC的头文件路径及库文件路径中即可;

Stublib,包含符号而不包含实现,用于装载Dll

Dll,包含处理器分配器(processordispatchers)及函数实现;

Static merged,所有支持的处理器类型的函数实现,如ippsmerged.lib

Static e-merged,所有函数的处理器分配器,如ippsemerged.lib

3        链接方式

IPP提供了多种程序编译链接方式以适用于不同的需求。

3.1        动态链接:

动态链接可以产生具有最大适应性的程序,它是唯一的不需要随CPU升级而重新编译程序的链接方式;

bin/ipp*.dll是分配器(dispatcherdll;它们在运行时检查CPU类型并加载合适的CPU特定dll,这样应用无需考虑具体CPU型号;CPU特定dll命名规律参考下文;

链接库使用stublib目录下的ipp*.lib

方法:

1, 包含ipp.h

2, 使用常规的IPP函数名;

3, 与相应的stublib/ipp*.lib文件链接;

3.2        自定义动态链接:

某些程序仅依赖于少量的IPP函数,这种情况下可以使用该链接方式,以使目标程序仅仅依赖于它所确实用到的IPP库;具体实现请参考《userguide_win_ia32.pdf》。

3.3        静态链接(使用Dispatch功能):

使用Dispatch功能可使得静态链接的应用程序与动态链接一样,可以在运行时选择使用合适的、适用于特定CPU类型的函数版本,这能很大地提高程序性能;

方法:

1, 包含ipps.h

2, 调用其他IPP函数前调用ippStaticInitippStaticInitCPU进行初始化;如果不进行初始化,后续函数调用将会使用默认的px类型的函数;

3, 使用普通函数名调用IPP函数;

4, 需包括lib目录下链接库e-merged库、merged库和ippcorel.lib

3.4        静态链接(无Dispatch功能):

如果目标程序仅用于某种特定的CPU,则可以使用这种方式,它是这几种方式中产生的目标程序最小的方式;

方法(参考tools/staticlib目录下的“readme.htm”文件):

1, 包含tools/staticlib目录下的CPU类型对应头文件;

2, 包含ipps.h

3, 链接库仅使用merged库(ipp*merged.lib)与ippcorel.lib

3.5        IPP相应编号规则与CPU型号的对应关系:

 

Header

Processor

a6

Intel® Pentium® III processor (SSE)

w7

Pentium 4 processor (SSE2)

t7

Pentium 4 processor with Hyper-Threading Technology and Streaming SIMD Extensions 3  (SSE3)

v8

Intel® Core™2 Duo processors (SSSE3)

p8

Intel® Penryn based processors (SSE4.1)

px

All other Intel® architecture processors 

 

4        Unified Speech ComponentInterface介绍

本部分主要参考《uscmanual.pdf》及USC各目录下的readme文档;

USCIntelIPP之上封装提供的一个用于音频编解码、回声消除、信号音过滤、Tone音检测等功能的静态库,它隔离了IPP的使用细节,提供了相当简单的几个接口函数,使得开发人员无需了解上述这些算法的具体定义与实现细节,就可以开发出提供相应功能的应用程序;

可以在下载的ipp-samples(如w_ipp-samples_p_5.3.095.zip,前缀w_表示Windows平台)的speech-codecs目录中找到该组件。

USC提供的API函数分成基本APIBase API)与算法专用API两种类型;基本API包括NumAllocMemAllocInitControl等函数,其中Control提供了一个通用的设置算法参数的接口;专用API分成音频编解码、回声消除等上文中提及的4中类型,如编解码的包括EncodeDecodeGetOutStreamSizeSetFrameSize四个函数;

5        资料介绍

Intel网站上的有大量资料供下载,其中前缀为w_表示Windows版本,l_表示Linux版本;下载包大多带有对应IPP的版本号;

示例程序仅下载*_ipp-samples_p_5.3.*.zip就可以了,某些下载包是早期版本的;

6        参考资料