




已阅读5页,还剩79页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章线性汇编优化代码,5.1汇编优化器选项与伪指令,5.2编写并行代码,5.3软件流水,5.4多周期循环的模迭代,5.5循环传递路径,5.6循环中的IF-Then-Else语句,5.7循环展开,5.8生命太长问题,5.9消除冗余取数,5.10存储体,5.11软件流水外循环,5.12同内循环一起条件执行外循环,5.13通用目标文件格式(COFF),5.1汇编优化器选项与伪指令,(1)-on选项(2)-mt选项和no_mdep伪指令(3).mdep伪指令(4).mptr伪指令(5).trip伪指令,5.2编写并行代码,5.2.1点积的C代码a)定点点积的C代码intdotp(shorta,shortb)intsum,i;sum=0;for(i=0;i15ADDpi_scaled,bi,ci;ci=(m*ai)15+biSTHci,*cptr+;存储cicntrSUBcntr,1,cntr;循环计数器递减cntrBLOOP;跳转到loop,5.4.2确定最小迭代间隔,1.展开的加权矢量和的C代码2.转换展开的内核循环为线性汇编3.确定新的最小迭代间隔,5.4.3画相关性图,图5-11把相关性图均匀分成了两个部分,最小迭代间隔为2。,5.4.4线性汇编资源分配,【例5.33】带资源分配的加权矢量和的线性汇编程序。LDW.D2*A4+,A2;ai跳转至loop,5.4.5模迭代间隔编排,1.资源冲突2.生命太长3.解决生命生命太长的问题4.安排剩余指令,5.4.6使用汇编优化器出来加权矢量和,例5.34为加权矢量和的线性汇编,该代码作为汇编优化器的输入,由汇编优化器产生软件流水循环。【例5.34】加权矢量和的线性汇编。,5.4.7最后汇编,该代码包括如下优化:,由于第次迭代的STHci+1与第+1次迭代的STHci并行执行,为防止STHci+执行次,而STHci执行次,对循环限定执行49次,但在循环退出后安排ADDci+1和STHci+指令;用于ADD指令的mask由MVK和MVKH指令设置;数组C的奇元素指针也在前面填充部分设置。【例5.35】加权矢量和汇编代码。,5.5循环传递路径,5.5.1将C代码的内核循环转换为线性汇编【例5.37】IIR内核循环的线性汇编。LDH*xptr+,xi;xi+1MPYc1,xi,p0;c1*xiLDH*xptr,xi+1;xi+1MPYc2,xi+1,p1;c2*xi+1ADDp0,p1,s0;c1*xi+c2*xi+1LDH*yptr+,yi;yiMPYc3,yi,p2;c3*yiADDs0,p2,s1;c1*xi+c2*xi+1+c3*yiSHRs1,15,yi+1;yi+1STHyi+1,*yptr;存储yi+1cntrSUBcntr,1,cntr;循环计数器递减cntrBLOOP;跳转至loop,5.5.2画相关性图,图5-15是IIR滤波器的相关性图,从存yi+1到取yi之间形成了一个循环传递路径,由于存取指令使用相同的存储器流水线。,5.5.3确定最小迭代间隔,1.画新的相关性图图5-16中所示是一个循环传递路径为4(2+1+1)的新的相关性图,因为MPYp2指令能够直接从寄存器中读取yi+1,因此循环传递路径可以减少6个周期,,5.5.3确定最小迭代间隔,2.新的TMS320C6x指令(内核循环)【例5.38】循环传递路径较小的IIR内核循环的线性汇编。LDH*xptr+,xi;xi+1MPYc1,xi,p0;c1*xiLDH*xptr,xi+1;xi+1MPYc2,xi+1,p1;c2*xi+1ADDp0,p1,s0;c1*xi+c2*xi+1MPYc3,y,p2;c3*yiADDs0,p2,s1;c1*xi+c2*xi+1+c3*yiSHRs1,15,y;yi+1STHy,*yptr+;存储yi+1cntrSUBcntr,1,cntr;循环计数器递减cntrBLOOP;跳转至loop,5.5.4线性汇编资源分配,【例5.39】带分配资源的IIR内核循环线性汇编。LDH.D1*A4+,A2;xi+1MPY.M1A6,A2,A5;c1*xiLDH.D1*A4,A3;xi+1MPY.M1XB6,A3,A7;c2*xi+1ADD.L1A5,A7,A9;c1*xi+c2*xi+1MPY.M2XA8,B2,B3;c3*yiADD.L2XB3,A9,B5;c1*xi+c2*xi+1+c3*yiSHR.S2B5,15,B2;yi+1STH.D2B2,*B4+;存储yi+1A1SUB.L1A1,1,A1;循环计数器递减A1B.S1LOOP;跳转至loop,5.5.5线模迭代间隔安排,表5-14是IIR滤波器的模迭代间隔表,表中SHR指令及时在周期10结束,以便下次迭代的MPYp2在周期11读取其结果。,5.5.6使用汇编优化器处理IIR滤波器,【例5.40】IIR滤波器的线性汇编。.global_iir_iir:.cprocx,y,c1,c2,c3.regxi,xi1,yi1.regp0,p1,p2,s0,s1,cntrMVK100,cntr;cntr=100LDH.D2*y+,yi1;yi+1LOOP:.trip100LDH.D1*x+,xi;xiMPY.M1c1,xi,p0;c1*xiLDH.D1*x,xi1;xi+1MPY.M1Xc2,xi1,p1;c2*xi+1ADD.L1p0,p1,s0;c1*xi+c2*xi+1MPY.M2Xc3,yi1,p2;c3*yiADD.L2Xs0,p2,s1;c1*xi+c2*xi+1+c3*yiSHR.S2s1,15,yi1;yi+1STH.D2yi1,*y+;存储yi+1cntrSUB.L1cntr,1,cntr;循环计数器递减cntrB.S1LOOP;跳转至loop.endproc,5.5.7最后汇编,例5.41是IIR滤波器的最后汇编代码,代码中,循环外有一个取y0指令,除此之外没有取y数组指令,执行该代码需要408个周期(4100)+8)。【例5.41】IIR滤波器的汇编代码。,5.6循环中的IF-Then-Else语句,5.6.1IF-Then-Else的C代码【例5.42】IF-Then-Else的C代码。intif_then(shorta,intcodeword,intmask,shorttheta)inti,sum,cond;sum=0;for(i=0;i15MPYa1,d,a2;a2=a1*dADDa2,a0,a3;a3=a2+a0ADDsum0,a3,sum0;sum0+=a3MPYbi,c,b0;b0=bi*cSHRb0,15,b1;b1=b015MPYb1,e,b2;b2=b1*eADDb2,b0,b3;b3=b2+b0ADDsum1,b3,sum1;sum1+=b3cntrSUBcntr,1,cntr;循环计数器递减cntrBLOOP;跳转到loop,5.8.3画相关性图,图5-19所示为生命太长代码相关性图,该算法包含3个各自独立的图,其中两个独立图中有分开的联合路径,从a0到a3与从b0到b3。,5.8.4确定最小迭代间隔,根据图5-19的相关性图和线性汇编指令可得出生命太长代码的资源表如表5-17所示。,5.8.4确定最小迭代间隔,图5-20是加MV指令的新相关图,该图左边的叉路由MV指令分成两段。,5.8.5线性汇编资源安排,例5.53是根据相关图得出的安排功能单元的线性汇编,此处使用了两个2x和一个1x通路,c、d、和e可以载入循环外的另一端寄存器中。【例5.53】生命太长代码的线性汇编。,5.8.6带MV指令的最后汇编,例5.54是带有MV指令的生命太长代码的最后汇编代码,执行该代码需要212个周期(200*100+11+1)。【例5.54】带有MV指令的生命太长代码的最后汇编代码。,5.9消除冗余取数,5.9.1转换C代码为线性汇编【例5.57】FIR滤波器内核循环的线性汇编。LDH.D2*x_1+2,x1;x1=xj+i+1LDH.D1*h+2,h0;h0=hiMPY.M1x0,h0,p00;x0*h0MPY.M1Xx1,h0,p10;x1*h0ADD.L1p00,sum0,sum0;sum0+=x0*h0ADD.L2Xp10,sum1,sum1;sum1+=x1*h0LDH.D1*x+2,x0;x0=xj+i+2LDH.D2*h_1+2,h1;h1=hi+1MPY.M2x1,h1,p01;x1*h1MPY.M2Xx0,h1,p11;x0*h1ADD.L1Xp01,sum0,sum0;sum0+=x1*h1ADD.L2p11,sum1,sum1;sum1+=x0*h1ctrSUB.S2ctr,1,ctr;循环计数器递减ctrB.S2LOOP;跳转至loop,5.9.2画相关性图,图5-21是消除冗余取后的FIR滤波器的相关性图。,5.9.3确定最小迭代间隔,表5-18是FIR滤波器代码的资源表,可以确定最小迭代间隔为2,这意味着每个周期可执行两个乘累加操作。,5.9.4线性汇编资源分配,【例5.58】例FIR滤波器的线性汇编。,5.9.5最后汇编,该嵌套循环执行的总周期数为2350,此处每个外循环都有15个周期的开销:9个周期执行内环填充;6个周期执行到外环的跳转。【例5.59】例消除冗余取指令的最终FIR滤波器汇编代码。,5.10存储体,5.10.1FIR滤波器的内核循环【例5.60】FIR滤波器最后汇编代码的内核循环。LOOP:ADD.L2XA8,B9,B9;sum1+=x1*h0|ADD.L1A7,A9,A9;sum0+=x0*h0|MPY.M2B1,B0,B7;*x1*h1|MPY.M1XB1,A1,A8;*x1*h0|B2B.S2LOOP;*跳转至内循环|LDH.D1*A5+2,A1;*h0=hi|LDH.D2*B5+2,B1;*x1=xj+i+1ADD.L1XB7,A9,A9;sum0+=x1*h1|ADD.L2B8,B9,B9;sum1+=x0*h1|MPY.M2XA0,B0,B8;*x0*h1|MPY.M1A0,A1,A7;*x0*h0|B2SUB.S2B2,1,B2;*内循环计数器递减|LDH.D2*B4+2,B0;*h1=hi+1|LDH.D1*A4+2,A0;*x0=xj+i+2,5.10.1FIR滤波器的内核循环,画出数组的奇偶元素的读取安排在同一循环周期内的FIR滤波器相关图,如图5-24所示。,5.10.2展开的FIR滤波器的C代码,例5.61是展开内核循环后的FIR滤波器C代码,该方法增加了安排指令的灵活性,而在不考虑数组存储形式和存储器block的情况下,写出不产生存储体冲突的FIR滤波器代码。【例5.61】展开内核循环后的FIR滤波器C代码。,5.10.3将C代码转换为线性汇编,例5.62为循环展开的FIR滤波器C代码内核循环的线性汇编。【例5.62】展开的FIR滤波器内核循环线性汇编。,5.10.4画相关性图,图5-25是不存在存储器冲突的FIR滤波器的相关性图。,5.10.5含有.mptr命令的展开后FIR线性汇编,例5.63给出了具有.mptr伪指令的展开FIR滤波器内核循环的线性汇编,.mptr伪指令允许汇编优化器根据特定指针寄存器和存储器访问信息,确定两个存储器操作是否存在bank冲突。【例5.63】展开的FIR滤波器线性汇编。,5.10.6线性汇编资源分配,随着一个循环内的指令数的增加,对该循环内的每个数值安排特定的寄存器越来越困难,由于TMS320C6000仅有32个寄存器,如果一个循环内有33条指令,且每一条指令都有一个数值,则这些数值不能单独占用一个寄存器,而是由该循环中不在相同周期存活的数值分享寄存器,手工安排寄存器虽然不复杂,但是可能会很慢。,5.10.7确定最小迭代间隔,如表5-19所示为FIR滤波器代码资源,没有存储器冲突的FIR滤波器的最小迭代间隔应该是4,这意味着每周期完成2个乘累加。,5.10.8最后汇编,例5.64是消除冗余取和无存储器冲突的FIR滤波器的最后汇编代码,该代码的执行周期数为2402(50(8*4+10+6)+2),其外环开销为16个周期。【例5.64】消除冗余取和无存储器冲突的FIR滤波器汇编代码。,5.11软件流水外循环,5.11.1展开FIR滤波器的C代码【例5.65】循环展开后的FIR滤波器C代码。,5.11.2最后汇编,例5.66是软件流水外环的FIR滤波器的最后汇编代码。在内循环后的每条指令注释中使用了e、p或o标记,分别表示指令是排空、填充和外环指令。【例5.66】消除冗余取、无存储器冲突和软件流水外环的FIR滤波器汇编代码。,5.12同内循环一起条件执行外循环,5.12.1展开FIR滤波器的C代码【例5.67】展开后的FIR滤波器C代码。,5.12.2将内核循环的C代码转换为线性汇编,【例5.68】展开后的FIR内核循环的线性汇编。,5.12.3将外环的C代码转换为线性汇编,【例5.69】FIR滤波器外环线性汇编。sctrSUBsctr,1,sctr;存储循环计数器递减!sctrSHRsum07,15,y0;(sum015)!sctrSHRsum17,15,y1;(sum115)!sctrSTHy0,*y+2;yj=(sum015)!sctrSTHy1,*y_1+2;yj+1=(sum115)!sctrMVK4,sctr;复位存储循环计数器pctrSUBpctr,1,pctr;复位循环计数器指针递减!pctrSUBx,rstx2,x;复位xptr!pctrSUBx_1,rstx1,x_1;复位x_1ptr!pctrSUBh,rsth1,h;复位hptr!pctrSUBh_1,rsth2,h_1;复位h_1ptr!pctrMVK4,pctr;复位指针复位循环计数器,5.12.4展开FIR滤波器的C代码,由例5.70可看出内循环与外循环总指令数为38条,显然不能使用4周期循环,为减少外环开销,又不降低内环吞吐量,必须再展开一次内循环,例为展开后的FIR滤波器C代码,其每次内环迭代处理8个元素。【例5.70】展开的FIR滤波器C代码。,5.12.5C代码转换为线性汇编(内核循环),该代码中指令有如下的调整:,使用LDW指令代替LDH指令,以减少循环的取指数;移位和存储指令紧跟在LDW指令后;sum0和sum1的第一个ADD指令是存储计数的条件执行指令,因为当sctr=0时,一个内循环已
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合成孔径雷达在北极海域海浪波高与海面风场遥感反演中的应用与挑战
- 节日复工安全培训课件
- 第四单元 课件 中职语文高教版基础模块上册
- 宁津辅警面试题库及答案
- 2025内蒙古呼伦贝尔学院招聘35人笔试备考参考答案详解
- 2025内蒙古鄂尔多斯东胜区第五小学分校塔拉壕小学招聘1人笔试备考及一套答案详解
- 教师招聘之《幼儿教师招聘》练习题及参考答案详解(模拟题)
- 2025年教师招聘之《幼儿教师招聘》试卷附参考答案详解(基础题)
- 教师招聘之《幼儿教师招聘》全真模拟模拟题及答案详解(易错题)
- 教师招聘之《小学教师招聘》能力提升试题打印含答案详解(模拟题)
- FZ/T 21001-2009自梳外毛毛条
- 职业感知与安全用电二
- 二年级语文《称赞》练习题
- 湘教版高中音乐(鉴赏)《黄河大合唱》课件
- CNAS体系基础知识培训课件
- 体育心理学(第三版)课件第三章运动兴趣和动机
- Unit1Developingideaslittlewhitelies课件-高中英语外研版必修第三册
- 培训反馈意见表
- 商业银行资产管理与负债管理
- 电力系统分析孙淑琴案例吉玲power程序实验指导书
- 高标准农田建设项目施工组织设计 (5)
评论
0/150
提交评论