H264 解码耗时分析

在数字基带处理器上代码的最佳放置

美国模拟器件公司 Jose Fridman  

在手机等嵌入式系统中,除了处理器执行时间外,最重要的资源就是设备总线和存储器接口。本文将介绍一种在使用指令高速缓存时其带宽消耗的基础上,统计分析高速缓存所采用的方法。这种方法是传统基于指令周期的分析方法的补充,并且也为在外部存储接口受限制的设备中优化应用程序提供了一种手段。在外部接口受限制的设备中优化那些使用高速缓存的应用程序的读取带宽,对提升指令周期性能有着良好效果。作为例子,将分析H.264视频解码器在AD6900中集成Blackfin DSP的运行情况。


最近几年,高速缓冲存储器(caches)在DSP和嵌入式系统中已经很普遍。在高速缓存出现前,嵌入式软件需要对片内SRAM和片外SRAM、SDRAM和Flash等所有物理存储资源中的代码进行管理。软件工程师必须根据运行时间统计查找所有对全部运行时间起关键作用的代码模块的位置。例如,当需要一个对运行时间非常关键的模块时,例如通信系统中的数据均衡器,其代码在执行之前必须从低速的片外存储器移至高速的片内SRAM。这个预载入的过程确保了模块快速执行,并且在预定义的执行时间范围内。


然而,这种预载入过程很消耗时间,而且除了相当小的系统,这种预载入过程都会是非常复杂的。例如,现在的手机系统已经发展到了非常复杂的程度,特别是那些新一代的多模手机,其中GSM调制解调与FDD WCDMA调制解调模式共存。除了移动通信标准,手机可能还需要支持多种无线连接标准(例如IEEE 802.11无线局域网和蓝牙标准)以及多媒体标准(例如MPEG-4和H.264标准)。因此无线标准的多样性使已经很复杂软硬件系统又增加了负担,从而使很明确的代码放置问题也不再容易。


而另一方面,如果我们在设计一个具有指令高速缓存的系统时没有考虑程序代码的合理放置,很可能会在从高速缓存获取程序代码以及用来存储程序代码的内存,由于带宽的原因会花费很多时间。例如,如果将整个程序放在外部Flash中,这种情况就会出现。


本文中,我们将介绍一种方法,在使用指令高速缓存的条件下确定在Blackfin DSP上运行大型软件系统中代码段的最佳位置。我们采用该方法实现手机终端数字基带处理器(DBB)AD6900中的代码优化配置,同样该方法适用于所有基于Blackfin处理器的设备。


AD6900的体系结构描述


下面简单介绍一下AD6900 DBB处理器,AD6900的结构如图1所示。在图1的右上方是Blackfin处理器的子系统,其中包含Blackfin的内核、L1代码和数据存储器(按照caches或SRAM配置)、L2存储器、称作DSPDMA的Blackfin直接存储期存取(DMA)控制器和一组用于采集和处理GSM数据的DSP外围设备。Blackfin子系统与系统总线接口单元(SBIU)相连,SSIU是一个多端口交叉开关,提供DSP和L1存储器以及系统其他部分之间的连接。图的右下方是ARM926EJ-S子系统。第三级系统片内存储器称作系统随机存储器(RAM)(即L3存储器),Blackfin和ARM内核都可访问L3。通过外部总线控制器(EBS)、SDRAM控制器(SDC)和一个与非门闪存控制器(NFC)可访问外部存储器(L4)。

图1  AD6900结构框图


专用的APBUS子系统支持多媒体连接功能,即显示和采集设备的接口。它包含一个并行外围设备接口(PPI)控制器,支持10bit摄像机传感器或视频输入接口(包括ITU-656和ITU-601数字视频),以及一个用于并行LCD显示专用外部总线接口,称作EBUS2,它可消除噪声并且可在主外部存储主接口上装入数据。多通道DMA控制器方法,称作APPDMA,它支持几种视频格式,包括YUV4:2:2、YUV4:2:0、RGB565和其他格式,能满足多媒体接口设备对数据移动的需求。


AD6900基于层次存储系统。从Blackfin处理器的角度来看,L1存储器仅提供了一种有限的快速零等待状态存储。而较低等级的存储器(例如L2、L3和L4存储器)提供了增大的存储容量,但以比较低的速率接入。Blackfin DSP具有两通道32B总线宽度、16KB指令高速缓存。

H.264视频编解码器


H.264视频解码器标准,又称为MPEG 4 Part 10/AVC,正推动着大量新的无线手机应用。这里我们采用H.264解码器作为在AD6900系统中放置代码方法的一个案例,因为H.264解码器需要高速代码读取带宽。

表1  按DSP占用百分比对H.264函数的分类统计分析


表1列出了在Blackfin DSP上运行的H.264解码器的统计分析,展示了一些调用最频繁的函数(整个应用中大约有100个函数)。表中提供的信息是许多分析器的典型数据,其中包括调用函数次数,总的周期数目,以及该函数对DSP处理器负载的贡献。在这个具体的实验中,使用一种基线分析基准来测试一段具有21个时间片(slice)(例如帧)的视频向量,每15个预计算时间片(P-slices)构成1个I-slice的视频矢量。与其他许多DSP类似,借助Blackfin VDSP工具可以获取这种类型统计分析信息。使用这些信息,编码开发商就可以注重选择和优化那些消耗DSP指令周期最多的函数,例如_decode_residual和_filter_mb_edgev_4.ix。事实上,这两个函数和其他一些频繁调用的函数已经优化为汇编语言。一般,大约10%的代码已经优化为汇编,其余90%仍为C语言。


这种统计分析中还包含每个函数基所需要的指令高速缓存线路占用数目的信息。例如,函数_decode_residual不但是消耗指令周期最多的函数,还使指令高速缓存读取相当多的高速缓存线路。在这种情况下,仅仅这一个函数就消耗了整个H.264解码器所需的高速缓存线路数目的10.5%。


类似的,其他函数,也许不是占用DSP指令周期最多的函数,也需要占用大量的指令高速缓存数目。在表1中我们用框线标出要求指令高速缓存线路占用率最大的三个函数,占用总数的几乎40%。总之,DSP消耗的指令周期和指令高速缓存线路占用率无关。许多函数,也许消耗的DSP指令周期较少,但却需要相当多的高速缓存线路占用率,而有一些消耗DSP指令周期较多的函数可能需要较少的高速缓存线路(例如,_filter_mb_edgev_4pix消耗6.7%的DSP指令周期,但只消耗0.1%的指令缓存)。


该信息之所以有用,在于当全部程序代码都放在了低级存储器中时,例如片外Flash存储器,代码读取会消耗相当大的指令缓存带宽。取指令所消耗的带宽会占用视频和临时数据的总线资源,还会降低解码器效率。读取指令占用了整个解码器所需片外存储器带宽的50%,而其余50%用于存储视频数据、查表和状态信息。


如果将表1中强调的三个函数放在离DSP近的存储器中,例如L1程序存储器,那么可以节省大约40%的片外读指令带宽。这是根据高速缓存线路占用率进行统计分析的主要目的。


更一般地,在表2中示出了同样的分类,但是按照指令高速缓存占用率递减顺序排列的。我们可以看见一些函数虽然并不占用太多DSP指令周期,但却需要大量的指令高速缓存占用率。例如,如果采用传统的基于指令周期的统计分析方法处理函数_hl_motion,那么我们可能认为并不需要优化该函数,因为它只消耗0.7%的DSP指令周期。然而,它需要占用5.5%指令缓存线路占用率,因此在这种情况下应该将该函数放置在离DSP近的存储器中,可以大幅度提升其应用性能。

表2  按照指令高速缓存占用率对H.264函数的分类统计分析


利用表2提供的统计分析,我们挑选那些消耗指令高速缓存最大的函数,并且将其放入L1 DSP存储器。该函数的数量取决于系统其他部分的需求和L1存储器可用容量。在这个具体例子中,我们有一个16KB的L1 DSP存储器并且将它放在函数的顶层,可使程序读取带宽下降54%。随着带宽的减小,H.264解码器占用总周期的时间将会减少10%。H.264解码器的程序代码长度大约为125KB,这就意味着通过重新链接并且将13%的代码移动到片内存储器,可以提升指令执行周期性能。

结论


当考虑优化应用程序时,我们常常只关注问题的一方面:应用程序所消耗DSP资源的程度,即消耗的指令周期或每秒指令数(MIPS)。然而,在许多嵌入式系统中最重要的资源除了处理器执行时间外,还有整个设备的总线及外部存储器接口。这些资源在高集成度系统中尤其重要,例如手机中数字基带处理器,其外部接口通常是最重要的系统资源之一。在本文中我们介绍了一种根据运行在基于指令高速缓存系统所消耗的带宽统计分析应用程序的方法。在外部接口受限制的设备中优化那些使用高速缓存的应用程序的读取带宽,对提升指令周期性能有着良好效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链表(Linked List)之环形链表

原文地址:传送门 单向环形链表应用场景 Josephu(约瑟夫、约瑟夫环) 问题 Josephu 问题为&#xff1a;设编号为1&#xff0c;2&#xff0c;… n的n个人围坐一圈&#xff0c;约定编号为k&#xff08;1<k<n&#xff09;的人从1开始报数&#xff0c;数到m 的那个人出列&…

免费SSL证书(支持1.0、1.1、1.2)

由于公司要开发微信小程序&#xff0c;而微信小程序的接口需要https协议的&#xff0c;并且要支持TLS1.0、TLS1.1、TLS1.2。如果仅仅是为了开发小程序&#xff0c;安全等级又不用太高&#xff0c;可以选择免费的SSL证书 在这里选择腾讯云的证书&#xff0c;申请在 https://cons…

使用栈来完成一个表达式的结果

原文地址:传送门 使用栈来完成一个表达式的结果 使用栈完成计算 一个表达式的结果 7*2*2-51-53-4 &#xff1f; 32*6-2[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XzPnJzRe-1614845779689)(https://victorfengming.gitee.io/data_algorithm/i…

Python 关于bytes类方法对数字转换的误区, Json的重要性

本文起源于一次犯错, 在发觉bytes()里面可以填数字, 转出来的也是bytes类型, 就心急把里面的东西decode出来. 结果为空.搞来搞去以为是命令不熟练事实上错在逻辑.a1 bytes(11, encodingutf-8) print(a1)b1 a1.decode()print(b1)a2 bytes(11) print(a2)b2 a2.decode() print…

psnr 计算

PSNR是“Peak Signal to Noise Ratio”的缩写&#xff0c;峰值信噪比。psnr一般是用于最大值信号和背景噪音之间的一个工程项目。 PSNR计算公式如下&#xff1a; 8bits表示法中&#xff0c;peak的最大值为255&#xff1b;MSE指Mean Square Error&#xff08;均方误差&#xff0…

光源时间_缩短背光源的使用寿命的原因

许多场所都会使用到led这种产品&#xff0c;这种产品经常用于背光的照亮中。但是由于使用led的局限性较大&#xff0c;所以led逐渐被背光源这种产品所代替&#xff0c;常常用于背景的照亮让宣传图可以展现出更好的视觉&#xff0c;这也是许多人选择背光源的原因。那么&#xff…

递归应用场景和调用机制

原文链接:传送门 递归 迷宫问题(回溯) 概念 简单呐的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时让代码变得简洁. 案例-递归调用机制 打印问题 public static void test(int n){if(n>2){test(n-1);}System.out.print…

八皇后问题分析与Java实现

原文链接:传送门 八皇后问题 八皇后问题&#xff0c;是一个古老而著名的问题&#xff0c;是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯贝瑟尔于1848年提出&#xff1a;在88格的国际象棋上摆放八个皇后&#xff0c;使其不能互相攻击&#xff0c;即&#xff1a;任意两个…

单例模式之恶汉模式(详解)

一.设计模式 概念&#xff1a;设计模式是一套被反复使用、多人知晓的、经过分类编目的、代码设计经验的总结。 目的&#xff1a;是用设计模式可以重用代码&#xff0c;让代码更容易被他人理解&#xff0c;保证代码的可靠性。 二.为什么要使用单例模式&#xff1f; 如果创造出多…

迷宫回溯问题分析和实现

原文链接:传送门 迷宫问题 说明: 小球得到的路径&#xff0c;和程序员设置的找路策略有关即&#xff1a;找路的上下左右的顺序相关再得到小球路径时&#xff0c;可以先使用(下右上左)&#xff0c;再改成(上右下左)&#xff0c;看看路径是不是有变化测试回溯现象思考: 如何求出…

canvas clear 指定属性的元素_好程序员web前端分享CSS属性组成及作用

好程序员web前端分享CSS属性组成及作用学习目标1、css属性和属性值的定义2、css文本属性3、css列表属性4、css背景属性5、css边框属性6、css浮动属性一、css属性和属性值的定义属性&#xff1a;属性是指定选择符所具有的属性&#xff0c;它是css的核心&#xff0c;css2共有150多…

排序算法介绍和分类

原文链接:传送门 排序算法的介绍 排序也成排序算法 排序也称排序算法(Sort Algorithm)&#xff0c;排序是将一组数据&#xff0c;依指定的顺序进行排列的过程。 排序的分类&#xff1a; 1) 内部排序: 指将需要处理的所有数据都加载到**内部存储器(内存)**中进行排序。 2) 外…

认识高清视频编码(MPEG、H.264、WMV-HD、RMVB)

文章出处&#xff1a;www.net1980.com 原创 最近两年&#xff0c;“高清”这个词语非常火热&#xff0c;已经成为家电和IT行业的最新潮流了。高清视频和普通视频有什么区别呢&#xff1f;主要是分辨率上的区别&#xff0c;720P视频的分辨率为1280X720&#xff0c;1080P视频的分…

解读SPP / SPPF / SimSPPF / ASPP / RFB / SPPCSPC

SPP与SPPF 一、SPP的应用的背景 在卷积神经网络中我们经常看到固定输入的设计&#xff0c;但是如果我们输入的不能是固定尺寸的该怎么办呢&#xff1f; 通常来说&#xff0c;我们有以下几种方法&#xff1a; &#xff08;1&#xff09;对输入进行resize操作&#xff0c;让他们…

go mongodb排序查询_《MongoDB》day two

Mongodb的更新方式有&#xff1f;db.集合名.update() 函数:用于更新已存在的文档。语法格式&#xff1a;db.COLLECTION_NAME.update({查询条件},{更新内容},{更新参数(可选)}) 注&#xff1a;这种方式会覆盖原有的文档。使用更新操作符 使用 save()函数更新文档 Mongodb的updat…

哈希表思路图解和代码实现

原文链接传送门 哈希表(散列)-Google上机题 看一个实际需求&#xff0c;google公司的一个上机题: 有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址…),当输入该员工的id时,要求查找到该员工的 所有信息. 要求: 不使用数据库,尽量节省内存,速度越…

glibc交叉编译_TSN之linuxptp交叉编译

0 开发环境1 linuxptp是什么2 为什么要交叉编译linuxptp3 修改makefile4 修改源码5 交叉编译0 开发环境笔记本&#xff1a;ubuntu18.04.5&#xff0c;内核版本为5.3 开发板&#xff1a;imx8mp-evk内核版本&#xff1a;Linux5.4.24交叉编译工具链&#xff1a;fsl-imx-xwayland-g…

声音编码

1.脉冲编码调制PCM文件格式简介 将音频数字化&#xff0c;其实就是将声音数字化。最常见的方式是透过脉冲编码调制PCM(Pulse Code Modulation) 。运作原理如下。首先我们考虑声音经过麦克风&#xff0c;转换成一连串电压变化的信号&#xff0c;如图一所示。这张图的横座标为秒&…

Elastic Stack简介

Elastic Stack简介 如果你没有听说过Elastic Stack&#xff0c;那你一定听说过ELK&#xff0c;实际上ELK是三款软件的简称&#xff0c;分别是Elasticsearch、 Logstash、Kibana组成&#xff0c;在发展的过程中&#xff0c;又有新成员Beats的加入&#xff0c;所以就形成了Elast…

webpack v3 结合 react-router v4 做 dynamic import — 按需加载(懒加载)

为什么要做dynamic import&#xff1f; dynamic import不知道为什么有很多叫法&#xff0c;什么按需加载&#xff0c;懒加载&#xff0c;Code Splitting&#xff0c;代码分页等。总之&#xff0c;就是在SPA&#xff0c;把JS代码分成N个页面份数的文件&#xff0c;不在用户刚进来…