用矢量化编译iPhone的Eigen库

时间:2011-06-05 17:45:15

标签: iphone performance compiler-construction eigen armv7

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

无论我使用哪个编译器LLVM-GCC 4.2或LLVM CLang 2.0,我总是遇到编译错误。我想出(或者更好的想法),LLVM-GCC 4.2是获取这些ARM-NEON特定指令的唯一途径。

当我没有设置EIGEN_DONT_VECTORIZE(并将-mfloat-abi = softfp -mfpu = neon提供给gcc)时,我得到以下gcc编译器错误:

src / m3CoreLib / Eigen / src / Core / arch / NEON / PacketMath.h:89:错误:在' __扩展__'

之前预期的不合格ID

我已经阅读了使用" old" gcc 4.2以及建议使用更新版本的gcc。我不确定,但我认为这不是一个选项,因为应用商店批准。我还能做些什么来为iPhone编译它。谁解决了这个问题呢?

谢谢,凯

1 个答案:

答案 0 :(得分:1)

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

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

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