APP下载

基于TMS320C6416的JPEG编码器优化实现

2014-08-07王国树聂友伟胡友鹏秦先全林嘉宇

微处理机 2014年4期
关键词:子块编码器指令

王国树,聂友伟,胡友鹏,秦先全,林嘉宇

(1.西藏军区77505部队,拉萨850000;2.沈阳军区65042部队,沈阳110035;3.国防科学技术大学电子科学与工程学院,长沙410073)

基于TMS320C6416的JPEG编码器优化实现

王国树1,聂友伟2,胡友鹏1,秦先全1,林嘉宇3

(1.西藏军区77505部队,拉萨850000;2.沈阳军区65042部队,沈阳110035;3.国防科学技术大学电子科学与工程学院,长沙410073)

结合TI公司TMS320C6416的结构和特点,在分析JPEG编码器结构特点的基础上,阐述了在实现JPEG编码中对算法的软件并行优化实现所做的工作,并在工程中用汇编语言实现了JPEG编码器。在主频为600MHz的TMS320C6416 DSP上处理4008×2672大小的图像数据,在满足一定编码图像质量的前提下,编码器编码速度达到2帧/秒。

TMS320C6416;JPEG标准;并行;优化;超长指令字

1 概 论

TMS320C6416[1]芯片是TI公司推出的新一代并行处理的定点数字信号处理器。它的主频最高可达1.1GHz,最高处理能力达8800MIPS,非常适用于大尺寸静态图像和视频的编解码器,其市场应用前景十分广泛。JPEG是由联合图像专家组(JPEG)制定的第一个图像压缩国际标准,于1992年正式发布。虽然在高压缩比的情况下JPEG2000的压缩性能比JPEG出色,但是在低压缩比时二者的性能差不多,而JPEG的算法要简单得多,有利于硬件实现。在详细分析JPEG中的关键模块并进行优化的基础上,进行汇编语言编程并实现了JPEG编码器。

1.1 TMS320C6416 DSP介绍

实现的硬件选用TI公司的TMS320C6416[2],它的结构如图1所示。

图1 TMS320C6416的CPU结构图

TMS320C6416 DSP主频最高为1.1GHz,采用超长指令字VLIW结构:拥有两个各自独立的数据通道DA1和DA2;64个32-bit长的通用寄存器(分为A、B两组,每组32个);8个独立功能单元(.L1、.S1、.M1、.D1、.L2、.S2、.M2、.D2);6个算术运算单元ALU(32-/40-bit),支持每时钟周期单32-bit、双16-bit或者四个8-bit算术运算;2个乘法器支持每时钟周期4个16×16-bit乘法运算(32-bit结果)或者8个8×8-bit乘法运算(16-bit结果);采用L1/L2两级高速缓存结构:128K-bit程序高速缓存L1P、128K-bit数据高速缓存L1D、8M-bit内存L2(RAM/Cache可设置)。

1.2 JPEG标准[3]分析

JPEG标准是静止图像压缩标准[4]的一种,其编码器和解码器框图如图2所示。上方为编码器结构,下方为解码器结构。编码器包括预处理、离散余弦变换[5]、量化和熵编码[6]四个模块。解码为编码的逆过程。

图2 JPEG编解码器结构框图

编码器将经过预处理(主要是水平位移,使数据关于0对称分布)的图像数据首先进行DCT变换,将图像数据从空间域变换到频率域,经过变换之后,空间域中的能量全部转移到频率域中,总能量不变,但能量将会重新分布,在空间域中,能量分布具有一定的随机性。由于图像有一定的空域相关性,频率域中能量在大部分情况下,集中于零空间频率或低空间频率对应的变换频率系数,从而使具有相关性图像的相关性减少。同时由于能量集中于零空间频率和低空间频率所对应的频率域矩阵元素中,所以对这些元素分配较多的比特数,而对能量较少的元素分配较少的比特数或不分配比特数,变换域中分配的总比特数可以比原图像的总比特数少,这样就可以使图像所需传送的比特数减少,达到压缩的目的。

DCT后的系数要进行量化,量化之前要将DCT系数进行Zig-Zag扫描,量化是图像进行有损压缩的关键,量化步长的大小决定图像压缩率的高低。

最后对量化后的数据进行HUFFMAN编码形成码流输出。每个8×8模块量化后的第一个分量为DC分量,对其与前一模块的DC差分值进行HUFFMAN编码,后面的63个分量皆是AC分量。对其游程进行HUFFMAN编码,HUFFMAN编码实际就是一个查表编码的过程,HUFFMAN表是JPEG标准事先作大量统计形成的,固定在发送端和接收端。

2 JPEG编码算法的并行优化设计

为在DSP上实现JPEG编码器,必须充分发挥TMS320C6416的并行处理能力。从它的硬件结构出发,最大限度地利用其8个功能单元、64个寄存器、L1/L2两级高速缓存,使用并行算法[7]使程序无冲突地并行执行。一般来说,并行算法是指在各种并行计算机上求解问题和处理数据的算法,其本质是把多任务映射到多处理机中执行,或是把多维问题映射到具有特定拓扑结构的多处理机上求解。其目标是尽可能减少时间复杂性,通常是通过增加空间复杂性来实现。并行算法根据实现算法所依赖的并行机类型的不同可以分为单指令流多数据流(SIMD)算法、多指令流多数据流(MIMD)算法、分布式算法、超大规模集成(VLSI)算法。根据实现算法所依赖的器件级别的不同可以分为机器级并行、芯片级并行(如多内核)、线程级并行(如超线程Hyper-Threading)、指令级并行(如超长指令字VLIW)。

2.1 超长指令字VLIW[1]

由于TMS320C6416的CPU芯片采用超长指令字VLIW结构,一个指令周期可以执行多条指令,故可以使用超长指令字 VLIW 并行。由于TMS320C6416拥有A、B两个寄存器组(各32个寄存器),故可采用寄存器组并行,如DCT模块,量化模块。由于TMS320C6416拥有四个运算器功能单元(L、S、D、M),故还可以采用运算器功能单元并行,每个指令周期对L、S、D、M运算器功能单元进行操作,如量化模块,游程计算等等。几乎所有的模块都会用到功能单元并行,虽然某些情况下不可能是完全的四个功能单元同时并行。这样采用超长指令字VLIW,一个指令周期CPU最多可以同时并行执行8条指令。

2.2 数据并行

数据并行需要数据间是互相独立的,在DCT、量化模块时每个8×8子块之间数据是相互独立的,可以考虑数据并行优化,游程计算以及HUFFMAN编码模块每个8×8子块之间的数据是相互关联的,不适合用数据并行进行处理。

2.3 转移指令的优化

由于转移指令有5个延迟间隙,过多的转移将导致资源浪费,尤其对于核心模块来说,将严重影响编码速度。转移指令主要集中于子函数调用与返回和循环体中,其优化方法主要有:子函数合并、循环体直接展开和转移指令直接利用三种方法。

子函数合并就是将尽可能多的子函数合并为一个函数,尤其是将JPEG中多重循环体中的核心子函数合并,如JPEG的量化、游程计算、HUFFMAN编码、码字输出。一个子函数调用与返回耗费17个指令周期,子函数合并将会极大提高编码速度,尽量避免调用子函数。

循环体直接展开,对于多重循环体的控制特别适用。若外层循环少,可将内层循环体直接展开,结合转移条件,减少层与层之间的相互联系。循环展开的限制在于展开之后所需变量个数与寄存器数目之间的矛盾,即生命太长问题。(所谓生命太长问题,即变量值需要保持较长时间,也就是说较长时间的占用该寄存器,使该寄存器无法用于其它变量,从而使在一定时间段内可使用寄存器的数目减少)。对于8×8子块而言,一般不会存在冲突。因此对于JPEG量化,游程计算等尤为适用。

转移指令直接利用是指直接利用转移指令的5个延迟间隙。对于子函数的调用与返回,调用时可直接利用转移指令的延迟间隙对子函数返回地址进行保护、传递子函数的自变量、保护需要保留的变量,返回时可直接利用转移指令的延迟间隙传递子函数的返回值、恢复保留的变量。在不改变控制转移条件寄存器值的条件下,可直接利用转移指令的5个延迟间隙进行数据处理,如变量初始化等。

2.4 软件流水线技术

软件流水[8]是编排循环指令,使循环的多次迭代能够并行执行的技术。TMS320C6416的并行资源使得在前次迭代尚未完成之前可以开始一个新的循环迭代。软件流水的目的就是尽可能早的开始一个新循环迭代,可以通过画图表的方式来确定每一个指令周期每个迭代所进行的节拍,从而确定什么时候可以开始一个新的迭代。对于多周期循环来说,主要步骤为:①确定最小迭代间隔(即前一迭代的第一节拍和紧随其后的迭代的第一节拍之间的指令周期间隔);②画相关图表;③汇编资源安排;④最后汇编。在根据所画图表安排汇编指令时,需注意资源冲突和生命太长的问题。在JPEG中,水平位移、量化之间有很强的依赖性,必须使用软件流水线技术来减少过多的延迟时间。

2.5 浮点数定点化实现

TMS320C6416是TI公司推出的新一代并行处理的定点数字信号处理器,其定点运算指令里的操作数都是整数,但JPEG编码数值运算涉及浮点小数运算。浮点数需要乘一个比例因子并取整变成整型数后,才能使用定点运算指令。在转换中必须保持系统比例因子的一致性。通常用Q格式数表示浮点数。以32位定点数为例:最高位为符号位,如规定符号位后即是小数点位置,则称为Q31格式数,其表示的实际小数范围是 -1≤x≤0.999999999534339。设以q代表所定义的Q格式值,则定点数Xq与实际小数x之间的转换关系为:

选定Q格式值之后,应将系统的全部数值转换成同一格式的定点数,称为定标,即确定同一标尺。当发生溢出时,一般将所有参与操作的数右移1位,即除以2,然后再做加减运算。

2.6 内存调度的考虑

DSP存储空间的配置十分重要。TMS320C6416的片内存储器采用L1/L2两级高速缓存结构:程序高速缓存L1P、数据高速缓存L1D均为16Kbyte;L2内存为1024Kbyte(SRAM/Cache可设置),可根据需要设置为32、64、128、256Kbyte的高速缓存,余下部分为SRAM。外部存储器为SDRAM。CPU对不同存储器的访问速度是不同的:对片内存储器的L1 Cache的访问速度最快,为CPU的主频速度;对片内存储器的L2 Cache的访问速度次之,为CPU的主频速度的1/2;对片内存储器的L2余下的SRAM和片外SDRAM的访问速度最慢,为100~133MHz。因此合理配置和使用存储空间,对编码系统的整体运行效率影响很大,尤其是对编码内部核心循环存储空间的配置其影响更大(如8×8子块DCT、量化、游程计算、HUFFMAN编码等)。应该尽可能地把访问最频繁的常数表和代码段装入L1 Cache,相对较频繁的变量和数据装入L2 Cache,如果过大,则再考虑装入SRAM和片外SDRAM。

程序高速缓存L1P采用直接映射结构,行大小为32字节,可以缓存512组,1次存取一行。当CPU的取指访问L1P缺失但命中L2时,CPU会阻塞8个周期;若L2也缺失,则CPU一直阻塞,直到L2从外部存储器取回相应取指包并传回到L1P、再返回给CPU为止。

数据高速缓存L1D采用双路组联想结构,行大小为64字节,可以缓存128组。L1D和L2内存之间有一个4入口的写缓存。L1D存储器分为8组32位宽度的存储体(bank),这些存储体都是单通信口的,每周期只允许被访问一次。L1D允许CPU每周期访问两次。对L1D的访问导致CPU阻塞的情形有四种[6-7]:L1D存储体(bank)冲突,L1D读缺失阻塞,L1D写缺失阻塞,监听(snoops)阻塞。

L2高速缓存Cache采用4路组联想结构,行大小为128字节,存储器分为8组64位宽度的存储体(bank),对L2的访问要2个周期才完成。对L2的访问导致CPU阻塞的情形有四种[9-10]:L2存储体(bank)冲突,L2访问冲突,L2 Cache读缺失阻塞,L2 Cache写缺失阻塞。

除开CPU第一次对L1P的取指访问和对L1D的取数据访问会发生强制缺失而不可避免外,其余的阻塞都可以通过内存调度来避免或减少阻塞周期。内存调度的基本原则为时空分布原则:时间上依次调用的在空间上的分布也依次放置,即在内存调度上按照在程序运行中的时间顺序进行配置程序代码和数据。

2.7 其它优化方法

除以上并行优化方法之外,还有另外一些基本方法,如:

常数表的使用。为了提高编码算法的实现效率,减少运算的实际开销,尽可能把需运行时计算的参数做成常数数值或常数表,尤其是对于核心循环中的变量参数计算,从而将运行时的计算转化为编译时的计算。对于熵编码尤为适用。

移位指令代替乘除运算。对于基于2的指数次幂的乘除运算,可以采用移位指令代替乘除运算。移位指令是单周期指令,比乘除运算可以节约许多指令周期。

除法优化。对于非基于2的指数次幂的除法运算,TMS320C6000系列DSP没提供直接进行除法运算的指令,需自行编写除法算法。编写除法汇编程序时,可利用条件减SUBC指令对除法进行优化。SUBC汇编指令格式为:SUBC(.L)src1,src2,dst,执行的操作为条件减:src1减去src2,若结果非负则将结果左移1位加1后送入dst;否则将src1左移1位后送入dst。

3 JPEG编码器实现的性能测试

实验测试采用尺寸大小为4008×2672的大图像,图像压缩质量控制参数设为85(图像质量较好),运行于PC机(CPU:Celeron(R)2.20GHz,内存256M)操作系统为Windows XP。测得对应图像压缩比为7.995:1,对4008×2672的大图像来说共有501×334个8×8子块,每8×8子块平均输出字节为64/8=8,每个子块因为输出字节数的不同所耗资源也不相同,所以只能选取一些样本进行统计。选取样本的时候主要从压缩比,输出字节最多的块,最少的块,输出字节数主要分布范围等方面来选取具有代表性的子块进行统计,选取的样本子块输出字节平均值为8。实验中DCT模块调用C64××的汇编化模块,量化模块调用C62××的汇编化模块,并结合TMS320C6416的硬件结构特点,对HUFFMAN编码模块进行汇编语言编程,最终在TMS32C6416上实现JPEG编码器。

JPEG编码器汇编并行优化后,在CCS上实现的总体性能与汇编并行优化前的对比如表1所示。

表1 汇编并行优化前后性能对比表

从表1可以看出,汇编并行优化后编码核心模块的资源消耗大大降低。与汇编优化前相比,效率提高了84.06%,处理速度是汇编优化前的6.3倍;与无优化时相比,效率提高达93.67%,处理速度是无优化处理速度的15.8倍。这对压缩速度有较高要求的工程硬件实现有很大帮助。实验中采用的压缩比为7.995:1,如果对某些工程应用中图像质量要求不是很高的情况下,可以将压缩比调得更高,HUFFMAN编码模块资源消耗将进一步降低,压缩性能会得到更大的提高,当然压缩速度的提高是以牺牲图像质量为代价的,具体的工程应用中要考虑哪方面因素更重要,来协调速度和质量这一对矛盾。

4 结束语

通过优化实现的JPEG编码器性能为:在主频为600MHz的TMS320C6416芯片上对4008×2672大小的图片进行处理,在一定的保真度条件下,可以做到编码速度达2帧/秒(因为4008×2672的大图像共有501×334个8×8子块,所以大图像总耗1388×501×334=232,259,592 cycles,600M/233M=2.57≥2,压缩比为7.995:1)。适用于某些对大图像实时压缩传输的工程项目。而且还可以通过调整压缩图像质量来调整压缩处理速度,以适应对编码速度、实时性要求高的应用场合或者对图像质量要求高的应用场合。

[1]Texas Instruments Incorporated,TMS320C64x Technical Overview[Z].January 2001.

[2]Texas Instruments Incorporated,TMS320C6416T DSK Technical Reference[Z].Nov.2004.

[3]G KWallace.the JPEG Still Picture Compression Standard[J].Consumer Electronics,IEEE Transactions,1992,38(2):xviii-xxxiv.

[4]胡栋.静止图象编码的基本方法与国际标准[M].北京:北京邮电大学出版社,2003.

[5]娄莉.基于离散余弦变换的图像压缩技术[J].现代电子技术,2004(19):103-105.

[6]孙学岩.熵编码的压缩编码原理与方法[J].潍坊学院学报,2004(6):86-87.

[7]George R Desrochers.Principles of Parallel and Multiprocessing[M].University of Michigan:Intertext Publications,McGraw-Hill,1987.

[8]Texas Instruments Incorporated,T MS320C6000 Optimizing Compiler User’s Guide[Z].May 2004.

[9]Texas Instruments Incorporated,TMS320C6000 DSP Cache User’s Guide[Z].May 2003.

[10]Texas Instruments Incorporated,TMS320C6000 Peripherals Reference Guide[Z].February 2001.

Im plementation of JPEG Encoder Based on TMS320C6416

WANG Guo-shu1,NIE You-wei2,HU You-peng1,QIN Xian-quan1,LIN Jia-yu3
(1.Army 77505,TibetMilitary Region,Lhasa 850000,China;2.Army 65042,Shenyang Military Region,Shenyang 110035,China;3.School of Electronics Science and Engineering,National University of Defense Technology,Changsha 410073,China)

Integrating the TMS320C6416 structure and characteristics of TI company,based on analyzing the structural characteristics of JPEG coding devices,this paper describes realizing parallelism and optimization of algorithm software in the process of realizing JPEG coding,and implements JPEG coding deviceswith assembler language in project.The image data in size of4008×2672 is processed by TMS320C6416 DSP with the main frequency of 600MHz,and the coding rate reaches two frames per second after conforming to the quality of the coding image.

TMS320C6416;JPEG Standard;Parallel;Optimize;VLIW

10.3969/j.issn.1002-2279.2014.04.025

TN919.81

:A

:1002-2279(2014)04-0078-05

王国树(1975-),男,重庆市北碚区人,硕士研究生,主研方向:信号处理。

2013-10-12

猜你喜欢

子块编码器指令
基于八叉树的地震数据分布式存储与计算
融合CNN和Transformer编码器的变声语音鉴别与还原
基于特征值算法的图像Copy-Move篡改的被动取证方案
基于两层分块GMM-PRS 的流程工业过程运行状态评价
基于波浪式矩阵置换的稀疏度均衡分块压缩感知算法
应用旋转磁场编码器实现角度测量
杀毒软件中指令虚拟机的脆弱性分析
基于数字信号处理的脉冲编码器
中断与跳转操作对指令串的影响
一种基于滑窗的余度指令判别算法