問題タブ [micro-architecture]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
x86 - インテルが最適化リファレンス マニュアルから 16 バイトの分岐ターゲット アラインメント コーディング ルールを削除したのはなぜですか?
インテル® 64 および IA-32 アーキテクチャー最適化リファレンス・マニュアルの以前のバージョンには、次のコーディング規則が含まれていました。
アセンブリ/コンパイラ コーディング ルール 12. (M の影響、H の一般性)
すべての分岐ターゲットは 16 バイト アラインされている必要があります。
2020 年 5 月版にはこのルールはありません。なぜ削除されたのですか?
ここLinux カーネル メーリング リストで説明されているように、16 バイトへのアライメントにはコストがかかります。しかし、これは長年の規則であり、ARM はマイクロアーキテクチャに対して同じ規則を持っています。
サブルーチンのエントリ ポイントと分岐ターゲットをクワッドワード (16 バイト) 境界に揃えることを検討してください。
AMD ファミリ 17h プロセッサ用の AMD のソフトウェア最適化ガイドには、次のように記載されています。
分岐ターゲットを 16 バイトに揃えることで、最大のピッカー スループットが得られ、キャッシュラインの終わりの短い op キャッシュ (OC) エントリが回避されます。