step1 对c++ 代码的优化
从算法逻辑上优化,整体调用逻辑,何时准备什么类型的数据。还有算法层面:比如滑动窗口和等。
对数据精度进行优化,例如double能变成float 的,float能拉伸成整数的。必要时标明数据的实际范围(0~10bit)这种。
对除法能被乘法代替的,乘法能用加法替代的,乘法能用位移替代的运算进行优化。
对kn ,(k+1)n这类的运算也可以优化。
减少if else分支语句内的内容,能合并的合并
step2 c写汇编
首先原则是 利用函数指针,当运行c的时候就指向c,当运行汇编时就指向汇编
汇编加速的原理是利用单指令多数据的方式进行加速
确定输入输出的尺寸,是固定还是任意,是否是偶数,8对齐 16对齐等
先把c转化成利用flag标识if else的语句。
确定每一个变量在其生命周期中,数据范围,可并行范围,能并行运算并行,不能时再拆开
根据运算的并行度,将常数都定义好 是u8 u16 还是u32 还是有符号的s。
如果大部分操作都可以在int16x8上操作 那就一次读8个 如果大部分操作都能在uint8上操作 那就一次读16个 ,以此类推。
step3 汇编注意事项
有些运算涉及负数,需要用有符号运算s
有些数据必须用uint 才能装下
作为if 条件标识的flag 再需要扩占位数时,需要用s有符号,才能补全高位