完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1. 去除数据依赖
不要将当前指令的目的寄存器作为下一条指令的源寄存器! 原因:ARM架构采用的是多级流水线技术,如果下一条指令的源寄存器是当前指令的目的寄存器,就需要当前指令执行完之后,下一条指令才能取指执行,这样会产生很大的延迟,影响性能。 2. 减少分支跳转 ARM处理器中广泛使用分支预测技术。但是一旦分支预测失败,性能就会损失很大。所以, 尽量不要用分支跳转!可以采用逻辑运算指令替代分支跳转! 比如: VCEQ, VCGE, VCGT, VCLE, VCLT…… VBIT, VBIF, VBSL…… 另外,可以使用条件执行指令,比如addgt,suble等减少分支跳转! 建议一次性多处理几行数据,从而减少循环跳转的次数,提升性能。 3. 建议使用预载指令 PLD允许处理器告知内存系统在不久的将来会从指定地址读取数据,若数据提取加载到cache中,将会提高cache hit,从而提升性能。 风险:不过最新架构对PLD指令的支持并不好,在不确定的情况下使用,可能会损失性能! PLD syntax: PLD{cond} [Rn {, #offset}] PLD{cond} [Rn, +/-Rm {, shift}] PLD{cond} label Where: Cond - is an optional condition code. Rn - is the register on which the memory address is based. Offset - is an immediate offset. If offset is omitted, the address is the value in Rn. Rm - contains an offset value and must not be PC (or SP, in Thumb state). Shift - is an optional shift. Label - is a PC-relative expression. 4. 关注指令周期延迟 0 VMLA指令可以替代VMUL+VADD,但是由于VMLA的指令延迟比较大,在后面没有并行指令时,可能性能并不如VMUL+VADD。 5. NEON assembly and NEON intrinsic PeRFormance Contrast NEON assembly: 6 }8 N7 f2 v8 n: Always shows the best performance for the specified platform for an experienced developer. NEON intrinsic: Depends heavily on the toolchain that is used. 原作者:haidaowang |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
654 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2242 浏览 1 评论
771 浏览 0 评论
1530 浏览 1 评论
2276 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 09:34 , Processed in 0.777809 second(s), Total 69, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号