【问题标题】:Which[neon/vfp/vfp3] should I specify for the mfpu when evaluate and compare float performance in ARM processor?在评估和比较 ARM 处理器中的浮点性能时,我应该为 mfpu 指定哪个 [neon/vfp/vfp3]?
【发布时间】:2013-09-18 02:16:36
【问题描述】:

我想评估一些不同的 ARM 处理器浮点性能。我使用lmbenchpi_css5,我在浮动测试中混淆了。

来自cat /proc/cpuinfo(下),我猜有 3 种类型的浮动功能:neon、vfp、vfpv3?从这个question&answer 看来,它似乎取决于编译器。 我仍然不知道应该在编译标志(-mfpu=neon/vfp/vfpv3)中指定哪个,或者我应该用每个标志编译程序,或者只是不指定-mfpu

cat /proc/cpuinfo               
Processor       : ARMv7 Processor rev 4 (v7l)
BogoMIPS    : 532.00
Features    : swp half thumb fastmult vfp edsp neon vfpv3 tls 
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x2
CPU part    : 0xc09
CPU revision    : 4

【问题讨论】:

  • 因为它适用于性能,softhard 会产生很大的影响;这通常包含在编译器和 libc 中,不能通过 -mfpu 选项更改。见Debian hard float wiki。这与特定的操作码无关,但与例程之间的接口使用方式有关。这也会影响性能。

标签: performance arm


【解决方案1】:

我已经尝试了其中的每一个,似乎使用-mfpu=neon 并指定-march=armv7-a-mfloat-abi=softfp 是正确的配置。

此外,引用 (ARM Cortex-A8 vs. Intel Atom) 对 ARM BenchMark 非常有用。 另一篇有用的文章是关于 ARM Cortex-A Processors and gcc command lines,它清除了 SIMD 协处理器配置。

【讨论】:

  • -mfloat-abi=softfp 是编译器的函数,而不是 CPU。
【解决方案2】:

它可能比您预期的要复杂一些。 GCC arm options page 不解释 fpu 版本,但 ARM's manual for their compiler 解释。你还应该注意到Linux doesn't provide whole story about fpu features,只告诉vfpvfpv3vfpv3d16vfpv4

回到您的问题,您应该选择其中最大的公因数,并针对它编译您的代码并比较结果。另一方面,如果一个 cpu 有 vfpv4 而另一个有 vfpv3,你认为哪个更好?

如果您的问题很简单,只需在 neonvfpvfpv3 之间进行选择。选择neon(source)

-mfpu=neon selects VFPv3 with NEON coprocessor extensions.

来自 gcc 手册,

如果选定的浮点硬件包含 NEON 扩展 (例如-mfpu=neon),请注意浮点运算将 不被 GCC 的自动矢量化传递使用,除非 还指定了“-funsafe-math-optimizations”。这是因为 NEON 硬件没有完全实现 IEEE 754 标准 浮点算术(特别是非正规值是 视为零),因此使用 NEON 指令可能会导致 精度损失。

例如,请参阅Subnormal IEEE-754 floating point numbers support on ios... 了解有关此主题的更多信息。

【讨论】:

    猜你喜欢
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    相关资源
    最近更新 更多