3

我正在努力为 iPhone 4 编译 Eigen 库,它有一个带有 armv7 指令集的 ARM 处理器。到目前为止,当我指定预处理器定义 EIGEN_DONT_VECTORIZE 时,一切正常。但由于一些性能问题,我想使用 armv7 优化的代码。

无论我使用哪种编译器 LLVM-GCC 4.2 或 LLVM CLang 2.0,我总是遇到编译错误。我发现(或者更好地认为),LLVM-GCC 4.2 是访问这些 ARM-NEON 特定指令的唯一方法。

当我不设置 EIGEN_DONT_VECTORIZE (并向 gcc 提供 -mfloat-abi=softfp -mfpu=neon)时,我收到以下 gcc 编译器错误:

src/m3CoreLib/Eigen/src/Core/arch/NEON/PacketMath.h:89:错误:'__ extension__'之前的预期不合格ID

我已阅读有关使用“旧”gcc 4.2 的问题以及使用较新版本 gcc 的建议。我不确定,但我相信由于应用商店的批准,这不是一个选择。我还能做些什么来为 iPhone 编译它。?有谁解决了这个问题吗?

谢谢,凯

4

1 回答 1

1

在反复摆弄不同的编译器设置后,我发现自己是一个令人满意的解决方案,并得出以下结论。

关于 Eigen 的模板库方法,调试和发布设置之间存在惊人的巨大差异:启用通常优化标志的发布设置使应用程序的运行速度比调试快 20 到 40 倍。我以前从未在任何语言中看到过这样的差异,根据我的经验,它通常是 1.5 - 3。

虽然我仍然不能强制矢量化,即代码仅在定义 EIGEN_DONT_VECTORIZE 的情况下编译,但产生的性能现在符合我的需要。

于 2011-06-07T17:40:50.130 回答