【嵌入式C学习-代码优化tips】

一.条件跳转分支(ifelse,switch)的优化-基于CPU的cache流水线分支预测机制

<原因分析>

cache机制是为了提升CPU处理效率,合理发挥CPU性能的机制。cache的流水线深度越深,提升效率的效果越明显(越深的流水线意味着越多的元件,越大的功耗,用空间换时间)。流水线机制虽然通过预取指令可以提升执行效率,但是在某些情况下如果预取指令不能正常执行,则会造成浪费,称为“流水线冒险”。流水线冒险分为:结构冒险(硬件被其他指令占用),数据冒险(当前指令在等待前面指令的执行结果),控制冒险(前面指令的执行结果决定下一步的行为)。其中分支显然会引起控制冒险,为了防止这种情况的发生,CPU会采用分支预测来预测下一条要执行的指令进行缓存,预测分为静态预测(编译期预测)和动态预测(运行期预测),静态预测对于循环结构十分有效,但是对于分支结构默认不处理依然按顺序取指令,针对静态预测这种特性,编写分支结构的代码时,将大概率执行的代码放在靠前的分支,可提高代码的执行效率。

<注意点>

1.只针对有cache流水线机制的CPU,很多嵌入式CPU不存在cache不适用
2.分支预测技术是CPU性能的一项关键技术,随着技术的发展,动态分支预测的准确率可以达到95%。仅通过改写分支顺序的效果并不一定很显著(因为仅影响了静态预测)。
我挺想你的,敢敢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值