iPhone ARMv6 VFP asm延迟,吞吐量和危险

在本文件中:

http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301g/DDI0301G_arm1176jzfs_r0p7_trm.pdf

请参阅第21-25页(pdf第875页),了解VFP单元的汇编指令的吞吐量和延迟时间.

这些数字是否独立于矢量化?

1:
让我们采用FMULS,其吞吐量为1,延迟为8.这是否意味着如果我不使用当前未由前一个函数计算的寄存器,我可以在每个周期开始一个新的FMULS操作?
例如:

FMULS s8, s16, s20
FMULS s12, s21, s25

那些人会一个接一个地追赶吗?

2:
如果我有两个FMULS函数,其中一个参数依赖于先前的计算,会发生什么

FMULS s8, s16, s20
FMULS s12, s21, s8

在开始处理第二条指令之前,VFP会等待8个周期吗?

3:
如果我们在带有4个元素的vectormode和第二个FMULS指令中的所有输入寄存器但是有一个可用的话会怎样.会发生什么?

4:sqrt和师:
sqrt或division操作会阻止任何后续操作启动19个周期吗?

谢谢!

最佳答案 您的问题都在您链接的文档中得到了解答.你应该仔细阅读.

Are those numbers independent of vectorsize?

不可以.例如,请参阅您链接的文档中的表21-15.注意短矢量FADDS的延迟.

does it mean that I can start a new FMULS operation every cycle if it doesn’t depend on an earlier result that isn’t available yet?

是的,这是吞吐量的定义.

what happens if I have two FMULS functions after each other where one argument depends upon the previous computation

执行将停止,直到第一个FMULS的结果可用.有关更多详细信息,请参见21.6“记分板的操作”.

what if we are in vectormode with 4 elements and on the second FMULS instruction all inputregisters but one are available. what will happen?

它会停滞不前.相同的参考.

sqrt and division: will a sqrt or division operation prevent any subsequent operation from being started for 19 cycles?

不可以参见第21.10节“并行执行”.表21-15给出了一个例子,其中非依赖FADDS在FDIVS之后立即执行.

请注意,编写短矢量VFP代码(对于许多类型的计算,其执行速度比标量代码快得多)可能有点挑战(尽管不是不可能).即使你学会了如何做,它也会有一个值得怀疑的价值,因为NEON单元似乎是ARM上矢量计算的新模型.从长远来看,通过忽略短矢量操作并专注于未来学习NEON,您可能会得到更好的服务.

点赞