GCCで-fno-strict-aliasingを指定したため、パフォーマンスを示すベンチマークがありますか(または他のコンパイラでは 相当)。-fno-strict-aliasingのパフォーマンスへの影響
答えて
異なるコンパイラがさまざまなレベルの侵略でそれを実装するので、それはコンパイラごとに大きく異なります。 GCCはそれに対してかなり積極的です:厳密なエイリアシングを有効にすると、人間と「明らかに」同等のポインタ(別名:foo* a; bar * b; b = (foo*)a;
)はエイリアスできなくなりますが、非常に積極的な変換が可能ですが、書かれたコード。 AppleのGCCは、この理由からデフォルトで厳密なエイリアスを無効にしています。
LLVMと対照的に、には厳密なエイリアシングがありません。また、計画されている間に、同値性を判断できない場合はフォールバックケースとして実装する予定です。上の例では、aとbを同等と判断します。他の方法で関係を判断できない場合は、タイプベースのエイリアシングしか使用しません。
私の経験では、厳密なエイリアシングのパフォーマンスへの影響は、ループインバリアントコードモーションと関係しています。ループインバリアントコードモーションは、ループ内のロードが反復される配列のエイリアスを起こさないことを証明するためにループから引き出される。 YMMV。
LLVMのアプローチは私にとって正しいもののように聞こえます – Spudd86
PS3で大規模なプロジェクトでこれをテストしたところ、多くのレジスタが実際にSAのメリットを享受できるアーキテクチャなので、PowerPCはあなたが見たい最適化一般的に非常にローカルになり(スコープが賢明)、小さくなる。 20MBの実行可能ファイルでは、おそらく.textセクション(=コード)の80kbを削り取りました。これはすべて小さなスコープの&ループにあります。
このオプションを使用すると、生成されたコードを今より軽量で最適化することができます(1〜5%の範囲で考える)が、大きな結果は期待できません。したがって、-fno-strict-aliasingを使用した場合の影響は、おそらくパフォーマンスに大きな影響を与えないでしょう。つまり、-fno-strict-aliasingが必要なコードを持つことは、せいぜい最適以下の状況です。
コードサイズ==速度ですか?あなたのPS3の例はここにもそこにもありません。どうやって走りましたか? – Eloff
どこが速いのですか?潜在的なロード/ストアが省略されていることを考えると、想像を絶することはできません。いずれの場合でも、メモリにバインドされたマシンでは、実行可能ファイルのサイズが小さい方が適しています。それはここにあり、そこにもあります。 – nielsj
OPはパフォーマンスの影響を尋ねました。コードサイズについてのみ議論しました。次に、大きなパフォーマンスの違いが見られない理由について、実際の議論を使っています。そして、あなたはLinuxカーネルを「最適ではない状況に最適」と呼んでいました。私はあなたがdownvoteを持っている理由を見ることができると思います。 – Eloff
ここでは、2004年に実施された研究へのリンクがあります。http://docs.lib.purdue.edu/cgi/viewcontent.cgi?article=1124&context=ecetrは、とりわけ、コードパフォーマンスに対する厳密なエイリアシングの影響に関するものです。図2.5は、3%〜10%の相対的な改善を示しています。
パフォーマンス低下の研究者説明:
アセンブリコードを検査するから、私たちは、劣化が レジスタ割り当てアルゴリズムの効果であることがわかりました。 GCCは、グラフの色付けレジスタアロケータ[2、3]を実装しています。厳密なエイリアシングを使用すると、変数の有効範囲が長くなり、高いレジスタ圧と '流出'につながります。より控えめなエイリアシングでは、同じ変数には、(短い)ライブ範囲の終わりにメモリ転送が発生します。
[2] Peter Bergner、Peter Dahl、David Engebretsen、Matthew T. O'Keefe。こぼれたコード 干渉領域のスピリングによる最小化。 SIGPLANのプログラミングに関する会議 言語の設計と実装、287-295、1997年。
[3] Preston Briggs、Keith D. Cooper、およびLinda Torczonグラフの色付けの改善 レジスタの割り当て。プログラミング言語とシステムに関するACMトランザクション、 16(3):428-455、1994年5月。
厳密なエイリアシング*で許される最適化の価値を見ている研究について知っていますか? 'restrict'修飾子*によっても達成できませんでしたか? – supercat
私はこれらの要件を満たす最適化について知っていますか? – SzymonPajzert
'restrict'修飾子は、静的持続時間オブジェクトがエイリアスにならないことをコンパイラに伝えるために効果的に使用することはできません。また、プログラムは、互いにエイリアスする可能性のある同じ型への複数の関連するポインタを持つことがあります。タイプベースのエイリアシングは、そうでなければ利用できないような場合に最適化を可能にします。 IMHOでは、より良い修飾子を追加することで、このようなケースをよりよく扱うことができました(例えば、オブジェクトが外部コードに公開される可能性がある場合に 'register'修飾子を使用できますが、 )。 – supercat
- 1. mysql_data_seekのパフォーマンスへの影響
- 2. ディープコピーのパフォーマンスへの影響
- 3. PostgresのJsonタイプのパフォーマンスへの影響
- 4. SQLストアドプロシージャのコメントのパフォーマンスへの影響
- 5. マルチスレッドのパフォーマンスへのロックの影響
- 6. MongoDBでのDateTimeのパフォーマンスへの影響
- 7. Djangoでのリバースリレーションシップのパフォーマンスへの影響
- 8. 仮想メソッドのパフォーマンスへの影響
- 9. Mongodb:$ HINTのパフォーマンスへの影響
- 10. fwrite() - パフォーマンスへのサイズとカウントの影響
- 11. セッション変数のパフォーマンスへの影響PHP
- 12. MySQLイベントスケジューリングのパフォーマンスへの影響
- 13. Pythonクラスのパフォーマンスへの影響:Scientific Computing
- 14. マーカーとベクターのポイント - パフォーマンスへの影響
- 15. 仮想継承のパフォーマンスへの影響
- 16. RDDからJavaRDDへのパフォーマンスの影響
- 17. 効果CSSプロパティのパフォーマンスへの影響
- 18. OpenCL - パフォーマンスへの障壁の影響
- 19. LoadControlのパフォーマンスへの影響は?
- 20. Androidアノテーションへのパフォーマンスの影響
- 21. SQL:長いvarcharとパフォーマンスへの影響
- 22. パフォーマンスへの影響は待つ
- 23. 大きなパーマネントサイズ+パフォーマンスへの影響
- 24. Laravelフレームワークのパフォーマンスの影響
- 25. のsetTimeoutパフォーマンスの影響は
- 26. ビッグテーブルのパフォーマンス影響列ファミリ
- 27. 実際のパラメータのパフォーマンスの影響の影響
- 28. サービスファブリックアクタータイマーパフォーマンスへの影響
- 29. PHPの多くの必須ファイルのパフォーマンスへの影響
- 30. アクティビティの起動時のonCreate()とonStart()のパフォーマンスへの影響
正確な重複:http://stackoverflow.com/questions/754929/strict-aliasing – GManNickG
このディスカッションではパフォーマンスに関する数値は見つかりませんでした。私はいくつかのテスト結果/データを探しています。私は何か見落としてますか? – Carlos
FWIW、受諾された回答にはパフォーマンス数値はありません。 – peterchen