使用 opencv 框架的目标 C 项目的最佳编译器标志

Posted

技术标签:

【中文标题】使用 opencv 框架的目标 C 项目的最佳编译器标志【英文标题】:Best compiler flags for an objective C project with the opencv framekwork 【发布时间】:2011-12-20 14:35:10 【问题描述】:

我正在使用 opencv 框架编译和 ios 项目,所以我很想知道我的项目最好的编译器标志是什么。

该项目处理大量矩阵像素,因此我需要从编译器方面获得 SIMD 指令,以便能够尽可能高效地处理此矩阵。

我使用以下标志:-mfpu=neon、-mfloat-abi=softfp 和 -O3,

我还发现了其他标志: -mno拇指 -mfpu=特立独行 -ftree-矢量化 -DNS_BLOCK_ASSERTIONS=1

我真的不知道它是否会为我节省大量的 cpu 处理,我通过谷歌搜索,但我没有找到让我有充分理由了解最佳编译器标志的东西。

谢谢

【问题讨论】:

【参考方案1】:

我也使用与霓虹灯相同的标志。根据优化级别 O3 或任何东西,不会对霓虹内在代码进行优化。它只是优化了 ARM 代码。

正如 Vasile 所说,通过在汇编中编写霓虹灯代码可以获得最佳性能。 最简单的方法是编写一个使用内部霓虹灯代码的程序,并使用您提到的标志对其进行编译。现在使用为代码生成的汇编代码进行进一步优化。

可以通过并行化或利用 neon 的双指令功能进行很多优化。

【讨论】:

【参考方案2】:

问题在于编译器不太擅长生成矢量化代码。因此,仅启用 NEON 并不会获得太多改进(可能是 10% ??)

您可以做的是分析您的应用程序并使用 NEON 手写那些占用您时间的部分。如果你这样做了,为什么不将它们修补到公共 OpenCV 源代码中?

到目前为止,OpenCV 几乎没有为 NEON 优化过的代码(对于 x86 SSE2,优化得更好)。

【讨论】:

以上是关于使用 opencv 框架的目标 C 项目的最佳编译器标志的主要内容,如果未能解决你的问题,请参考以下文章

无法在 VS 2015 C++ 项目中更改 .NET 目标框架版本

如何使用 Bazel 构建项目使用 OpenCV [关闭]

多目标追踪器:用OpenCV实现多目标追踪(C++/Python)

opencv学习_C++编译

opencv绑定ios

Play框架目标目录中的类编译了啥?