开源的网站系统,中小企业网,新媒体营销案例有哪些,做网站充值犯法吗在数字基带处理器上代码的最佳放置
美国模拟器件公司 Jose Fridman
在手机等嵌入式系统中#xff0c;除了处理器执行时间外#xff0c;最重要的资源就是设备总线和存储器接口。本文将介绍一种在使用指令高速缓存时其带宽消耗的基础上#xff0c;统计分析高速缓存所采用…在数字基带处理器上代码的最佳放置
美国模拟器件公司 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)。然而在许多嵌入式系统中最重要的资源除了处理器执行时间外还有整个设备的总线及外部存储器接口。这些资源在高集成度系统中尤其重要例如手机中数字基带处理器其外部接口通常是最重要的系统资源之一。在本文中我们介绍了一种根据运行在基于指令高速缓存系统所消耗的带宽统计分析应用程序的方法。在外部接口受限制的设备中优化那些使用高速缓存的应用程序的读取带宽对提升指令周期性能有着良好效果。