论文网首页|会计论文|管理论文|计算机论文|医药学|经济学论文|法学论文|社会学论文|文学论文|教育论文|理学论文|工学论文|艺术论文|哲学论文|文化论文|外语论文|论文格式
中国论文网

用户注册

设为首页

您现在的位置: 论文大全网 >> 经济学论文 >> 其他金融相关论文 >> 正文 会员中心
 财务税收论文   发展战略论文   国际经济论文   行业经济论文   新经济学论文   经济学理论论文   中国经济论文   国际贸易论文   地方战略论文
 证券金融论文   其他金融相关论文   房地产经济论文   统计学论文   经管期刊
基于DSP的AVS帧内预测的优化算法
摘 要 帧内预测和求残差过程是avs用来消除空间冗余的一项重要技术,但是其大量的重复的计算给avs在dsp上实时编码造成了障碍。文中充分利用c64x+ dsp的vliw结构体系和simd的特点,提出了对avs中的帧内预测的优化算法来提高编码速度。最后在tms320dm6446上进行仿真,实验结果表明,优化后帧内预测部分所耗的指令周期与编译器优化过的c语言相比平均降低了80%,大大提高了编码速度。
  【关键词】avs 帧内预测 vliw simd
  1 简介
  avs(audio video coding standard)是我国具有自主知识产权的第二代数字音视频编解码标准。avs视频部分采用了一系列的强大的编码技术来提高视频编码的效率,如帧内预测、帧间预测、整数dct和idct、量化和反量化、运动估计和熵编码等[1]。其中帧内预测是avs获得高的编码效率的关键技术之一,但该模块计算量大,不易于在dsp平台上进行实时编码,对于avs标准的产业化应用非常不利。
  vliw (very long instruction word)描述了一种并行指令集思想。在vliw中,编译器把许多简单、独立的指令组合到一条指令字中。当指令字被从 cache 或内存中取出来放到处理器中时,根据它们的标识位,一条指令字会被分解成几条简单的指令,然后由一些独立的执行单元去执行这几条被拆分的指令。c64x/c64x+ dsp具有高级的 vliw体系结构。c64x cpu 一般情况下能将8 条32位指令组合到一条指令字(256位)中。一个取指包里的8条指令能否并行执行取决于各自的最低比特位p。如果第i条指令的p=1,则表示该指令与第i+1条指令是并行执行的;反之,则表示该指令与第 i+1条指令不能并行。在 c64x dsp中, p位的扫描顺序为由低地址位到高地址位。一个取指包里所有能够并行执行的指令组成一个执行包。而对于c64x+ dsp,由于压缩指令的出现,一个取指包中最多可以取出14条指令。可以看出,vliw能够更加高效的处理数据,所以如果合理安排寄存器的使用,充分考虑指令的延时周期和功能单元的使用情况,尽可能写并行代码,合理的编排软件流水线,那么将大大地降低运算的指令周期,降低编码时间。
  simd(single instruction multiple data)体现了一种并行数据的思想,能在一个指令周期中完成多组数据的并行操作,是c64x/c64x+ dsp支持的另一个重要的技术。在c64x+ dsp中有8个高度独立的功能单元,包括6个算数运算单元和2个乘法器。所有的算数运算单元都支持在一个时钟周期内进行32bit数据的运算,这32bit数据可以是1个32bit数,也可以是2个16bit数或者4个8bit数。2个乘法器均支持在一个时钟周期内进行4个16x16-bit或者8个8 x 8-bit数据的乘法。 c64x+ dsp包含丰富强大的simd指令集,包括mmx、sse、sse2等。mmx中定义了57条新指令、8个64位的寄存器和4种新的数据类型:紧缩字节、紧缩字、紧缩双字和紧缩四字。新指令包括算术、比较、转换、逻辑、移位、数据传输指令和状态清空7类。sse包括70条指令,增加了单精度浮点数的simd支持,并且sse增加了对8个128位寄存器xmm0-xmm7的支持,每个寄存器可以存放128位的整数或浮点数。sse兼容mmx指令,它可以通过simd和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度,而且增加的指令类型更加利于视频图像的处理和运算。sse2 共有 144 条指令,寄存器容量为128 位,和双 50 精度浮点数运算。
  综上所述,充分的应用c64x/c64x+ dsp的vliw特点和simd的优点,可以大大地提高avs中大量的具有数据密集型特点的数据的运算速度。
  2 帧内预测
  帧内预测是一种降低空间冗余的压缩技术,它利用图像内部相邻像素间的相关性来降低编码码率,达到压缩的目的。avs对亮度块与色度块的预测均以8×8的块为单位。亮度块的预测有垂直预测、水平预测、dc预测、左下预测和右下预测这5种模式;色度块的预测有dc预测、水平预测、垂直预测和平均预测这4种模式。
  avs当前块的预测值是由选择的预测模式和周围宏块的具体值共同决定的。根据当前宏块周围块存在情况的不同,在avs中,亮度预测模式被细化为8种不同的算法,而色度预测模式则被细化为7种不同的算法。按照运算类别进行分类,可以大致分为如下三类:
  (1)赋值运算。avs预测算法有水平赋值、垂直赋值和常数赋值运算。这类赋值运算比较简单,对其进行优化时,可以对其进行c语言优化,增加并行性,提高处理的效率。给一个8

8宏块赋值128的运算,用c代码可以写成如下格式。充分利用simd的数据并行和vliw的指令并行特点,一次尽可能完成多个数据的多次操作,可以进一步对其进行优化。同样的例子,用线性汇编实现时,采用mvkl和mvkh两条指令同时写入32位的双字,再通过stdw一次存入64位的数据,也就是一次处理一个8×8宏块的一行数据。对于水平赋值和垂直赋值与常数赋值类似,不再赘述。
  c代码:
  for( y = 0; y < 8; y++ )
  { uint32_t *p = (uint32_t*)src;
  *p++ = 0x80808080;
  *p++ = 0x80808080;
  src += fdec_stride;
  }
  线性汇编代码:
  mvkl 0x80808080,r0
  mvkh 0x80808080,r0
  mv r0 , r1
  stdw r1:r0, *dst++   (2)计算平均值的运算。在dc模式中根据左边块和上边块存在情况的不同,细分为dc_top,dc_left和dc_all 这3种模式。在这3种模式中主要的计算消耗在(a+b)/2和(a+b+1)/2上,其中a与b均为8-bit数。两者都在计算平均值,只是前者不进行四舍五入,而后者需要四舍五入。对于这一组运算,在c语言级别可以这样进行优化:
  (1)(a+b)/2 = (a&b) + (((a^b)&0xfe)>>1) ;
  左边式子需要2次运算,包括1次加法和1次除法;右边式子需要5次运算,其中1次加法,4次逻辑运算。
  (2)(a+b+1)/2 = (a|b) - (((a^b)&0xfe)>>1) ;
  左边式子需要3次运算,包括2次加法和1次除法;右边式子需要5次运算,其中1次减法,4次逻辑运算。
  通过上面的优化后,很容易将原来8位数据的运算扩展到32位数据运算,这样可以得到,未经优化时,处理1个像素点(8 bit数据)平均需要 2次读,1次写,2.5次运算;经过优化后,处理4个像素点(32 bit数据)平均需要2次读,1次写,5次运算。可以发现,优化后内存访问降低了25%,alu运算降低了50%。
  利用c64x+ dsp丰富强大的多媒体指令集,可以进一步对上述运算进行优化。avgu4是双指令周期指令,可以同时计算4组8-bit无符号数的平均值,并且向上取整。 所以用avgu4 指令实现(a+b+1)/2,在两个指令周期内可以处理4个点的运算,平均2次读,1次写,1次运算。若采用上述优化c的办法来实现,则4个点的运算,平均2次读,1次写,5次运算,而且5次运算需要5条指令,考虑这5条指令之间的相关性,最少需要4个周期才能完成。这样,通过线性汇编优化,运算的效率又提高了一倍。
  对于(a+b)/2,c64x+ dsp的多媒体指令集中没有直接实现这种操作的指令。由于a和b均为8位无符号数,两者求和之后可能会溢出,所以一般情况下,在计算之前先要对a和b进行扩展,使之变为16-bit数,然后求和,移位,最后将结果限定为8-bit数并且保存。如果直接在dsp上实现上述过程,其运算速度比在pc机上实现更慢。
  由于(a+b)/2与(a+b+1)/2运算的相似性,本文中对其进行线性汇编优化时,依然要充分应用simd的数据并行性,提出如下算法:
  对表达式进行变形处理(a+b)/2=((a-1)+b+1)/2,可以看到,等号右边表达式已经变为(a+b+1)/2的形式,如前文所述,这里也可以利用avgu4并行处理4组数据了。然后按照下面步骤进行具体运算:
  ①先求a-1,得到中间变量c;
  ②用avgu4求(c+b+1)/2的结果为d;
  ③将a与0进行异或运算,得到e;
  ④将e按位取反得到新的e;
  ⑤求d+e。
  上述步骤中的e就是为了消除指令avgu4向上取整的误差。
  通过分析,优化后处理4个点的运算量为取2次,存1次,运算为5次,需要4条指令,考虑各条指令之间的相关性,则最少需要3个周期实现。可以看出,这样的优化方法更适合在dsp上高效的计算。
  (3)移位运算。如亮度预测中的模式3和模式4,采用的是左上和左下的预测方式,即45°角方向的赋值是一样的。用c代码来实现,整个过程有重复的取值和存储的过程,而取值指令所耗周期比较长,这样的重复是一种浪费,导致代码效率不高。
  为了减少重复的取值过程,减小算法的复杂性,提高数据的利用率,本文提出如下思路:
  (1)利用两条取双字指令lddw一次性将参与运算的数据全部取出;
  (2)对数据进行右移或左移,利用或指令不断地计算出下一行的数;

>  (3)将数据进一步构成寄存器对;
  (4)利用存双字指令stdw将64位结果一次存进内存中,达到8×8块的预测。
  表1列出了avs帧内预测各种模式下用不同优化方法进行实验的结果,由于色度中的前三种模式和亮度的前三种是一样的,所以色度的预测模式中只列出模式3,其余省略。
  从表1可以看出,无论对于亮度块还是色度块,所有模式下,用原始的c语言实现所需要的指令周期都比较长。经过编译器优化后,每种模式所耗指令周期数均不同程度的降低,这也说明编译器并不是智能的,仅仅依靠编译器的优化也很难达到实时编码的需求。
  应用本文的优化算法进行线性汇编后,与编译器优化过的c相比,各个模式所耗周期数均大幅下降,降低幅度均在50%以上。进一步经过汇编优化后,相比于线性汇编优化结果其cpu周期数又有一定程度的下降,降低幅度在30%到50%之间。
  3 总结
  本文提出了针对dsp的avs中比较耗时的模块——帧内预测的优化算法。从整个的优化过程中可以看出,c64x+ dsp的指令集非常丰富强大,专门针对视频图像的处理补充了一些指令,而且c64x+ dsp的vliw和simd的特点对于这类重复的数据密集型的计算非常有利,充分的利用c64x+ dsp的这些功能和优点,能够大大降低编码的速度,为avs在dsp上实时编码提供了可能。
  参考文献
  [1]gb/t20090.先进音视频编码(第二部分)视频[s].avs专家组信息技术,2006.
  [2]tms320c64x/c64x+dsp cpu and instruction set reference guide[s].spru732g,2008.
  作者简介
  1.贾丽娜(1985-),女,硕士研究生,助教。研究方向为通信与信息系统。
  2.张刚(1953-),男,教授,博士生导师。主要从事语音、视频的编解码和嵌入式系统的研究。
  作者单位
  1.太原电力高等专科学校 山西省太原市 030013
  2.太原理工大学 山西省太原市 030024
  • 上一个经济学论文:
  • 下一个经济学论文:
  •  更新时间:
    基于应用语言学视阈下的英语文化导入教学研…
    基于入门阶段日语平假名与片假名有效教学法…
    基于ESA理论的高职大学英语课堂教学设计研究
    基于Blog的电子档案袋评价应用于二语写作教…
    基于Android系统的移动应用数据分析探究
    基于Web的高职院校电子类实训室综合系统的设…
    基于LabView的核磁共振测井仪测试系统的研制…
    基于聚类及融合技术的数字图像文字提取与识…
    基于MATLAB的简单图像处理系统的实现
    基于电子技术的氧碳对太阳能级直拉单晶硅品…
    基于BP神经网络输电线路山火隐患点识别
    基于发酵产氢的玉米秸秆酶解条件响应面优化
    | 设为首页 | 加入收藏 | 联系我们 | 网站地图 | 手机版 | 论文发表

    版权所有 www.11665.com © 论文大全网 All rights reserved