使用 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 目标框架版本