2018.7.29 周末
https://community.arm.com/android-community/b/android/posts/arm-neon-optimization
翻译总结如下:
去除数据依赖
不要将当前指令的目的寄存器作为下一条指令的源寄存器!
原因:arm架构采用的是多级流水线技术,如果下一条指令的源寄存器是当前指令的目的寄存器,就需要当前指令执行完之后,下一条指令才能取指执行,这样会产生很大的延迟,影响性能。减少分支跳转
ARM处理器中广泛使用分支预测技术。但是一旦分支预测失败,性能就会损失很大。所以,
尽量不要用分支跳转!可以采用逻辑运算指令替代分支跳转!
比如:
VCEQ, VCGE, VCGT, VCLE, VCLT……
VBIT, VBIF, VBSL……
另外,可以使用条件执行指令,比如addgt,suble等减少分支跳转!
建议一次性多处理几行数据,从而减少循环跳转的次数,提升性能。建议使用预载指令PLD
PLD允许处理器告知内存系统在不久的将来会从指定地址读取数据,若数据提取加载到cache中,将会提高cache hit,从而提升性能。
风险:不过最新架构对PLD指令