c的优化

step1 对c++ 代码的优化

  1. 从算法逻辑上优化,整体调用逻辑,何时准备什么类型的数据。还有算法层面:比如滑动窗口和等。

  2. 对数据精度进行优化,例如double能变成float 的,float能拉伸成整数的。必要时标明数据的实际范围(0~10bit)这种。

  3. 对除法能被乘法代替的,乘法能用加法替代的,乘法能用位移替代的运算进行优化。

  4. 对kn ,(k+1)n这类的运算也可以优化。

  5. 减少if else分支语句内的内容,能合并的合并

step2 c写汇编

  1. 首先原则是 利用函数指针,当运行c的时候就指向c,当运行汇编时就指向汇编

  2. 汇编加速的原理是利用单指令多数据的方式进行加速

  3. 确定输入输出的尺寸,是固定还是任意,是否是偶数,8对齐 16对齐等

  4. 先把c转化成利用flag标识if else的语句。

  5. 确定每一个变量在其生命周期中,数据范围,可并行范围,能并行运算并行,不能时再拆开

  6. 根据运算的并行度,将常数都定义好 是u8 u16 还是u32 还是有符号的s。

  7. 如果大部分操作都可以在int16x8上操作 那就一次读8个 如果大部分操作都能在uint8上操作 那就一次读16个 ,以此类推。

step3 汇编注意事项

  1. 有些运算涉及负数,需要用有符号运算s

  2. 有些数据必须用uint 才能装下

  3. 作为if 条件标识的flag 再需要扩占位数时,需要用s有符号,才能补全高位

ARM Neon Intrinsics 指令相关文档:

https://blog.csdn.net/u012385733/article/details/121086734

https://developer.arm.com/architectures/instruction-sets/intrinsics/https://developer.arm.com/architectures/instruction-sets/intrinsics/