1

私はiphone用のライブラリを構築しています(speexですが、他の多くのライブラリにも適用されると確信しています)。makeスクリプトには、浮動小数点の代わりに固定小数点を使用するオプションがあります。

iphone ARMプロセッサにはVFP拡張機能があり、浮動小数点計算を非常にうまく実行するので、固定小数点オプションを使用する方が良い選択だと思いますか?

誰かがすでにこれをベンチマークしていて、共有したいのなら、私は本当に彼に感謝します。

4

2 に答える 2

2

まあ、それはあなたのアプリケーションのセットアップに依存します。ここにいくつかのガイドラインがあります

  1. 最初に最適化を 0 に設定してみてください (Fastest Smallest)
  2. IEEE コンプライアンスの緩和をオンにする
  3. アプリケーションが連続したメモリ位置の浮動小数点数を個別に簡単に処理できる場合は、ARM NEON 組み込み命令とアセンブリ命令を調べる必要があります。これらは、1 つの命令で最大 4 つの浮動小数点数を処理できます。
  4. すでに浮動小数点演算を頻繁に使用している場合は、ロジックの一部を固定小数点に切り替えてみてください (ただし、NEON レジスタから整数レジスタに移動するとパイプラインが完全に停止することに注意してください)。
  5. すでに整数演算を頻繁に使用している場合は、ロジックの一部を浮動小数点演算に変更してみてください。
  6. 最適化の前にプロファイリングすることを忘れないでください
  7. そして何よりも、より優れたアルゴリズムは常に、上記のようなマイクロ最適化を打ち負かします。
于 2011-10-25T09:01:01.610 に答える
0

シーケンシャル データの大きなブロックを扱う場合は、NEON が最適です。

フロートか固定か、それは良い質問です。NEON は固定を処理する方がいくぶん高速ですが、変換には時間がかかり、最終的に余分なメモリがかかるため、ネイティブの入力形式を維持します。

lib がオプションとして異なる出力形式を提供している場合でも、ほとんどの場合、lib 内部の変換を意味します。したがって、この場合はfloatがネイティブだと思います。それに固執。

より優れたアルゴリズムをマイクロ最適化することを誰も妨げません。そして通常、アルゴリズムが優れているほど、最新のマシンのパイプライン処理によるマイクロ最適化によって、より多くのパフォーマンスを向上させることができます。

ただし、組み込み関数には近づきません。特に即時値を扱う場合に、組み込み関数が何かおかしなことをすることに不満を言う投稿がネット上に非常に多くあります。それは非常に面倒なことになる可能性があり、組み込み関数を使用して最適化することもほとんどできません。

于 2011-11-07T19:16:24.833 に答える