2011-10-25 23 views
1

私はiPhone用のライブラリを構築していますが(speex、他の多くのライブラリにも当てはまると確信しています)、makeスクリプトには浮動小数点の代わりに固定小数点を使用するオプションがあります。iPhone用コンパイルの最適化:浮動小数点または固定小数点?

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

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

答えて

2

まあ、それはあなたのアプリケーションの設定に依存し、ここではいくつかのガイドライン

  1. である。まず
  2. (最速最小)0に最適化をオンにしてみてくださいリラックスIEEE準拠
  3. の電源をオンにし、あなたのアプリケーションの場合連続したメモリ位置の浮動小数点数を独立して簡単に処理できるため、ARM NEONの組み込み命令やアセンブリ命令を見ると、単一の命令で最大4つの浮動小数点数を処理できます。
  4. すでに浮動小数点演算を使用している場合は、ロジックの一部を固定小数点に切り替えるようにしてください(ただし、NEONレジスタから整数レジスタに移動するとパイプラインが完全に停止します)
  5. すでに整数計算を頻繁に使用している場合は、ロジックの一部を浮動小数点数に変更してみてください。
  6. 最適化前にプロファイルすることを忘れないでください。
  7. さらに、より良いアルゴリズムは常に上記のようなマイクロ最適化に勝るでしょう。
0

大量のシーケンシャルデータを扱う場合は、確かにNEONが必要です。

浮動小数点または固定で、それは良い質問です。 NEONは固定を扱う方がやや速いですが、変換には時間がかかり、最終的に余分なメモリが必要になるため、ネイティブの入力形式をそのまま使用します。

libがオプションとして異なる出力フォーマットを提供するとしても、ほとんどの場合、lib内部変換を意味します。だから私は浮動小数点は、この場合のネイティブなものだと思います。それに固執。

いいえ、より良いアルゴリズムをマイクロ最適化できません。通常は、アルゴリズムが優れているほど、現代のマシンでのパイプライン化によるマイクロ最適化により、より多くのパフォーマンスを達成することができます。

私は組み込み関数から離れていますが、 intrinsicが狂ったことをしていると不平を言っているネット上の記事がたくさんあります。特に即値を扱う場合は特にそうです。 これは非常に面倒なことがありますが、イントリンシックを使って何かを最適化することはほとんどできません。

関連する問題