在arm处理器上测试FPU

时间:2013-07-11 23:07:50

标签: gcc floating-point arm fpu

我正在使用包含i.MX6 ARM处理器的Wandboard-Quad。这个处理器有一个我想要使用的FPU。在此之前,我想测试一下我会得到多少改进。我有一个基准算法并且没有进行优化尝试过,并且使用-mfpu = vfp并且似乎没有任何改进 - 我确实通过优化= 3获得了改进。

我正在使用arm-linux-gnueabi库 - 有什么不正确的想法以及如何判断我是否使用FPU?

谢谢, 亚当

3 个答案:

答案 0 :(得分:1)

使用-S标志查看汇编器输出,并查看是否有任何生成的fpu指令。这可能是最简单的事情。

除此之外,您的算法有可能使用浮点,因此很少会通过加载和卸载FPU寄存器来屏蔽任何使用。在这种情况下,代码其他部分的O3优化将显示FPU使用的单独收益。

答案 1 :(得分:1)

-mfpu选项仅在GCC执行矢量化时有效。矢量化本身需要合理的优化级别(最小值为-O2-ftree-vectorize选项)。因此,请尝试使用-O3 -ftree-vectorize -mfpu=vfp来利用FPU,并针对简单的-O3级别衡量差异。

有关可能需要-funsafe-math-optimizations的情况,请参阅ARM GCC docs

答案 2 :(得分:0)

没有任何优化,GCC的输出效率太低,以至于您实际上无法测量软件和硬件浮点之间的差异。

要了解FPU添加的优势,您需要使用一致的优化级别进行测试,然后使用-msoft-float-mhard-float

这将强制编译器链接不同的库并对浮点操作进行函数调用,而不是使用本机指令。底层库仍然可能使用硬件浮点,但我不会太担心。

您可以使用-mfpu=选择不同的FP指令集。对于i.MX6,我认为你需要-mfpu=neon,因为它应该启用所有适用的浮点指令(而不仅仅是NEON指令)。