AVS( Audio Video Coding STandard)是由我国数字 音视频标准工作组制定的具有自主知识产权的第二代音视频压缩准。AVS实行1 元专利费用的原则,相比其它音视频编解码标准具有编码效率高、专利费用低、授权模式简单等优势。AVS 解码器的结构复杂、运算量较大,要在嵌入式平台上实现实时解码具有较大难度。在对解码器性能优化的过程中可以依据使用平台对其进行汇编指令集的优化或者针对解码器的关键算法模块进行改良,以上方法对解码器性能的提高均有一定作用,本文提出一种利用嵌入式平台的L1P Cache高速缓冲功能实现 处理器对程序代码的高效率访问的方法,从而达到提高AVS解码器性能的目的。

  1 高速缓存Cache的应用

  目前越来越多的编解码算法采用DSP的方式实现,随着DSP芯片主频的不断攀升,存储器的访问速度日益成为系统性能提升的瓶颈。在现有的制造工艺下,片上存储单元的增加将导致数据线负载电容的增加,影响到数据线上信号的开关时间,这意味着片上高速存储单元的增加将是十分有限的。为了解决存储器速度与CPU内核速度不匹配的问题,高性能的CPU普遍采用高速缓存(Cache)机制。

  以TI的C64x DSP为例,存储器系统由片内存储器和片外存储器两部分组成。其中,片内存储器采用两级缓存结构,第1级L1距离DSP核最近,数据访问速度最快,可以达到每秒600Mbyte,只能作为不能寻址的Cache使用,由相互独立的L1P和L1D 组成。

  L1P Cache是处理器访问程序代码的高速缓冲存储器,大小为16 kbyte,采用直接映射方式,每行大小32byte;L1D Cache是处理器访问数据的高速缓冲存储器,大小为16 kbyte,采用2路映射,每行大小为64byte。第2级L2是一个统一的程序/数据空间,可以整体作为SRAM映射到存储空间,也可以作为Cache和SRAM按比例的一种组合。L2与L1之间的数据交互速率为每秒300 Mbyte,L2与SDRAM之间的数据交换速率为每秒100 Mbyte。片外存储器是第3级,一般由SDRAM构成。L1、L2和片外SDRAM构成了整个存储器系统的层次结构。C64X的两级缓存结构若能运用恰当,将能极大地提高程序性能。

  根据图1的三层次的存储器系统, C64X读取程序代码时,先查看1级缓存L1,若L1已缓存了所需代码,则直接从L1读取;若L1没有该代码的缓存,则访问2级缓存L2;若L2也没有,则通过EMIF接口访问外部SDRAM,把所需代码从外部SDRAM拷贝到L2缓存区,再从L2缓存区拷贝到L1,最后由DSP内核取得。

图1 三层次的存储器系统(图中B代表byte)

  研究表明,采用这种多级缓存的架构可以达到采用完全片上存储器结构的系统约80%的执行效率。本文致力于更深入地研究Cache的机制,对算法的数据结构、处理流程以及程序结构等进行优化,以提高Cache的命中率,更有效地发挥Cache的作用,从而达到提高解码器运行效率的目的。

  2 基于Cache的视频解码算法实现

  为了克服上述不足,本文通过更改视频解码算法的实现架构,充分利用Cache中L1P,减少CPU读取程序代码的缺失次数,提高解码程序的执行效率。

  在具体实施过程中,本文根据L1P的容量和程序中各个功能单元代码的大小,将图2中的功能单元分为四个模块,每个模块代码大小均小于16 kbyte,各模块所包含的功能单元为:模块A,读入一个宏块;模块B,熵解码、反扫描、反量化、反变换;模块C,重建;模块D,环路滤波。

  一个视频宏块只有遍历这四个模块之后才算最终完成解码,各个模块之间传递的中间数据如果放置在片外SDRAM中,势必影响下一个模块获取数据的速度,如果数据放置在片内SRAM中,由于片内RAM空间有限不能存储整帧数据。所以权衡考虑,每个模块完成一个宏块行(假设一幅图像包含有M个宏块行,每行有N个宏块)的解码后再交给下一个模块处理,这样既可以将中间数据放置在片内又可以充分利用L1P,减少各个模块之间的代码冲刷,直到M 个宏块行全部处理完毕,这样就得到一帧数据的解码图像。

图2 解码算法流程

  如图3所示,本文以一个宏块行为处理单位,在进行解码时,首先执行模块A将整个宏块行读入高图3 处理一个宏块行的新流程速缓存中,执行完毕模块A后,读入模块B的代码,该部分代码将会冲掉模块A 的代码。执行完毕模块B后,读入模块C的代码,该部分代码将会冲掉模块B 的代码。依此类推,当执行完毕模块D后,再重复执行以对下一个宏块行进行解码。

图3 处理一个宏块行的新流程

  每个模块在执行一个宏块行的解码过程中,会被反复执行N 次,在此期间程序代码保留在L1P中不被冲刷,直到第二个模块执行的时候第一个模块的代码才被冲刷。所以此方法解码一个宏块行才发生四次冲刷,完成一帧图像的解码共发生4 ×M 次代码冲刷,较改进之前减少冲刷次数4 ×M ×(N - 1)。

  表1中的测试序列分辨率为720 ×576,调整结构后解码速率均有不同程度的提高,通过对统计结果的平均得知,效率提高20%左右。

表1 实验结果

  3 结论

  本文解码器优化充分利用了处理器的程序Cache功能,模块分配方式依据Cache大小而定,针对不同处理器的不同Cache, 可以有不同的模块划分方式,只需要保证每个模块代码量小于程序Cache容量即可。处理器对于数据的读取同样可以采用类似方法,以达到充分利用数据Cache的目的。此方法不仅可以应用于AVS解码器,也可应用于AVS编码器,还可以应用于与之拥有类似结构的H. 264、MPEG、VC1等编解码算法。

AVS解码器在DSP平台上的优化相关推荐

  1. H.264软件解码器在PXA270平台上的优化

    罗 嵘,何 苦 时间:2009年04月24日 摘 要: 研究了嵌入式系统中H.264 Baseline软件解码器设计和优化的问题,提出了四种有效的优化方法,并在PXA270平台上进行了测试.测试结果显 ...

  2. 最近在ST公司的STxp70的dsp平台上开发音频codec模块.

    公司最近和ST公司有个DAB的项目, 需要将AACplus,BSAC,MPEG-lay2以及lay3的算法在该dsp平台上 进行优化.这个dsp平台比较的奇怪和TI的以及arm的core不太一样,它有 ...

  3. 华为在深度学习平台上的优化实践

    "Kubernetes Meetup 中国 2017"--北京站3.18落幕啦!本次分享嘉宾彭靖田来自华为,他的分享题目是<华为在深度学习平台上的优化实践>.实录将从深 ...

  4. Shader山下(三十)移动平台上的优化

    以下摘录自<Unity 3D ShaderLab开发实战详解>,第34章.(2015年第2版) 本章的大部分内容都是从 Unity 的官方论坛和文档收集的,在此只是简单地分享给读者. 移动 ...

  5. 手机端html5 面试,今日头条 张祖俭 - H5动画在移动平台上的性能优化实践

    1.H5动画在移动平台上 的性能优化实践 今日头条 张祖俭 2.大纲 Part 1. H5动画 在移动平台上的性能问题 Part 2. 解决思路-从浏览器渲染入手 Part 3. 在H5Animato ...

  6. 在英特尔® 架构平台上开发和优化基于 NDK 的 Android 游戏应用

    作者:杜伟 Android 原生开发套件 (NDK) 是 Android SDK 的附带工具.借助该工具,您可以使用诸如 C 和 C++ 等本地代码语言实现部分应用. 您可以从以下网址下载该 NDK ...

  7. 无人机设计仿真--在Isight平台上进行的基于CST参数化+Xfoil的无人机翼型优化

    作者:Graychen 一.工程背景 翼型的选型和设计是飞行器气动设计中的一项基础性工作,翼型对飞行器的气动性能具有根本性的影响.现在高性能飞行器已不再从翼型库中选择适用翼型后直接使用,而是以现有翼型 ...

  8. 高通将在骁龙845移动平台上对网易游戏进行优化

    2017年12月7日,夏威夷--Qualcomm Incorporated(NASDAQ: QCOM)子公司Qualcomm Technologies, Inc.与网易公司(NASDAQ: NTES) ...

  9. AVS 帧内预测模式的汇编优化

    王瑞* 基金项目:本课题得到国家自然科学基金资助项目基金(项目编号:60772101)的资助. 作者简介:王瑞(1986-), 男, 山东莱芜人, 硕士, 主要从事视频压缩方面的研究. E-mail: ...

最新文章

  1. 【PyTorch学习笔记】4:在Tensor上的索引和切片
  2. iqoo升级鸿蒙,vivo iQOO 3升级更新PD1955_A_1.12.27固件rom全量刷机包
  3. 第二讲 html5框架+Crosswalk打包app 以及 Angularjs 基础(初步认识了解Angularjs)
  4. mysqldump 忽略视图_mysqldump的使用--解决不能导出视图的问题
  5. 瑞幸咖啡的每一个环节,都蕴含着增长知识点
  6. C#数组和集合专题4(Hashtable类)
  7. CentOS 搭建Postfix+Dovecot简单邮件系统
  8. apache camel_使用Apache Camel进行负载平衡
  9. c++ 2条中线焦点_三角形的中线为何交于一点
  10. python如何将批量txt文本转成批量word格式
  11. 【接力题典1800记录】定积分
  12. 支付宝手机网站支付 错误代码 insufficient-isv-permissions 错误原因: ISV权限不足
  13. 博通的网卡linux驱动,CentosRedhat下bcm43142博通无线网卡linux驱动
  14. 【python】用递归解决汉洛塔问题
  15. 简单CRM系统开发(一)
  16. python opencv 图像大小_python使用OpenCV设置图片尺寸
  17. 金额大小写转化、阿拉伯数字转大写数字,大写数字转阿拉伯数字
  18. 前端大屏展示框架搭建(一)
  19. Swagger如何屏蔽某些接口显示
  20. #遗憾#重重的挫败感再次袭来!!!

热门文章

  1. Java对象分配原理
  2. python3读取excel某一列_怎样用python,读取excel中的一列数据!python读取excel某一列数据...
  3. viper4android fxifi,ViPer4android. FX顶级音效!
  4. 【牛客 - 318L】彪神666(水题,半高精度,递推,trick)
  5. 【HDU - 2444】The Accomodation of Students(二分图判断 + 匈牙利算法求最大匹配)
  6. 【51Nod - 1103】N的倍数 (思维,鸽巢原理也叫抽屉定理,求倍数问题取模)
  7. 【 HDU - 1525 】Euclid's Game(较难找规律,玄学博弈,分析必败点必胜点)
  8. Coursera自动驾驶课程第14讲:Linear and Nonlinear Kalman Filters
  9. oracle数据库建表视频,Oracle数据库的创建表全
  10. 请写出sfr和sbit的语句格式_习题_C51语言答案