4

在本文档中: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 个元素的向量模式,并且在第二条 FMULS 指令中,所有输入寄存器都可用,但只有一个可用。会发生什么?

4:sqrt 和除法:sqrt 或除法操作是否会阻止任何后续操作在 19 个周期内启动?

谢谢!

4

1 回答 1

2

您的问题都在您链接的文档中得到解答。你应该仔细阅读它。

这些数字是否与向量大小无关?

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

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

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

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

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

如果我们处于具有 4 个元素的向量模式,并且在第二条 FMULS 指令中,所有输入寄存器都可用,但只有一个可用。会发生什么?

它会停滞不前。同参考。

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

否。请参阅第 21.10 节“并行执行”。表 21-15 中给出了一个示例,其中一个非依赖项FADDS紧随FDIVS.

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

于 2010-01-20T15:25:47.383 回答