2013-07-11 97 views
1

我正在使用包含i.MX6 ARM处理器的Wandboard-Quad。这个处理器有一个我想要使用的FPU。在我做之前,我想测试我会得到多少改善。我有一个基准算法,并尝试过没有优化,并与-mfpu = vfp,似乎没有改善 - 我得到改进优化= 3.在ARM处理器上测试FPU

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

谢谢, 亚当

+0

可能是默认情况下采用vfp支持。检查工具链构建选项'gcc -v'。关于优化写的东西也是如此,但可能只是您的基准很差。 – auselen

回答

1

看具有-S标志汇编输出和查看是否有被生成的任何FPU的指令。这可能是最简单的事情。

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

1

-mfpu选项仅在GCC执行矢量化时有效。向量化本身需要合理的优化级别(最低为-O2-ftree-vectorize选项开启)。因此,请尝试-O3 -ftree-vectorize -mfpu=vfp以利用FPU并根据简单的-O3级别测量差异。

另请参阅ARM GCC docs适用于可能需要-funsafe-math-optimizations的情况。

0

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

要查看FPU添加的好处,您需要使用一致的优化级别进行测试,然后使用-msoft-float-mhard-float

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

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