【文档说明】汇编语言与汇编程序课件.ppt,共(41)页,243.001 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44804.html
以下为本文档部分文字说明:
汇编语言优化题目一、优化方法简介二、并行指令三、填充延迟间隙四、展开循环五、字长优化(使用LDW)六、各优化方法小结七、软件流水八、软件流水步骤九、各种优化总结一、优化方法简介•使用并行指令•用有用的指令(取代NOP)填充延迟间隙•循环展开•字长优化(使用LDW)•软件流水二、使用并行指令使
用并行指令并行指令•哪些指令可以并行?两条取指令并行:•放“||”在第二个ldh前•.d1改为.d2,A改为B并行注意的问题例如:•ADD使用原来的A4值•如果在循环中:•循环之前清A4•不要忘记最后的累加并行指令小结•首先使代码正确执行,然后试图用并行指令。•并行代
码执行速度快,但必须小心确保代码按所期望执行。•在循环代码中,使用软件流水可执行并行指令。并行优化结果三、填充延迟间隙填充延迟间隙填充延迟间隙Sub和b指令移到ldh指令后:•LD的nop由4降为2•B的nop被消除填充
延迟间隙优化结果四、展开循环循环代码举例例1•去掉了第四次循环开销例2•循环次数减少一半例3•消除了所有循环开销循环展开举例小结举例周期数代码尺寸循环217119112171131216五、字长优化(使用字访问半字数据)使用LDH的点积
使用LDW进行优化使用LDW/MPYH乘法指令小结•操作数可以是有符号的,也可以是无符号的•乘法指令需一个延迟间隙•4种基本乘法指令:六、各种优化方法小结七、软件流水软件流水•产生高性能循环代码•执行并行指令•填充延迟间隙•功能单元使用
最大化•由开发工具产生•由编译器选项-o2或o3引入•汇编优化器(输入文件使用.sa扩展名而不是.asm)产生为什么学习软件流水?•知道开发工具是如何产生优化代码的•读懂开发工具的输出代码•检查开发工具效率•手工优化汇编代码•了解软件流水的工
作情况代码举例非流水代码流水代码软件流水中的术语填充(建立循环)循环(单周期循环3次迭代)排空(完成最后操作)流水代码八、软件流水步骤软件流水步骤1.用C语言实现算法并验证2.写C6x线性汇编代码3.画相关图4.分配功能单元
和寄存器5.建编排表6.将编排表转换为C6x汇编代码第一步:用C语言实现算法并验证第二步:写C62xx线性汇编代码线性汇编不需要指出和考虑:•功能单元•寄存器•延迟间隙•并行指令简单估计指令功能单元每周期可使用数目需要数目LDH,LDH.D2
2MPY.M21B.S21ADD,SUB.L(.D/.S)2(2-6)2第三步:画相关图相关图中的名词术语画相关图步骤:1、画节点(包括:指令、结果、通路)2、在通路旁标出父指令执行周期3、安排功能单元•安排必须的功能
单元•节点分配到A、B两侧•对所有节点分配功能单元平分.D、.S、.M最小化交叉通路平衡功能单元仲裁画点积相关图1.画节点(1)画点积相关图1.画节点(2)循环传递通路画点积相关图1.画节点(3)画点
积相关图2.标出父指令执行周期画点积相关图3.安排功能单元(1)画点积相关图3.安排功能单元(2)画点积相关图3.安排功能单元(3)第四步:分配功能单元根据功能单元和交叉通路的使用,可在单周期循环内编排这些指令。第四步:分配寄存器第五
步:建编排表(1)循环填充长度•抽出最长数据通路•计算长度:5+2+1=8周期•编排表列出0-7周期•填充:第0-6周期•循环:第7周期编排周期057填写指令建议从最长数据通路开始尽可能早开始(第
0周期)一旦确定指令执行的周期,在这以后的周期内,连续发生各次迭代倒推跳转和循环计数指令的发生周期第五步:建编排表(2)第六步:写C62xx汇编代码九、各种优化总结小结•学习了五种优化方:使用并行指令填充延迟间隙展开循环字长优化软件流水•手工实现软件流水过程使用并行指令
填充延迟间隙