基于RF5框架的XDAIS标准算法封装与调用

2015-09-21 01:29周佳兵潘泽跃中国科学技术大学自动化系安徽合肥230027
网络安全与数据管理 2015年11期
关键词:调用线程实例

周佳兵,潘泽跃,曹 飞(中国科学技术大学 自动化系,安徽 合肥 230027)

0 引言

TI公司提出了eXpressDsp软件技术,在软件开发层面上推出了BIOS+RF5+算法标准XDAIS架构。XDAIS规范了DSP算法软件的开发,提供了类似面向对象编程中的类的封装方式的算法接口,使得算法集成变得简单统一。RF5作为DSP软件开发的起步代码参考框架,以DSP/BIOS为基础,利用其中的数据处理元素和数据通信元素可以方便地完成复杂算法应用程序的设计与开发。但在实际工作中,XDAIS算法、RF5框架的使用却显得相对较少,导致实际开发的程序过于臃肿,代码移植性较差,这主要因为XDAIS算法接口的调用、RF5框架的层次化封装相对复杂。如何规范使用XDAIS与RF5,使得音视频、网络通信等包含大量算法、多线程通道的复杂应用程序的开发更为简便已成为广大DSP开发者的迫切需求。

1 RF5框架

RF5主要实现了存储管理、线程模型和通道封装三个功能。RF5基本框架结构如图1[1]所示。RF5框架通过驱动开发套件(DDK)[2]完成应用层与底层硬件的交互;以DSP/BOIOS为基础,通过对XDAIS算法的封装完成应用程序的开发。芯片支持库(CSL)[3]作为驱动模块与底层硬件的桥梁为各种外设提供标准库函数调用。

图1 RF5框架结构框图

RF5框架包含4个基本数据处理元素:线程(TASK)、通道(CHANNEL)、核(CELL)、XDAIS 算法。 它们处于依次包含的关系。每一个线程可以包含多个通道,并顺序执行所包含的通道,用以完成特定的操作;通道是核的集合,核在通道内也被顺序执行;核内封装了XDAIS算法,一个核便是包含一种XDAIS算法的容器,并提供了供外部调用的核对象接口(ICELL)以及核通信管理模块ICC对象。

2 XDAIS算法库封装

2.1 抽象算法接口与实例算法接口

XDAIS是为了提高DSP软件开发效率而提出的一套通用算法接口标准。XDAIS算法可以重复利用且以库的形式在程序中被调用。为统一算法开发规范,该标准提供一系列规则[4],如XDAIS算法不允许直接访问硬件外设,必须通过标准的资源管理接口(IALG)来实现。

IALG抽象接口IALG_Fxns[5],也叫算法成员对象列表或V-表,主要实现存储管理、创建和销毁算法实例对象。其内部有 3 个重要结构字段:algAlloc()、algFree()和algInit()。algAlloc()和 algFree()表 示 内 存 的 分 配 和 释放,algInit()用来初始化算法参数并使内存指向算法的处理空间。三个字段都不能为NULL。

在具体应用时,需要另外创建算法实例接口IXX_Fxns(XX表示要实现的具体算法名),该接口包含了算法的具体实现函数声明。以JPEG解码算法为例,定义的算法实例接口代码如下:

typedef struct IJPEGDEC_Fxns{

IALG_Fxns ialg;

XDAIS_Int32(*decode)(IJPEGDEC_Handle

handle,XDAS_Int8**in,XDAS_Int8*out);

}IJPEGDEC_Fxns;

IJPEGDEC_Fxns是IALG_Fxns的扩展。IJPEGDEC_Fxns中声明了具体解码实现函数decode()。在应用程序中调用decode()函数,需要将整个 XDAIS算法封装成库,在应用程序所在的工程中加载该库,并调用该库提供的接口decode()函数实现解码运算。

2.2 算法库封装实现

XDAIS的特点是,主要内存的分配和销毁不再由具体的算法负责,而是据据XDAIS算法内存使用规则及内存分配字段函数alg_alloc()予以分配。抽象算法接口函数调用流程如图2所示。

图2 抽象算法接口函数调用流程图

实际算法框架搭建步骤是:首先启动XDAIS算法组件向导,定义算法接口标示,如JPEGDEC_TI_IJPEGDEC,JPEGDEC表示算法功能为JPEG解码,TI表示算法持有人。在向导中定义输入输出参数结构体,声明内存表结构、核心处理函数XX()等内容,生成算法接口文件。其次专门建立库工程(.lib文件),包含上一步生成的工程目录下的算法接口文件,并分配内存表,修改输入输出参数,并实现算法处理函数XX()。最后释放内存并修改编译选项,编译完成后生成符合XDAIS的标准接口算法库(.lib文件)。

3 RF5框架使用

XDAIS算法封装成库之后,就需要考虑如何去调用它。开辟新的工程,在命令链接文件中实现算法库的代码如下:

_JPEGDEC_IJPEGDEC=

_JPEGDEC_TI_IJPEGDEC-l.libjpeg_ti.lib

通过第一句赋值,在新工程中引用_JPEGDEC_IJPEGDEC即可调用XDAIS实例算法接口,jpeg_ti.lib是成功封装的XDAIS标准算法库,第二句成功将jpeg算法库链接到工程文件中去。

根据RF5的数据元素特性,需要算法、核、通道、线程一步步地按层次封装。首先第一步需要将XDAIS算法封装在CELL中,只需要将算法库的实例算法接口在应用程序所在工程中进行调用即可。在这之前,需要在头文件中声明CELL对象ICELL_Obj和CELL接口ICELL_Fxns等,ICELL_Obj封装了实例算法接口、CELL接口ICELL_Fxns和ICC句柄,通过ICELL_Fxns定义的操作函数 cellExcute()来管理并执行 CELL中封装的算法处理函数,通过ICC句柄实现CELL与通道对象间通信。

以JPEG解码算法为例,算法处理线程源文件中ICELL_Obj的定义如下:

通过BIOS配置算法处理线程[6],在算法处理线程中定义 CELL对象 ICELL_Obj、ICC句柄 ICC_Handle和算法处理参数,在main函数里初始化通道模块,这是因为必须通过通道channel去操作。在线程初始化函数中进行通道内cell的注册CHAN_regCell(),然后通过CHAN_open()函数打开通道,最后在线程处理函数中调用 CHAN_execute()完成 CELL接口调用,执行 CELL接口调用函数 cellExcute(),最终调用封装在 CELL内的算法处理函数XX()。如图3所示。

4 封装实例

图3 RF5框架中XDAIS算法调用流程图

结合H.264编码算法封装实例,通过软件开发平台CCS3.3实际测试算法性能。创建了两个例程,分别是采用XDAIS标准和RF5封装的算法程序,和以源文件形式存在未经封装的算法程序。在BIOS静态面板中配置内存空间并配置输入输出线程,输入线程采集图像数据,而输出线程在两个实例中则作用不同。

首先,未经封装的编码算法所涉及的帧间预测、运动估计、量化等一系列算法子函数均以源文件存在于工程中并在tskVideoOutput线程中调用,如图4所示。

图4 未经封装的算法实例

将这些程序文件按照XDAIS算法标准封装于库H.264_enclib.lib中,然后按照RF5框架数据元素的封装步骤,在tskProcess线程中调用此库和算法处理函数接口,得到工程如图5所示。

图5 RF5框架封装后算法实例

其次通过在程序中添加UTL统计函数来分别分析和比较采用两种方法的算法执行情况。图6所示为未封装情况,在tskOutput线程中设置STS时间统计模块stsExeTimeEnc得到编码算法程序执行的平均指令周期为11.599 ms。图7为经RF5框架封装后的算法执行情况,在tskVideoProcess线程中设置STS时间统计模块stsExeTimeh264Enc得到平均指令周期为4.083 ms。

图6 未封装情况下编码算法指令周期

从CPU占用情况来看,未经封装的算法程序CPU占用率较高,平均占有率在50%左右,而经过RF5封装调用的算法程序实际平均CPU占用率在31%左右,分别如图8和图9所示。

图7 经RF5封装后编码指令周期

图8 未经封装的算法程序CPU占用率

图9 经封装后的算法程序CPU占用率

5 结束语

以上分析了整个XDAIS算法封装和调用的具体过程。通过eXpressDSP提供的XDAIS算法组件向导生成标准算法框架,然后编写符合XDAIS标准的具体应用算法。通过此框架生成lib库文件并提供接口给需要调用它的工程,在调用工程中通过线程、通道、核对象等接口一步步地对该算法予以封装,最终建立起含有复杂算法的RF5框架工程。框架的建立和算法的封装过程也证明了RF5强大的扩展性和适用性,设计人员不用考虑底层就能开发出多通道复杂算法的应用程序。通过对算法函数、核及通道对象的修改就可轻松移植适合特定工程的算法,在实际工程应用中具有很大的实用性。

[1]Texas Instruments Incorporated.Reference frameworks for eXpressDSP software: RF5,an extensive,high-density system[R].Texas Instruments,2003.

[2]DSP/BIOS driver developer′s guide[R].Texas Instruments,2005.

[3]TMS320C6000 CSL API reference guide[R].Texas Instruments,2004.

[4]Texas Instruments Incorporated.TMS320 DSP算法标准[M].徐盛,胡剑凌,译.北京:清华大学出版社,2007.

[5]TMS320 DSP algorithm standard API reference[R].Texas Instruments,2005.

[6]DSP/BIOS user′s guide[R].Texas Instruments,2002.

猜你喜欢
调用线程实例
基于C#线程实验探究
基于国产化环境的线程池模型研究与实现
核电项目物项调用管理的应用研究
浅谈linux多线程协作
基于系统调用的恶意软件检测技术研究
完形填空Ⅱ
完形填空Ⅰ
利用RFC技术实现SAP系统接口通信
C++语言中函数参数传递方式剖析
Java的多线程技术探讨