请问在用arm neon指令优化程序时,在一个for循环下,分别用int32x2_t和int32x4_t类型的指令,后者的速度并没有按照理论上的速度更快,反而比前者慢是怎么回事呢?必须要对生成的汇编指令进行优化吗?谢谢指教。
Int32x2 比int32x4更快,是有可能发生的,在armv7平台的话有可能是寄存器不足引起的,在armv8平台的话,有可能是指令流水排布不好引起的。你需要查看反汇编来确定具体原因,从而修改intrisics指令用法。
谢谢您的回答。我现在用的平台是armv7,int32x4_t 对应的程序中用了5个register,5个in32x4_t,应该够用吧? 程序中有两个vld1q_s32指令,这种数据加载指令会不会耗时很多?
5个寄存器一般不会有问题。数据加载是比较耗时的,但是具体慢的原因需要考虑全部指令使用情况。
"指令流水排布" 有哪些需要注意点? 一次计算16byte,地址16byte对齐是否影响多少?
>"指令流水排布" 有哪些需要注意点?
主要需要注意不要引起CPU的Hazard (关于Hazard可以参考: en.wikipedia.org/.../Hazard_(computer_architecture) )。
>一次计算16byte,地址16byte对齐是否影响多少?
对齐访问对一些指令的运行速度是有影响的。具体可以参考ARM Reference Manual中该指令的详细说明。