0

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

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

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

而且我还发现了其他标志:-mno-thumb -mfpu=maverick -ftree-vectorize -DNS_BLOCK_ASSERTIONS=1

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

谢谢

4

2 回答 2

1

问题是编译器不太擅长生成矢量化代码。因此,仅通过启用 NEON,您不会获得太多改进(也许 10% ??)

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

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

于 2011-12-20T15:36:39.053 回答
1

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

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

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

于 2011-12-21T10:38:58.847 回答