0

私は opencv フレームワークを使用して ios プロジェクトをコンパイルしているので、自分のプロジェクトに最適なコンパイラ フラグを知りたいと思っています。

プロジェクトは多くの行列ピクセルを処理するため、コンパイラの側から SIMD 命令を使用して、この行列をできるだけ効率的に処理できるようにする必要があります。

このフラグを使用します:-mfpu=neon、-mfloat-abi=softfp、および -O3、

そして、この他のフラグも見つけました: -mno-thumb -mfpu=maverick -ftree-vectorize -DNS_BLOCK_ASSERTIONS=1

多くの CPU 処理を節約できるかどうかは本当にわかりません。Google で検索しましたが、最適なコンパイラ フラグを知る正当な理由となるものは見つかりませんでした。

ありがとう

4

2 に答える 2

1

問題は、コンパイラがベクトル化されたコードを生成するのが得意ではないことです。したがって、NEON を有効にするだけでは、あまり改善されません (おそらく 10% ??)。

あなたができることは、アプリのプロファイルを作成し、NEON を使用して時間を消費する部分を手作業で作成することです。そして、それを行うのであれば、公開されている OpenCV ソースにパッチを適用してみませんか?

現在、OpenCV には NEON 用に最適化されたコードがほとんどまたはまったくありません (x86 SSE2 の場合は、はるかに最適化されています)。

于 2011-12-20T15:36:39.053 に答える
1

ネオンに使用するのと同じフラグも使用しています。最適化レベル O3 などに従って、neon 組み込みコードに対して最適化は行われません。ARM コードを最適化するだけです。

Vasile が言ったように、最高のパフォーマンスは、ネオン コードをアセンブリで記述することによって得られます。最も簡単な方法は、固有のネオン コードが使用されるプログラムを作成し、言及したフラグを使用してコンパイルすることです。コード用に生成されたアセンブリ コードを使用して、さらに最適化します。

並列化するか、neon のデュアル命令機能を利用することで、多くの最適化を行うことができます。

于 2011-12-21T10:38:58.847 に答える