完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、 load数据的时候,第一次load会把数据放在cache里面,只要不超过cache的大小,下一次load同样数据的时候,则会比第一次load要快很多,会直接从cache中load数据,这样在汇编程序设计的时候是非常需要考虑的问题。
如:求取一个图像的均值,8*8的窗口,先行求和,然后列求和出来均值,这时候会有两个函数,数据会加载两遍,如果按照这样去优化的话则优化不了多少。如果换成上面这种思路,先做行16行,然后再做列,这样数据都在cache里面,做列的时候load数据会很快。 2、在做neon乘法指令的时候会有大约2个clock的阻塞时间,如果你要立即使用乘法的结果,则就会阻塞在这里,在写neon指令的时候需要特别注意。乘法的结果不能立即使用,可以将一些其他的操作插入到乘法后面而不会有时间的消耗。 如:vmul.u16 q1, d3, d4 vadd.u32 q1, q2, q3 此时直接使用乘法的结果q1则会阻塞,执行vadd需要再等待2个clock的时间 3、使用饱和指令的时候,如乘法饱和的时候,在做乘法后会再去做一次饱和,所以时间要比直接做乘法要慢。 如: vmul.u16 q1, d3, d4 vqmul.u32 q1, q2, q3 后一个的时间要比第一个的时间要久。 4、在对16位数据进行load或者store操作的时候,需要注意的是字节移位。比如是16位数据,则load 8个16位数据,如果指定寄存器进行偏移,此时需要特别注意。 例如:vld1.64 {d0}, [r0], r1 5、去除数据之间的依赖 不要将当前指令的目的寄存器作为下一条指令的源寄存器。一般当前指令的运算结果会在下一条指令中使用,我们可以通过指令穿插避免数据依赖。 6、减少分支跳转 ARM处理器中广泛使用分支预测技术。但是一旦分支预测失败,性能就会损失很大。所以, 尽量不要用分支跳转!可以采用逻辑运算指令替代分支跳转! 比如: VCEQ, VCGE, VCGT, VCLE, VCLT…… VBIT, VBIF, VBSL…… 另外,可以使用条件执行指令,比如addgt,suble等减少分支跳转! 建议一次性多处理几行数据,从而减少循环跳转的次数,提升性能。 |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式-ELFBOARD 硬件知识分享-ELF 2电源电路讲解
563 浏览 0 评论
1515 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程介绍之烧写所需镜像
1357 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程之烧写方法
793 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
1239 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 10:14 , Processed in 0.630522 second(s), Total 71, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号