繁体   English   中英

使用矢量化为 iPhone 编译 Eigen 库

[英]Compiling Eigen library for iPhone with vectorisation

我正在努力为 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 (并向 gcc 提供 -mfloat-abi=softfp -mfpu=neon)时,我收到以下 gcc 编译器错误:

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

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

谢谢,凯

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM