C++与汇编ASM代码优化方法

循环优化:

1、提取重复操作
2、减少函数调用
3、避免内存读写,用局部变量保存计算的中间值,循环结束后再付给全局变量 ”dest”
4、循环展开,减少数据依赖
 注意⚠️:虽然循环展开了,但是两次运算间仍然存在直接的数据依赖,导致流水线的并行能力仍然没有发挥出来;这种情况可能导致程序并无太大的优化效果
5、提高并行性,消除数据依赖
  例如🔥:为了让下次运算不再需要上次运算的结果,我们可以将整个运算分为两个并行分支,用两个局部变量分别累加奇数项和偶数项,最后再合并到一起
6、重结合变换
  例如🔥:依据加法和乘法的结合律,在循环展开的基础上,重新结合三个数的运算顺序,就可以实现性能提高。

注意⚠️:上述优化方法编译器内部已经实现,但是不一定会进行优化,故而需要程序猿最好手动实现,另外多路并行并不是越多越好,因为寄存器数量有限;

实战经验:

1、减少指令操作,比如不必要的mov,ld,st操作等
2、读写分离,比如在C++里面嵌入汇编时,asm操作数中有可读可写,即“+”的操作数,注意能读写分离就读写分离,可以减少不必要的mov,因为编译器无法除去冗余

优化过程:

1、若是产量方向的优化,那么第一看资源是否使用完,未使用完第一步提高并发量,尽量先将资源利用完;
2、在资源使用完的条件下考虑逻辑层的优化,这个是最难的;
3、最后考虑代码层面的优化,当然,这一步的优化可以和第二步的优化顺序做调整,不计较先后;
4、总体来说,一般第一步和第二步优化,如果能够优化,一般性能提升会比较多;
注意⚠️:主要的是找到性能瓶颈,然后对症下药
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值