本人使用的汇编代码乱序优化工具是:http://pulsar.webshaker.net/ccc/index.php?lng=us
乱序优化之前的代码:
vld1.8 d2, [r1],r3
vld1.8 d3, [r6],r3
vld1.8 d4, [r1],r3
vld1.8 d5, [r6],r3
vld1.8 d6, [r1],r3
vld1.8 d7, [r6],r3
vmovl.u8 q4, d2
vmovl.u8 q5, d3
vmovl.u8 q6, d4
vmovl.u8 q7, d5
vmovl.u8 q8, d6
vmovl.u8 q9, d7
运行分析结果:
vld1.8 d2, [r1],r3
vld1.8 d3, [r6],r3
vmovl.u8 q4, d2
vld1.8 d4, [r1],r3
vmovl.u8 q5, d3
vld1.8 d5, [r6],r3
vmovl.u8 q6, d4
vld1.8 d6, [r1],r3
vmovl.u8 q7, d5
vld1.8 d7, [r6],r3
vmovl.u8 q8, d6
vmovl.u8 q9, d7
从上面的分析结果可以发现使用乱序优化可以将指令pipeline。这样可以减少指令因为前后之间的等待时延,更加有效地利用处理器的cycle。
在实际使用过程中,发现编译器也可以实现汇编语言的乱序优化。经过本人的编程实践,通常编译器使用-O2优化等级的时候跟自己手动乱序优化后的 -O的效果差不多。不过乱序的思想还是值得学习和理解的~