在评估和比较ARM处理器中的浮点性能时,我应该为mfpu指定哪个[neon / vfp / vfp3]?

时间:2013-09-13 11:45:35

标签: performance arm

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

cat /proc/cpuinfo(下方),我猜有3种类型的浮动功能:neon,vfp,vfpv3?从这个question&answer开始,它似乎取决于编译器。 我仍然不知道我应该在compille标志(-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

2 个答案:

答案 0 :(得分:7)

它可能比您预期的要复杂一点。 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指令可能会导致a        失去精确度。

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

答案 1 :(得分:0)

我已经尝试了其中的每一个,似乎使用-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协处理器配置。