Arm的大牛,
咨询个问题。
我们写了个小程序验证A53上浮点运算的并行度,主体循环是几条寄存器都不存在依赖关系的fmla指令,测试下来发现dual issue(双发射)并不像我们理解的那样,我们原本想在fmla之间插入一些寄存器无相关性的其它neon指令,以达到双发射的效果。
比如:
fmla v0.4s, v0.4s, v20.s[0] ldr q30,[x1] fmla v1.4s, v1.4s, v20.s[1]
发现插入ldr指令之后,运行时间变长,除非是load到通用寄存器Xn,才不会影响运行时间。
之后测试插入fadd v22.4s,v22.4s,v23.4s或者str q30,[x1]都是如此。
我们从 Cortex_A57_Software_Optimization_Guide_external.pdf 文档中得到一些信息
ldr使用的L issue
str使用的S issue
fmla使用的F0/F1 issue
按我们对文档的理解,应该可以并发的,可实际测试结果并没有,请帮忙看看我们哪里理解有错误,谢谢。
顺便提下,我们参考的文档是Cortex_A57_Software_Optimization_Guide_external.pdf ,有对应的A53文档吗,我们用的是A53,参考A57的该文档合适吗?