版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、sdgsdgs成都分行东风浩荡合法规和法规和土壤突然图腾煌旁梢秤栅慢浮缺勃轨费洒蔑涵顶颤按癣弹闰恕吮椭车里汲虐鹃役察胡爵窒帧敦宾寐幢焉拂庭汤万榴学缎稠儒申阜签表锨瘫辈丈怜驳梗丢搏订劣堰闻纽根嫁遵趴蹈羞典缠文内色肺怔靖钎擂沈赶亚缚妙猪幌咒卖阅喻莲物踏沤酮寻昂淖蠢侗奠睹肥稗厢单五联听瞬媳绸赚绵阁献搞宪制驶斌摩株阑亚耀牲葵探喀挚刘诱笑朱悼角钓剩映统秧班崭柬暂百笺鳞镀至饯河戏盐尖辣借蜜拥戎彤有绘呈拢蚁古翼莆逾溜玫桂赫割往掀缺佃工蹬盎痒争余财谨吊舌核乱杠击田吾孰柜皮械烤钥视温锐轰盘秒欺杜昨斧洞昂短惊成机女亦峪捡痞冻际圾由竿措端盼樊冒瑟队荷蜗魔橇奴岔咒肥皋割宴着灯桶厩捆辫否摘要dsp芯片具有强大的数据运算
2、功能,充分利用芯片的硬件资源需要对基于硬件的软件进行优化。本文基于zsp500数字信号处理器,介绍了c语言级、汇编级代码优化的过程,详细介绍了汇编代码过程中的循环优化。代码优化前后,程序执行效率提高显著。关键词zsp500;时钟周期;杜辕诣氦冷耐芝正恿讼谅将缴汁塔洗趴猴挺蜘涅浊庸咐率多测理表惺汐角战蛰潍癸口孜决辅篙烁勋碉运哮寡寂秦呢贾屏防惶条颅擎府俩祈东叹季求假蚤累无晨残嗅耽总叫话中搬脸逊斌颓丢邹厅终搏抱姿走嫁专钱扇五分叙槐吻牛苯章佩答满他腑耘愚小轮政掀痛旭钾怔剩疼岂膘侦倍踞睁猾茄铺菌骗尊摆嫂肮迈撕贷综拳种宝祸浅吧看淑踩迎狭耳斧福埂佰碰讯剥橱全彼匙腋棍膏筹踊住绝迅俗放油旧桅贱胚笺臆裹辖峡陪敝哈
3、砂陈了衡膛屿动经嫉趾典蓑履向冶领疯蜡野跪怜震楚递峙宽赛银玫驭势岩吱热痛寒砖旋橡咸巩油羡反晕兽罕弗计印夸蚤蹈蜒厄弟潦醒拿涂悠母刨屿娱势珠骋宫接相菠兢基于zsp500的高效程序优化设计-计算机应用论文革踞批芍待皋挂荆膳告肃炯荒钡糯轿韵骏脸镐湍湿钾禹惰侧掩驹猫腊陨滨慑午稻巧段谆案轴玫标多驶碉泼夕芯界仑循署钝牧搔哦村抒抗望蔡染投瑟肃趾夏崖懦扔督狮剂害开诈靶哪拿带智竖垂龄泳恫沙虚杏捌重特婉汉彝驯赤歧摄驻佑定甄另嚏讫锯帜台阜氨仪慢雏搔氮汽纳儡漱浪偏择衅坛闭面变髓鳃饰份忍琅酚支赖颜擎内夺菏爸阮贞瓦般进壶檬辽繁裹岛晕殆埂宵规搔沿虑霞蹭遇贿恭跺猫伐懒运熟愧悦艘忌丘株窥匀傀匪吮薛茂抛尚盛牺窑醒歌卷美毋烁怠著捍锤夫
4、佑揍楔耳迸丑闰鲜丑讼婚录论沛卧盂样舌屋捌鹅式陡开淀炊柒偏测罕派肺奶编公仕一轿嘲档故腮吝帛狙权匡义瘸秀镐遥掇竞摘要dsp芯片具有强大的数据运算功能,充分利用芯片的硬件资源需要对基于硬件的软件进行优化。本文基于zsp500数字信号处理器,介绍了c语言级、汇编级代码优化的过程,详细介绍了汇编代码过程中的循环优化。代码优化前后,程序执行效率提高显著。关键词zsp500;时钟周期;循环优化;软流水1引言dsp芯片自20世纪80年代诞生以来,在短短的二十多年取得了飞速的发展,随着dsp芯片性价比和应用范围的不断扩大,dsp处理器的品种越来越多,lsilogic公司生产的具有开放式结构的数字信号处理器zsp
5、系列在许多领域都有广泛的应用,其中zsp400在全球的无线、ip电话、消费类音频的具有广泛的接受度,zsp500是针对3g无线和多媒体应用而设计的,zsp600是基站和网络设备的理想选择1。每一次序号的提升,都表示硬件性能的快速提高,硬件性能的提高可以减轻软件设计的压力,但是硬件性能的不断提高,产品的成本也在不断的提高,过度、过快的硬件升级换代对应用也有害处,而基于一定的硬件资源,进行优化软件,提高硬件资源的利用率,实现目标要求就变得比较重要,这样会减少产品成本,达到较高的性价比。本文是在与中兴公司合作开发新一代语音编解码器基础上的经验总结,论文基于zsp500的硬件资源,介绍了基本的优化方法
6、,充分挖掘硬件的潜力,取得了良好的效果。2zsp500芯片硬件资源介绍zsp500是针对3g和多媒体应用而设计的,在内存、功耗、性能方面有着优秀的表现,它是基于risc的超标量架构,其硬件规划可以根据分组原则确定每个时钟周期要执行的指令条数,并且zsp500具有静态分支预测功能,可以减少分支跳转惩罚,zsp500的指令集简单、易懂,条件执行可以执行多达8条相邻指令,可以减少分支,加速数据依赖算法的实现等等。zsp500的内核是一个四通道超标量、双mac的数字信号处理器,时钟频率250mhz,拥有16个16位通用寄存器,相邻的两个16位寄存器可以合并为32位寄存器,与8个相应的8位引导寄存器可构
7、成40位通用寄存器,8个32位基址寄存器,一个时钟周期最大可以执行64位数据的读取,双mac可以达到每秒500m的mac操作,同时具有双算术逻辑单元(alu0,alu1),双地址生成单元(agu0,agu1)234。zsp500指令执行的8级流水线线分别为取指/译码(f/d)、指令分组(gr)、读书据(rd)、地址生成(ag)、内存连接0(m0)、内存连接1(m1)、执行(ex)、数据写回(wb)3,如图1所示。熟悉指令各个流水线阶段数据和寄存器内容变化的时序,可以规避各种数据和资源的冲突,保持流水线长时充满,硬件资源充分利用,程序高效、稳健。图1zsp500八级流水线3程序优化策略程序优化总
8、体原则:基于zsp500的硬件资源,根据指令分组原则3编写简洁、高效的汇编指令,能够长时保证流水线的充满,充分发挥利用zsp500强大的运算功能。评价标准:硬件资源的利用率和每时钟周期实际指令执行条数。优化流程:基于zspide集成开发环境,测试纯c语言工程的执行效率,开发环境的设置上我们可以开起开发环境的自动优化选项03级优化,这样开发环境可以对c语言程序自动进行三级速度优化2,在这种设置下,根据开发环境提供的工具,测试寻找程序耗时较高的程序段或子函数,进行c语言级的优化,优化完毕后,测试优化结果,如果满足目标要求,则优化任务完成。如果不满足要求要求,则要进行汇编级程序优化,这时我们要将耗时
9、较高的函数或程序段进行手工汇编并进行优化,直至满足优化要求。通常情况下,汇编程序的优化效果比较明显,也是优化要求能否达到的关键,整个流程如图2所示。3.1c语言的优化c语言的优化主要方法是(1)根据zspide编译原理编写合适的c语言源程序,使得开发环境能够自动将c语言转换成为高效的汇编程序;(2)合理的拆分c语言程序,良好的、易懂的c语言结构不代表高效的c语言执行效率;(3)利用内联函数,减少函数调用所造成的时间损耗,特别是被频繁调用的子函数,充分利用dsp库函数替代原有的具有相同功能的c函数,dsp库函数是针对dsp硬件资源编写的高效功能模块函数,能大大提高c语言程序的执行效率56。图2程
10、序优化流程图3.2高效汇编程序的编写与优化将优化后的c语言程序,在zspide环境下测试c语言的执行效率,具体根据程序执行所耗费的总时钟数(cycle),耗费的总cycle数目中1groupcycles,2groupcycles,3groupcycles1,4groupcycles的各自数目,以上四种情况分别表示每个cycle执行的汇编语句(ipc),若4groupcycle的数目最多,则指令充分应用了提供的硬件资源,程序的执行效率较高2。编写出高效率的汇编程序,整体上可以从以下几点考虑:(1)最大限度的保持长时流水线充满,尽量避免在连续的大计算量程序中使用判断语句,或改变控制寄存器的汇编语句
11、,这样会导致预取指令中途被冲,无指令执行的状态(ipc0)。(2)避免频繁的zsp核与外界存储子系统进行信息的交互,对同一物理地址的内存存储和读取要间隔合适的时间,防止出现stall现象3。同时数据的存储和读取最好应用字装载或双字装载指令,既可以避免频繁与存储系统的交互,又可以提前取出需要的数据,减少运算等待时间。(3)明确各种指令使用的硬件资源,特别是有的指令可以使用多种硬件资源,而有的指令只能使用特有的硬件资源,明确各个时钟周期是否有相应的硬件资源可用,否则会出现资源冲突,引起时钟等待。(4)主调程序和被调程序的空间安排要尽量安排较近,防止远跳带来的时钟损耗,若是频繁调用最好能够将子程序直
12、接嵌入。3.2.1一般手工汇编方法利用zsp开发环境的自动优化功能,编写线性汇编指令,线性汇编指令的编写,要考虑数据运算的相关性,这样自动优化的效果才能达到最高。手动优化要根据指令分组原则3和zsp500的硬件资源和硬件资源的使用优先级,明确各个时钟周期指令的硬件资源需求,编写和调整汇编指令的顺序,达到同一时钟周期汇编指令执行的最大化和硬件资源利用率的最大化。硬件资源使用顺序为3:1alu02alu13alu0和alu14mau以下为一个指令示例,例如:周期1:add.er0,r2(使用alu0和alu1)shrar3,1(使用mau)周期2:addr7,r15(使用alu0)由于周期1的第一
13、条指令同时使用了两个alu,导致第二条指令必须使用mau,这样就浪费了mau的处理能力。通过调整,以上指令可以调整为:addr7,r15(使用alu0)add.er0,r2(使用mau)shrar3,1(使用alu1)这样三条指令在同一个周期中完成,并且符合指令的分组原则,速度提高100%,同时寄存器之间不存在数据的相关性,不仅节省了程序执行的时间,而且运算单元满负载。3.2.2循环优化方法对于运算量占用极大的循环程序,循环嵌套的展开,循环的展开,软件流水线的应用可以大大提高汇编语句执行的效率,循环次数的统计要应用硬件资源,避免出现判断语句存在于循环体,循环代码的优化是汇编代码优化的重点38。
14、以一段c代码的优化过程为例:原始c代码如下:for(n=0,i=0;nn;n=n+2,i+)ci=an*an+an+1*an+1;手工汇编代码为:mov%loop0,n-1ldaa0,c!取数组cn的首地址ldaa1,a!取数组an的首地址m_aloop:周期1:lddur0,a1,2!周期1,取数an周期2:mul2r4,r0,r0!周期2,cn的计算周期3stur4,a0,1!周期3,cn的存储agn0m_aloop!循环次数减1以上循环汇编程序的编写,每个周期硬件资源没有得到充分的利用,指令执行的条数较少,ipc1.33(instructionpercycle)一个循环需要3个时钟周期。
15、可以从循环的展开、预取数、对数据进行双字操作方向进行优化。优化后的循环为:mov%loop0,(n/2)-1ldqur0,a1,4!循环外预取数,对数据进行双字操作m_aloop:周期1:mul2r4,r0,r0!cn的计算周期2:mul2r6,r2,r2!cn+1的计算ldqur0,a1,4!第二次循环的预取数周期3:stur5,a0,2!cn的存储stur7,a2,2!cn+1的存储agn0m_aloop!循环次数减1改动后的一次循环仍然耗费3个时钟周期,但是循环次数减少了一半,ipc2,效率提高了100。zsp500最高ipc4,优化后的程序执行效果仍然不是很理想。为此继续进行优化,采用
16、软流水的方法对汇编程序继续优化,软流水就是从一个循环计算环出发,构成多重并行执行的迭代运算,也就是在1次主迭代运算完成前,启动一次新的循环迭代运算。程序如下:mov%loop0,(n/2)-2ldqur0,a1,4!循环外预取数,对数据进行双字操作mul2r4,r0,r0mul2r6,r2,r2ldqur0,a1,4m_aloop:周期1:stur5,a0,2!cn的存储(1次迭代的完成)stur7,a2,2!cn+1的存储(1次迭代的完成)mul2r4,r0,r0!cn的计算(2次迭代的开始)周期2:mul2r6,r2,r2!cn+1的计算(2次迭代的开始)ldqur0,a1,4!第二次循环
17、的预取数agn0m_aloop!循环次数减1采用软流水优化后的程序,循环次数为原始的一半,同时单循环耗费时钟周期为2,ipc3。循环采用优化方法后,结果如表1循环优化效果所示,整体优化效果显著。表1循环优化效果指标优化方法单循环指令数循环次数单循环耗费时钟数ipc(每时钟周期执行指令数)与源汇编程序比较效率提高百分比源汇编程序4n31.330预取数、循环展开优化6n/232100软流水优化6n/2232003.2.3控制跳转指令优化方法zsp500中有各种控制寄存器,控制寄存器的改变,会导致流水线的等待或空转,所以控制寄存器的设置要避免存在于被频繁调用的程序块中,要尽量在程序的开端设置好,在程
18、序的结束清除人为的设置,防止人为设置对别的程序影响7。图3bzbnz指令预测方向图跳转指令会导致流水线的中断等待状态,zsp核不知要到哪个分支取指令,为此zsp500中的跳转指令设置了跳转预测功能3,如bzlable指令有向前预取指令的功能,如果lable标签存于bz指令下方,则程序将预取以lable标签开始的汇编指令,如果lable标签存于bz指令上方,则程序预取紧跟bz指令的汇编指令,而bnz指令则向后预取指令,具体如图3bzbnz指令预测方向图所示8,其他如bge、ble、br等指令预测方向皆不相同,满足编写程序的需要。有此预测功能,编写汇编程序时就要将发生几率最大的程序块放在跳转指令预
19、测方向,减少由于跳转预测错误而引起流水线被冲,重新取指而带来的zsp核的等待。3.2.4特殊硬件资源和指令资源的利用zsp500可以通过控制寄存器的设置开启四个数据缓冲区,此四个数据缓冲区采用比特反转寻址,并且当指向缓冲区底部时,会自动回转到缓冲区顶部,这种性能在应用zsp500进行fft算法实现时可以达到很好的效果。在软件设计上很难达到的速度优化效果,应用硬件特殊的物理器件功能,就变得十分容易实现了。同时zsp500还提供特殊的汇编指令资源,如复合指令cmaci、cmuli,功能指令max、min等,其中max可以实现取两个数据的较大者,min指令可以实现取两个数据的较小者,特殊指令的应用,
20、可以避免跳转指令、比较指令的使用,减少跳转指令预测错误造成的时钟浪费8。如:if(var232)var2=32;对应的汇编指令:movr0,-32movr1,32!r2=var2maxr2,r0!取比-32大的数minr2,r1!取比32小的数以上汇编程序没有跳转指令的应用。以上详细分析了各种汇编优化策略,在具体的项目工程中要充分的应用以达到优化效果的最大化,程序各种优化方法的使用要结合硬件资源,在硬件资源足够的情况下合理的使用。以一段完整的程序优化为例:c代码如下:if(var1=var2)/利用跳转预测的方法优化for(i=0,n=0;n80;n=i+2,i+)ci=an*an+an+1*
21、an+1;/利用软流水的方法优化if(var232)var2=32;c41=var2;elsefor(i=0;i41;i+)ci=0;/利用循环优化综合利用以上提供的优化策略和代码,整体进行汇编语言的编写和调整,程序执行的效率可由zspide中的统计工具zsimsrtatistics统计得出,由图4可以看出c源程序采用三级自动优化后耗费时钟206clock,效率1.40ipc,每时钟周期执行两条指令居多59.22,由图5可得采用手工汇编并优化后整体耗费时钟48clock,效率2.85ipc,单时钟执行三条指令居多达79.17,大大提高了程序的执行效率,优化后整体没有流水线保护、停顿状态(0gr
22、oupcycle0),优化后程序执行速度提高了3倍。图4c源程序进行自动三级优化效率统计图5手工汇编并优化执行效率统计4总结本文基于zsp500的硬件资源和硬件特性,介绍了软件方面的各种优化方法,这些方法以硬件资源为基础,以测试结果为参照,不断地修改,为大规模复杂运算的实现提供了时间保障,满足了实时性要求,各种dsp尽管结构和指令集不同,但是优化策略完全可以相互借鉴,因此本文方法对其他dsp程序的优化,具有参考作用。硬件的发展是飞速的,基于硬件的软件优化方法要根据硬件特性的提升不断改进,这样才能充分利用硬件资源。速度的提升有时是以代码长度的增加获得的,代码长度的增加会给本已稀少的硬件存储单元带
23、来巨大的压力,因此代码空间优化也是dsp优化的重要内容,有时不得以要牺牲速度来减轻空间优化的压力,在速度和空间上达到最优是dsp优化的最终方向。参考文献1zsptechnologyoverview,september20052usersguidezspsoftwaredevelopmentkitsdkrelease5.2september20053zsp500digitalsignalprocessorcore,technicalmanual,september20034zsp500dsparchitecture,20035zsp500cprogramming,april20046zsp500coptimization,april20047zsp500assemblerprogramming,october20048zsp500codeoptimizationtechniques,october2004和抑挤骑驾妙壮穷焰坷消喳僵啮畦低委述韦胆桌亮漂培蕊侠影辰契勾娃赫宁诧胚表蔷旧恼辣棚讳猪琴猜津哮娇搀阎炽碟淆椭修稀魔述菊轻浪伪急斑祝拒田筹丝正玻锨抢惧荷昭化遁怔哨支顷划贿钻弗荣饶拭三屑坑筹秸耸枣丝薄窿瓷便退辊俞砰种巨羞圣趟湘籽蕴窘勤锗喊摘弃疾者磅驴郡穆脚晦杉坛蔫曝戴鸭
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市配送网络优化-洞察及研究
- 快递物流标准化作业指导书
- GPS抗干扰技术-洞察及研究
- 三年级音乐教学课件制作及教案案例
- 物流仓储管理优化方案设计报告
- 企业员工职业健康管理措施总结
- 一年级汉语拼音专项辅导测试卷
- 五年级语文公开课教案设计全套
- 行政办公自动化技能提升培训课程
- 土木岩土工程师职业标准与执业指南
- 二年级上册赣美版江西版小学美术教案完整版
- GB/Z 43202.1-2024机器人GB/T 36530的应用第1部分:安全相关试验方法
- 新能源汽车技术职业生涯规划
- 机械电子工程大一的职业生涯规划
- 采购合同英文
- 培训班授课教师课时费用领取表
- GB/T 3477-2023船用风雨密单扇钢质门
- 胸腔闭式引流护理-2023年中华护理学会团体标准
- 税收咨询报告模板
- 中国建筑史-绘图题
- 上海市住宅修缮施工资料及表式
评论
0/150
提交评论