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

Ton*_*yHo 4 performance arm

我想评估一些不同的ARM处理器浮点性能.我用的是lmbenchpi_css5我迷惑的浮动测试.

cat /proc/cpuinfo(下面),我猜有3种类型的浮动功能:neon,vfp,vfpv3?从这个问题和答案看来,这似乎取决于编译器.我仍然不知道我应该在compille flag(-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
Run Code Online (Sandbox Code Playgroud)

aus*_*len 7

它可能比你预期的要复杂一点.GCC arm选项页面没有解释fpu版本,但是他们的编译器的ARM手册确实如此.你也应该注意到,Linux不提供整个故事FPU功能,只讲述vfp,vfpv3,vfpv3d16,或vfpv4.

回到你的问题,你应该选择其中最大的共同因素,编译你的代码并比较结果.另一方面,如果一个CPU有vfpv4而另一个有vfpv3哪一个你觉得哪个更好?

如果你的问题就像选择之间一样简单neon,vfp或者vfpv3.选择neon (来源).

-mfpu=neon selects VFPv3 with NEON coprocessor extensions.
Run Code Online (Sandbox Code Playgroud)

gcc手册,

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

例如,请参阅ios上的Subnormal IEEE-754浮点数支持...有关此主题的更多信息.