我想评估一些不同的ARM处理器浮点性能。我使用lmbench
和pi_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
答案 0 :(得分:7)
它可能比您预期的要复杂一点。 GCC arm options page不解释fpu版本,但ARM's manual for their compiler会这样做。您还应该注意Linux doesn't provide whole story about fpu features,仅说明vfp
,vfpv3
,vfpv3d16
或vfpv4
。
回到你的问题,你应该选择其中最大的共同因素,编译你的代码并比较结果。另一方面,如果一个cpu有vfpv4而另一个有vfpv3,你会认为哪个更好?
如果您的问题非常简单,只需在neon
,vfp
或vfpv3
之间进行选择。选择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协处理器配置。