《第八讲汇编语言优化.ppt》由会员分享,可在线阅读,更多相关《第八讲汇编语言优化.ppt(57页珍藏版)》请在三一文库上搜索。
1、BIT/TI,第八讲 汇编语言优化,1,第八讲 汇编语言优化,BIT/TI,第八讲 汇编语言优化,2,学习内容,描述各种优化方法 使用字访问优化点积代码 使用软件流水手工优化汇编循环,BIT/TI,第八讲 汇编语言优化,3,题目,一、优化方法简介 二、并行指令 三、填充延迟间隙 四、展开循环 五、字长优化(使用LDW) 六、各优化方法小结 七、软件流水 八、软件流水步骤 九、各种优化总结,BIT/TI,第八讲 汇编语言优化,4,一、优化方法简介,使用并行指令 用有用的指令(取代NOP)填充延迟间隙 循环展开 字长优化(使用LDW) 软件流水,BIT/TI,第八讲 汇编语言优化,5,二、使用并行
2、指令,BIT/TI,第八讲 汇编语言优化,6,使用并行指令,哪些指令可以并行?,BIT/TI,第八讲 汇编语言优化,7,并行指令,哪些指令可以并行? 两条取指令并行: 放“|”在第二个ldh前 .d1改为.d2,A改为B,BIT/TI,第八讲 汇编语言优化,8,并行注意的问题,例如: ADD使用原来的A4值 如果在循环中: 循环之前清A4 不要忘记最后的累加,BIT/TI,第八讲 汇编语言优化,9,并行指令小结,首先使代码正确执行,然后试图用并行指令。 并行代码执行速度快,但必须小心确保代码按所期望执行。 在循环代码中,使用软件流水可执行并行指令。,BIT/TI,第八讲 汇编语言优化,10,并
3、行优化结果,BIT/TI,第八讲 汇编语言优化,11,三、填充延迟间隙,BIT/TI,第八讲 汇编语言优化,12,填充延迟间隙,NOP:相当于未优化 为了消除NOP,如何调整指令顺序?,BIT/TI,第八讲 汇编语言优化,13,填充延迟间隙,Sub和b指令移到ldh指令后: LD的nop由4降为2 B的nop被消除,BIT/TI,第八讲 汇编语言优化,14,填充延迟间隙优化结果,BIT/TI,第八讲 汇编语言优化,15,四、展开循环,BIT/TI,第八讲 汇编语言优化,16,循环代码举例,BIT/TI,第八讲 汇编语言优化,17,例1,去掉了第四次循环开销,BIT/TI,第八讲 汇编语言优化,
4、18,例2,循环次数减少一半,BIT/TI,第八讲 汇编语言优化,19,例3,消除了所有循环开销,BIT/TI,第八讲 汇编语言优化,20,循环展开举例小结,BIT/TI,第八讲 汇编语言优化,21,五、字长优化(使用字访问半字数据),BIT/TI,第八讲 汇编语言优化,22,使用LDH的点积,BIT/TI,第八讲 汇编语言优化,23,使用LDW进行优化,BIT/TI,第八讲 汇编语言优化,24,使用LDW/MPYH,BIT/TI,第八讲 汇编语言优化,25,乘法指令小结,操作数可以是有符号的,也可以是无符号的 乘法指令需一个延迟间隙 4种基本乘法指令:,BIT/TI,第八讲 汇编语言优化,2
5、6,六、各种优化方法小结,BIT/TI,第八讲 汇编语言优化,27,七、软件流水,BIT/TI,第八讲 汇编语言优化,28,软件流水,产生高性能循环代码 执行并行指令 填充延迟间隙 功能单元使用最大化 由开发工具产生 由编译器选项-o2或o3引入 汇编优化器(输入文件使用.sa扩展名 而不是.asm)产生,BIT/TI,第八讲 汇编语言优化,29,为什么学习软件流水?,知道开发工具是如何产生优化代码的 读懂开发工具的输出代码 检查开发工具效率 手工优化汇编代码 了解软件流水的工作情况,BIT/TI,第八讲 汇编语言优化,30,代码举例,这个循环执行5次需要多少周期? (不考虑延迟间隙) 周期,
6、BIT/TI,第八讲 汇编语言优化,31,非流水代码,BIT/TI,第八讲 汇编语言优化,32,流水代码,BIT/TI,第八讲 汇编语言优化,33,软件流水中的术语,填充 (建立循环) 循环 (单周期循环 3次迭代) 排空 (完成最后操作),BIT/TI,第八讲 汇编语言优化,34,流水代码,BIT/TI,第八讲 汇编语言优化,35,八、软件流水步骤,BIT/TI,第八讲 汇编语言优化,36,软件流水步骤,. 用C语言实现算法并验证 . 写C6x线性汇编代码 . 画相关图 . 分配功能单元和寄存器 . 建编排表 . 将编排表转换为C6x汇编代码,BIT/TI,第八讲 汇编语言优化,37,第一步
7、:用C语言实现算法并验证,BIT/TI,第八讲 汇编语言优化,38,第二步:写C62xx线性汇编代码,线性汇编不需要指出和考虑: 功能单元 寄存器 延迟间隙 并行指令,BIT/TI,第八讲 汇编语言优化,39,简单估计,BIT/TI,第八讲 汇编语言优化,40,第三步:画相关图,相关图中的名词术语,BIT/TI,第八讲 汇编语言优化,41,画相关图步骤:,、画节点(包括:指令、结果、通路) 、在通路旁标出父指令执行周期 、安排功能单元 安排必须的功能单元 节点分配到A、B两侧 对所有节点分配功能单元,平分.D、.S、.M 最小化交叉通路 平衡功能单元 仲裁,BIT/TI,第八讲 汇编语言优化,
8、42,画点积相关图 1. 画节点(1),BIT/TI,第八讲 汇编语言优化,43,画点积相关图 1. 画节点(2),循环传递通路,BIT/TI,第八讲 汇编语言优化,44,画点积相关图 1. 画节点(3),BIT/TI,第八讲 汇编语言优化,45,画点积相关图 2. 标出父指令执行周期,BIT/TI,第八讲 汇编语言优化,46,画点积相关图 3. 安排功能单元(1),BIT/TI,第八讲 汇编语言优化,47,画点积相关图 3. 安排功能单元(2),BIT/TI,第八讲 汇编语言优化,48,画点积相关图 3. 安排功能单元(3),BIT/TI,第八讲 汇编语言优化,49,第四步:分配功能单元,根
9、据功能单元和交叉通路的使用,可在单周期循环内编排这些指令。,BIT/TI,第八讲 汇编语言优化,50,第四步:分配寄存器,BIT/TI,第八讲 汇编语言优化,51,第五步:建编排表(1),BIT/TI,第八讲 汇编语言优化,52,循环填充长度,抽出最长数据通路 计算长度: 5+2+1=8周期 编排表列出0-7周期 填充:第0-6周期 循环:第7周期,编排 周期 0 5 7,BIT/TI,第八讲 汇编语言优化,53,填写指令建议,从最长数据通路开始 尽可能早开始(第0周期) 一旦确定指令执行的周期,在这以后的周期内,连续发生各次迭代 倒推跳转和循环计数指令的发生周期,BIT/TI,第八讲 汇编语言优化,54,第五步:建编排表(2),BIT/TI,第八讲 汇编语言优化,55,第六步:写C62xx汇编代码,执行40次,BIT/TI,第八讲 汇编语言优化,56,九、各种优化总结,BIT/TI,第八讲 汇编语言优化,57,小结,学习了五种优化方: 使用并行指令 填充延迟间隙 展开循环 字长优化 软件流水 手工实现软件流水过程,使用并行指令 填充延迟间隙,
链接地址:https://www.31doc.com/p-2565651.html