线性汇编优化代码

上传人:无*** 文档编号:247365962 上传时间:2024-10-18 格式:PPT 页数:84 大小:1.16MB
返回 下载 相关 举报
线性汇编优化代码_第1页
第1页 / 共84页
线性汇编优化代码_第2页
第2页 / 共84页
线性汇编优化代码_第3页
第3页 / 共84页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,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,代码,int dotp(short a,short b),int,sum,i;,sum,=0;,for(i=0,;i100;i+),sum,+=ai*bi;,return(sum,);,5.2.1,点积的,C,代码,b),浮点点积的,C,代码,float dotp(float a,float b),int i;,float sum;,sum=0;,for(i=0;i 15,ADD,pi_scaled,bi,ci;ci=(m*ai)15+bi,STH,ci,*cptr+,;,存储,ci,cntr,SUB,cntr,1,cntr,;,循环计数器递减,cntr,B,LOOP,;,跳转到,loop,5.4.2,确定最小迭代间隔,1.,展开,的加权矢量和的,C,代码,2.,转换,展开的内核循环为线性汇编,3.,确定,新的最小迭代间隔,5.4.3,画相关性图,图5-11把相关性图均匀分成了两个部分,最小迭代间隔为2。,5.4.4,线性汇编资源分配,【,例,5,.33】,带资源分配的加权矢量和的线性汇编程序。,LDW.D2*A4+,A2;ai&ai+1,LDW.D1*B4+,B2;bi&bi+1,MPY.M1 A2,B6,A5;pi=m*ai,MPYHL.M2 A2,B6,B5;pi+1=m*ai+1,SHR.S1 A5,15,A7;pi_scaled=(m*ai)15,SHR.S2 B5,15,B7;pi+1_scaled=(m*ai+1)15,AND.L2X B2,B10,B8;bi,SHR.S2 B2,16,B1;bi+1,ADD.L1X A7,B8,A9;ci=(m*ai)15+bi,ADD.L2 B7,B1,B9;ci+1=(m*ai+1)15+bi+1,STH.D1 A9,*A6+2;,存储,ci,STH.D2 B9,*B0+2;,存储,ci+1,A1SUB.L1 A1,1,A1;,循环计数器递减,A1B.S1 LOOP;,跳转至,loop,5.4.5,模迭代间隔编排,1.,资源,冲突,2.,生命太长,3.,解决生命生命太长的问题,4.,安排剩余指令,5.4.6,使用汇编优化器出来加权矢量和,例,5.34,为加权矢量和的线性汇编,该代码作为汇编优化器的输入,由汇编优化器产生软件流水循环。,【,例,5,.34】,加权矢量和的,线性汇编,。,5.4.7,最后汇编,该代码包括如下优化,:,由于第次迭代的,STH,ci+1,与第,+1,次迭代的,STH,ci,并行执行,为防止,STH,ci+,执行次,而,STH,ci,执行次,对循环限定执行,49,次,但在循环退出后安排,ADD ci+1,和,STH,ci+,指令;,用于,ADD,指令的,mask,由,MVK,和,MVKH,指令设置;,数组,C,的奇元素指针也在前面填充部分设置。,【,例,5,.35】,加权矢量和,汇编代码,。,5.5,循环传递路径,5.5.1,将,C,代码的内核循环转换为线性汇编,【,例,5,.37】,IIR,内核循环的线性汇编。,LDH*xptr+,xi;xi+1,MPY c1,xi,p0;c1*xi,LDH*xptr,xi+1;xi+1,MPY c2,xi+1,p1;c2*xi+1,ADD p0,p1,s0;c1*xi+c2*xi+1,LDH*yptr+,yi;yi,MPY c3,yi,p2;c3*yi,ADD s0,p2,s1;c1*xi+c2*xi+1+c3*yi,SHR s1,15,yi+1;yi+1,STH yi+1,*yptr;,存储,yi+1,cntrSUB cntr,1,cntr;,循环计数器递减,cntrB,LOOP,;,跳转至,loop,5.5.2,画相关性图,图,5-15,是,IIR,滤波器的相关性图,从存,yi+1,到取,yi,之间形成了一个循环传递路径,由于存取指令使用相同的存储器流水线。,5.5.3,确定最小迭代间隔,1.,画,新的相关性图,图,5-16,中所示是一个循环传递路径为,4,(,2+1+1,)的新的相关性图,因为,MPY p2,指令能够直接从寄存器中读取,yi+1,,因此循环传递路径可以减少,6,个周期,,5.5.3,确定最小迭代间隔,2.,新,的,TMS320C6x,指令(内核循环),【,例,5,.38】,循环传递路径较小的,IIR,内核循环的线性汇编。,LDH*xptr+,xi;xi+1,MPY c1,xi,p0;c1*xi,LDH*xptr,xi+1;xi+1,MPY c2,xi+1,p1;c2*xi+1,ADD p0,p1,s0;c1*xi+c2*xi+1,MPY c3,y,p2;c3*yi,ADD s0,p2,s1;c1*xi+c2*xi+1+c3*yi,SHR s1,15,y;yi+1,STH y,*yptr+;,存储,yi+1,cntrSUB cntr,1,cntr;,循环计数器递减,cntrB,LOOP,;,跳转至,loop,5.5.4,线性汇编资源分配,【,例,5.39】,带分配资源的,IIR,内核循环线性汇编。,LDH.D1*A4+,A2;xi+1,MPY.M1 A6,A2,A5;c1*xi,LDH.D1*A4,A3;xi+1,MPY.M1X B6,A3,A7;c2*xi+1,ADD.L1 A5,A7,A9;c1*xi+c2*xi+1,MPY.M2X A8,B2,B3;c3*yi,ADD.L2X B3,A9,B5;c1*xi+c2*xi+1+c3*yi,SHR.S2 B5,15,B2;yi+1,STH.D2 B2,*B4+;,存储,yi+1,A1 SUB.L1 A1,1,A1;,循环计数器递减,A1 B.S1 LOOP;,跳转至,loop,5.5.5,线模迭代间隔安排,表,5-14,是,IIR,滤波器的模迭代间隔表,表中,SHR,指令及时在周期,10,结束,以便下次迭代的,MPY p2,在周期,11,读取其结果。,5.5.6,使用汇编优化器处理,IIR,滤波器,【,例,5,.40】,IIR,滤波器的线性汇编。,.global _iir,_iir:.cproc x,y,c1,c2,c3,.reg xi,xi1,yi1,.reg p0,p1,p2,s0,s1,cntr,MVK 100,cntr;cntr=100,LDH.D2*y+,yi1;yi+1,LOOP:.trip 100,LDH.D1*x+,xi;xi,MPY.M1 c1,xi,p0;c1*xi,LDH.D1*x,xi1;xi+1,MPY.M1X c2,xi1,p1;c2*xi+1,ADD.L1 p0,p1,s0;c1*xi+c2*xi+1,MPY.M2X c3,yi1,p2;c3*yi,ADD.L2X s0,p2,s1;c1*xi+c2*xi+1+c3*yi,SHR.S2 s1,15,yi1;yi+1,STH.D2 yi1,*y+;,存储,yi+1,cntr SUB.L1 cntr,1,cntr;,循环计数器递减,cntr B.S1 LOOP;,跳转至,loop,.endproc,5.5.7,最后汇编,例,5.41,是,IIR,滤波器的最后汇编代码,代码中,循环外有一个取,y0,指令,除此之外没有取,y,数组指令,执行该代码需要,408,个周期(,4100,),+8,)。,【,例,5,.41】,IIR,滤波器,的汇编代码,。,5.6,循环中的,IF-Then-Else,语句,5.6.1 IF-Then-Else,的,C,代码,【,例,5.42】,IF-Then-Else,的,C,代码。,int if_then(short a,int codeword,int mask,short theta),int,i,sum,cond;,sum,=0;,for,(i=0;i 32;i+),cond,=codeword,if,(theta=!(!(cond),sum,+=ai;,else,sum,=ai;,mask,=mask 1;,return(sum,);,5.6.2,转换,C,代码为线性汇编,【,例,5.43】,IF-Then-Else,内核循环的线性汇编。,AND codeword,mask,cond;cond=codeword&mask,condMVK 1,cond;!(!(cond),CMPEQ theta,cond,if;(theta=!(!(cond),LDH*aptr+,ai;ai,if ADD sum,ai,sum;sum+=ai,!if SUB sum,ai,sum;sum=ai,SHL mask,1,mask;mask=mask 1;,cntrADD 1,cntr,cntr;,计数器递减,cntrB LOOP;,循环,5.6.3,画相关性图,图,5-17,是,If-Then-ElseC,代码的相关性图。,5.6.4,确定最小迭代间隔,从表,5-15,中可以看出,没有一个资源是使用超过两次的,因此,最小迭代间隔仍然为,2,。,单元,指令,合计,/单元,单元,指令,合计,/单元,.M1,0,.M2,0,.S1,SHL&B,2,.S2,MVK,1,.D1,LDH,1,.L2,CMPEQ,1,.D2,ADD&SUB,2,.L2或.S2,AND,1,.L1,.S1,或.D1,.L2,.S2或.D2,ADD,1,非,.M单元合计,5,非,.M单元合计,4,5.6.5,线性汇编资源分配,【,例,5.44】,If-Then-Else,代码的线性汇编。,.global _if_then,_if_then:.cproc a,cword,mask,theta,.reg cond,if,ai,sum,cntr,MVK 32,cntr;cntr=32,ZERO sum;sum=0,LOOP:.trip 32,AND.S2X cword,mask,cond;cond=codeword&mask,cond MVK.S2 1,cond;!(!(cond),CMPEQ.L2 theta,cond,if;(theta=!(!(cond),LDH.D1*a+,ai;ai,if ADD.L1 sum,ai,sum;sum+=ai,!if SUB.D1 sum,ai,sum;sum=ai,SHL.S1 mask,1,mask;mask=mask 1;,cntr ADD.L2 1,cntr,cntr;,计数器递减,cntr B.S1 LOOP;,循环,.return sum,.endproc,5.6.6,最后汇编,例,5.45,是软件流水后的最后汇编代码,该循环代码的性能为,70,个周期。,【,例,5.45】,If-Then-Else,汇编代码,。,5.6.7,性能比较,【,例,5.46,】,循环次数大于,3,的,If-Then-Else,汇编代码,。,5.7,循环展开,5.7.1,展开,IF-Then-Else,的,C,代码,【,例,5.47】,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!