软件优化-线性汇编_第1页
软件优化-线性汇编_第2页
软件优化-线性汇编_第3页
软件优化-线性汇编_第4页
软件优化-线性汇编_第5页
已阅读5页,还剩39页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

线性汇编和汇编优化器学习内容写线性汇编代码使用汇编优化器多周期循环的软件流水汇编优化器选项和伪指令题目一、写线性汇编代码二、写线性汇编代码举例—点积三、调用汇编优化器四、多周期循环的软件流水五、加权矢量和(WVS)循环展开一、写线性汇编代码软件工具流程线性汇编文件基本考虑事项线性汇编文件使用“.sa”扩展名仅对指定的代码段进行优化,指定代码段外的代码被拷贝为输出“.asm”文件线性汇编过程可以:传递参数返回结果使用符号变量不考虑流水线问题二、写线性汇编代码举例—点积点积线性汇编线性汇编不需要指出和考虑:功能单元寄存器延迟间隙确定优化代码段

Dotp:.cproczerosumloop:ldh*p_m++,mldh*p_n++,nmpym,n,prodaddprod,sum,sum[count]subcount,1,count[count]bloop

.endproc.cproc/.endproc:确定要优化的代码段必须成对使用可作为C调用的函数

在汇编代码中使用.proc/.endproc确定要优化的代码段,它们也必须成对使用使用符号变量Dotp:.cproc

.reg

p_m,m,p_n,n,prod,sum,countzerosumloop:ldh*p_m++,mldh*p_n++,nmpym,n,prodaddprod,sum,sum[count]subcount,1,count[count]bloop

.endproc.reg伪指令:声明符号变量,变量由优化器选择与功能单元一致的寄存器.reg在.(c)proc/.endproc内有效当变量为40/64bit时,变量使用寄存器对格式:如ahi:alo参数传递Dotp:.cprocp_m,p_n,count.regp_m,m,p_n,n,prod,sum,countzerosumloop:ldh*p_m++,mldh*p_n++,nmpym,n,prodaddprod,sum,sum[count]subcount,1,count[count]bloop

.returnsum

.endproc.cproc[variable1[,variable2,]]:给出输入参数.return:给出返回结果.return仅在.cproc/.endproc内有效.proc[register1[,register2,]];

给出输入参数.regp_m,

mvregister1,p_m;建立输入寄存器

:;与变量关系mvsum,register1.endproc[register1[,register2,]];给出返回结果保护寄存器Dotp:.cprocp_m,p_n,count.regp_m,m,p_n,n,prod,sum,count

.reservea3zerosumloop:ldh*p_m++,mldh*p_n++,nmpym,n,prodaddprod,sum,sum[count]subcount,1,count[count]bloop.returnsum

.endproc.reserve指出需要保护的寄存器当.cproc/.endproc内的代码明显使用了要保护的寄存器,优化器也可能使用该寄存器,如:流水代码的最小循环次数具有填充和排空5次运算迭代,循环计数设置为3最小循环次数:3循环测试计算最小循环次数最小循环次数=循环和排空的周期数这个点积代码最小循环次数=?冗余循环非流水代码执行较慢运算迭代次数>=最小循环次数流水代码执行较快消除冗余循环关闭软件流水(-mu)减小代码尺寸,但也减小吞吐量指出运算迭代次数(.trip)如果.trip≧最小循环次数,仅产生流水循环如果.trip<最小循环次数,产生两种循环不产生冗余循环(-ms)如果没给出.trip,仅产生不流水循环如果给出.trip,且.trip≧最小循环次数,仅产生流水循环指出运算迭代次数Dotp:.cprocp_m,p_n,count.regp_m,m,p_n,n,prod,sum,countzerosumloop:.trip40ldh*p_m++,mldh*p_n++,nmpym,n,prodaddprod,sum,sum[count]subcount,1,count[count]bloop.returnsum

.endproc指出运算迭代次数点积的完整线性汇编Dotp:.cprocp_m,p_n,count.regp_m,m,p_n,n,prod,sum,countzerosumloop:.trip40ldh*p_m++,mldh*p_n++,nmpym,n,prodaddprod,sum,sum[count]subcount,1,count[count]bloop.returnsum

.endproc三、调用汇编优化器调用汇编优化器和汇编器仅调用汇编器四、多周期循环的软件流水软件流水过程.用C语言实现算法并验证.写C6x线性汇编代码.画相关图.分配功能单元和寄存器.建编排表.将编排表转换为C6x汇编代码加权矢量和软件流水

第一步:C代码第二步:线性汇编代码第三步:相关图第四步:分配功能单元2周期循环2个周期/每次循环迭代迭代间隔:每次循环迭代占用的周期数多周期循环第五步:建迭代间隔编排表(1)第五步:建迭代间隔编排表(2)第五步:建迭代间隔编排表(3)第五步:建迭代间隔编排表(4)第五步:建迭代间隔编排表(5)第五步:建迭代间隔编排表(6)展开加权矢量和代码展开加权矢量和:2个结果/每3个周期要点:循环展开,充分利用资源汇编优化器选项和伪指令-on选项

-mt选项和.no_mdep伪指令

【C程序的restrict关键字】.mdep伪指令

.mptr伪指令

.trip伪指令

【C程序的MUST_ITERATEpragma】-on选项软件流水需要选择-o2或-o3选项-o=-o2-o3优化的工作:文件级优化

1.删除未使用的所有函数

2.当函数的返回值没有用到时,简化函数返回的形式

3.内联小的函数

4.重新对函数声明进行排序。这样就使得当优化调用代码时,被调用函数的属性是已知的。

5.当所用调用都传递一个相同的参数时,把这个参数直接放到函数体中去,不再通过寄存器/存储器的方式传递这个参数。

6.识别文件级变量的特征

-o3+-pm:程序级优化

如果一个函数中的一个特殊的变量的值总是一样的,编译器会用这个值直接代替该变量,直接进行值传递而不是参数传递。

如果一个函数的返回值都没有被用到,编译器就会删除这个函数的返回值。

如果一个函数没有被直接或间接地被调用,编译器就会删除这个函数。-mt选项和.no_mdep伪指令因为当你执行读取或存储指令时,汇编优化器并不知道你要访问的对象在哪里,所以汇编优化器就非常保守地认为存储器操作之间有相关性。汇编优化器会确保在下一次从reg1地址中读取数据之前往reg5地址中存储数据的工作已经完成。如果要存的.reg5中的地址不是“reg1”要读取的下一个地址,将导致循环优化效果不好。对于那些“reg5”是指向“reg1”的下一个地址的循环,这些是必要的。对于大部分的循环,并不是这样的,可以告诉汇编优化器更积极地安排存储器操作。可以通过在线性汇编函数中使用“.no_mdep”(无存储器相关性)伪指令或者在编译线性汇编文件的时候用-mt选项实现。.mdep伪指令假如你需要指明2个或更多的存储体的相关性,你可以使用.mdep伪指令。用存储体相关性标号来注释你的代码,并且在线性汇编函数中加上.mdep伪指令。当使用了.no_mdep或-mt后,才需要使用.mdep伪指令。.mdep伪指令表明从LDW指令到STW指令中有存储体相关性。这就意味着STW指令必须在LDW指令后执行。.mdep伪指令不表明在STW指令到LDW指令中存在存储体相关性。要处理后一种情况,还需要一个.mdep伪指令。

.mptr伪指令.mptr伪指令给汇编优化器提供了怎样避免存储体(bank)冲突的内容。汇编优化器会重新安排汇编代码中生成的存储体引用,以避免存储器的冲突,这些冲突是由伪指令.mptr指明的。这意味着通过避免存储器的冲突,汇编优化器产生的代码的执行速度会更快,没有因为存储体冲突而出现流水线停顿(stall)的情况。C64的L1D的存储体结构:8×32bit流水线停顿同一周期对同一bank的两次读取引起流水线阻塞的情况。LDW.D1*A4++,A5 ;load1,A4addressisinbank0||LDW.D2*B4++,B5 ;load2,B4addressisinbank0.mptr伪指令例子

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论