【问题标题】:iPhone ARMv6 VFP asm latency, throughput and hazardsiPhone ARMv6 VFP asm 延迟、吞吐量和危害
【发布时间】:2010-01-19 22:32:32
【问题描述】:

在本文档中: 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 个周期内启动吗?

谢谢!

【问题讨论】:

    标签: iphone assembly arm latency visual-foxpro


    【解决方案1】:

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

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

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

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

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

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

    在第一个FMULS 的结果可用之前,执行将停止。更多细节请参见 21.6 “记分牌的操作”。

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

    它会停止。相同的参考。

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

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

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

    【讨论】:

    • 非常感谢您提供的信息!由于我为 iPhone 编写代码并希望在 iPhone 3G 上快速运行一些代码,因此我需要使用 VFP,因为 3G 没有 NEON。是的,我读过这个例子,但我真的不明白为什么在这种情况下可能?第 804 页建议避免使用 DIV 和 SQRT,因为它会停止 DS 和 FMACS 流水线。究竟是什么意思'如果短向量 DS 操作可以被分离......'(在那个页面上)
    猜你喜欢
    • 2022-12-25
    • 2015-04-16
    • 2018-12-14
    • 2021-04-16
    • 2019-08-27
    • 2017-11-19
    • 2017-03-05
    • 2017-10-29
    • 2016-11-16
    相关资源
    最近更新 更多