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

时间:2010-01-19 22:32:33

标签: iphone assembly arm latency visual-foxpro

本文档中的

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

(第21-25页)(pdf第875页)为VFP单元的装配说明提供了吞吐量和延迟时间。

这些数字是否独立于vectorsize?

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 and division: sqrt或division操作会阻止任何后续操作开始19个周期吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

您的问题已在您关联的文档中得到解答。你应该仔细阅读。

  

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

没有。例如,请参阅您链接的文档中的表21-15。请注意短向量FADDS的延迟。

  

这是否意味着我可以在每个周期开始一个新的FMULS操作,如果它不依赖于之前没有的结果呢?

是的,这就是吞吐量的定义。

  

如果我有两个FMULS函数,其中一个参数依赖于先前的计算

,会发生什么

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

  

如果我们在带有4个元素的vectormode中,并且在第二个FMULS指令上,所有输入寄存器都有,但是有一个可用。会发生什么?

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

  

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

没有。请参见第21.10节“并行执行”。表21-15给出了一个示例,其中非依赖FADDS紧跟FDIVS后执行。

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