1

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

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

谢谢,亚当

4

3 回答 3

1

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

另请参阅ARM GCC 文档-funsafe-math-optimizations以了解可能需要的情况。

于 2013-07-12T06:29:09.143 回答
1

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

除此之外,您的算法有可能很少使用浮点数,以至于加载和卸载 FPU 寄存器会掩盖任何使用。在这种情况下,代码的其他部分中的 O3 优化将显示您获得了与 FPU 使用分离的收益。

于 2013-07-11T23:15:35.577 回答
0

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

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

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

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

于 2013-07-12T11:36:30.373 回答