: 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个周期吗?
谢谢!
答案 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。