および ia-32 アーキテクチャー 最適化リファレンス...

788
インテル® 64 アーキテクチャー および IA-32 アーキテクチャー 最適化リファレンス・マニュアル 2011 4

Upload: others

Post on 11-Mar-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

  • インテル株式会社〒100-0005 東京都千代田区丸の内 3-1-1http://www.intel.co.jp/

    ©1997-2011 Intel Corporation.  無断での引用、転載を禁じます。2011年 7月248966-024JA

    JPN/1107/PDF/SE/SBDG/YK

    インテル

    ® 64アーキテクチャーおよび

    IA-3

    2アーキテクチャー最適化リファレンス・マ

    ニュアル

    インテル® 64アーキテクチャーおよび IA-32アーキテクチャー最適化リファレンス・マニュアル

    2011年 4月

  • インテル ® 64 アーキテクチャーおよび IA-32 アーキテクチャー最適化リファレンス・マニュアル

    2011 年 4 月

    248966-024JA

    JPN/0905/PDF/SE/SBDG/YK

  • 本資料に掲載されている情報は、インテル製品の概要説明を目的としたものです。本資料は、明示されているか

    否かにかかわらず、また禁反言によるとよらずにかかわらず、いかなる知的財産権のライセンスを許諾するもの

    ではありません。製品に付属の売買契約書『Intel's Terms and conditions of Sales』に規定されている場合を除き、

    インテルはいかなる責任を負うものではなく、またインテル製品の販売や使用に関する明示または黙示の保証

    (特定目的への適合性、商品適格性、あらゆる特許権、著作権、その他知的財産権の侵害への保証を含む)に関

    してもいかなる責任も負いません。

    インテルによる書面での合意がない限り、インテル製品は、その欠陥や故障によって人身事故が発生するような

    アプリケーションでの使用を想定した設計は行われていません。

    本ドキュメントの内容を予告なしに変更することがあります。機能または命令の一覧で「留保」または「未定

    義」と記されているものがありますが、その「機能が存在しない」あるいは「性質が留保付である」という状態

    を設計の前提にしないでください。これらの項目は、インテルが将来のために留保しているものです。インテル

    が将来これらの項目を定義したことにより、衝突が生じたり互換性が失われたりしても、インテルは一切責任を

    負いません。この情報は予告なく変更されることがあります。この情報だけに基づいて設計を最終的なものとし

    ないでください。

    インテル® 64アーキテクチャーのプロセッサーには、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、イン

    テルまでお問い合わせください。

    ハイパースレッディング・テクノロジーを利用するには、ハイパースレッディング・テクノロジーに対応したイ

    ンテル® プロセッサーを搭載したコンピューター・システム、および同技術に対応したチップセットと BIOS、OSが必要です。性能は、使用するハードウェアやソフトウェアによって異なります。HTテクノロジーに対応し

    たプロセッサーの情報等、詳細については http://www.intel.co.jp/jp/info/hyperthreading/を参照してください。

    インテル® バーチャライゼーション・テクノロジーを利用するには、同テクノロジーに対応したインテル® プロセッサー、BIOS、仮想マシンモニター(VMM)、および、用途により、同テクノロジーが有効になっている特定

    のプラットフォーム・ソフトウェアを搭載したコンピューター・システムが必要です。機能性、性能もしくはそ

    の他の特長は、ご使用のハードウェアやソフトウェアの構成によって異なります。インテル® バーチャライゼーション・テクノロジーに対応した BIOS、仮想マシンモニター(VMM)アプリケーションは、現在開発中です。

    インテル® アーキテクチャー上で 64 ビット・コンピューティングを利用するには、インテル® 64アーキテクチャーに対応したプロセッサー、チップセット、BIOS、OS、デバイスドライバー、アプリケーションを搭載す

    るコンピューター・システムが必要です。インテル® 64アーキテクチャーに対応した BIOSがない場合、32 ビットでの動作も含め、プロセッサーは動作しません。性能は、ご利用のハードウェアやソフトウェアの構成によっ

    て異なります。詳細については、各システムベンダーにお問い合わせください

    Intel、インテル、Intelロゴ、Centrino、Intel Atom、Intel Core、Itanium、Pentium、Xeon、Intel NetBurst、Intel

    SpeedStep、Intel XScale、MMX、VTuneは、アメリカ合衆国およびその他の国における Intel Corporationの商標で

    す。

    *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

    最新の仕様をご希望の場合や製品をご注文の場合は、お近くのインテルの営業所または販売代理店にお問い合わ

    せください。

    本書で紹介されている注文番号付きのドキュメントや、インテルのその他の資料を入手するには、1-800-548-

    4725(アメリカ合衆国)までご連絡いただくか、http://www.intel.co.jp/を参照してください。

    Copyright © 1997-2011 Intel Corporation. 無断での引用、転載を禁じます。

    http://www.intel.co.jp/jp/info/hyperthreading/http://www.intel.co.jp/

  • 目 次

    第 1章 はじめに 1-1

    1.1 アプリケーションのチューニング....................................................................................... 1-2

    1.2 本書について ....................................................................................................................... 1-2

    1.3 参考情報 .............................................................................................................................. 1-5

    第 2章 インテル ® 64プロセッサー・アーキテクチャーとIA-32プロセッサー・アーキテクチャー 2-1

    2.1 インテル ® マイクロアーキテクチャー Sandy Bridge......................................................... 2-22.1.1 インテル ® マイクロアーキテクチャー Sandy Bridgeのパイプラインの概要 ........ 2-32.1.2 フロントエンド ........................................................................................................ 2-5

    2.1.2.1 レガシー・デコード・パイプライン ......................................................... 2-62.1.2.2 デコード済み命令キャッシュ .................................................................... 2-92.1.2.3 分岐予測 .................................................................................................... 2-102.1.2.4 マイクロオペレーション(µOP)キューおよび

    ループストリーム検出器(LSD)............................................................... 2-112.1.3 アウトオブオーダー・エンジン ............................................................................... 2-12

    2.1.3.1 リネーマー................................................................................................. 2-122.1.3.2 スケジューラー ......................................................................................... 2-14

    2.1.4 実行コア ................................................................................................................... 2-142.1.5 キャッシュ階層 ........................................................................................................ 2-16

    2.1.5.1 ロード操作とストア操作の概要 ................................................................ 2-172.1.5.2 L1 Dキャッシュ ........................................................................................ 2-182.1.5.3 リング・インターコネクトとラストレベルキャッシュ ............................ 2-242.1.5.4 データ・プリフェッチ............................................................................... 2-24

    2.1.6 システム・エージェント.......................................................................................... 2-26

    2.2 インテル ® Core™ マイクロアーキテクチャーと拡張版インテル ® Core™ マイクロアーキテクチャー ........................................................ 2-272.2.1 インテル ® Core™ マイクロアーキテクチャーのパイプラインの概要 ................... 2-292.2.2 フロントエンド ........................................................................................................ 2-31

    2.2.2.1 分岐予測ユニット ...................................................................................... 2-312.2.2.2 命令フェッチユニット............................................................................... 2-322.2.2.3 命令キュー(IQ)....................................................................................... 2-332.2.2.4 命令デコード ............................................................................................. 2-342.2.2.5 スタックポインター追跡 ........................................................................... 2-342.2.2.6 マイクロフュージョン............................................................................... 2-35

    2.2.3 実行コア ................................................................................................................... 2-352.2.3.1 発行ポートと実行ユニット ...................................................................... 2-36

    2.2.4 インテル ® アドバンスト・メモリー・アクセス...................................................... 2-392.2.4.1 ロードとストア ......................................................................................... 2-402.2.4.2 1次キャッシュへのデータ・プリフェッチ ............................................... 2-412.2.4.3 データ・プリフェッチ・ロジック............................................................. 2-422.2.4.4 ストア・フォワーディング ....................................................................... 2-422.2.4.5 メモリー・ディスアンビゲーション ......................................................... 2-44

    目 次 iii

  • 2.2.5 インテル ® アドバンスト・スマート・キャッシュ .................................................. 2-442.2.5.1 ロード ........................................................................................................ 2-452.2.5.2 ストア ........................................................................................................ 2-46

    2.3 インテル ® マイクロアーキテクチャー Nehalem................................................................ 2-472.3.1 マイクロアーキテクチャー・パイプライン ............................................................. 2-482.3.2 フロントエンドの概要 ............................................................................................. 2-492.3.3 実行エンジン............................................................................................................ 2-51

    2.3.3.1 発行ポートと実行ユニット ....................................................................... 2-522.3.4 キャッシュとメモリー・サブシステム .................................................................... 2-532.3.5 ロード操作とストア操作の強化 ............................................................................... 2-54

    2.3.5.1 アライメント・ハザードの効率的な処理 .................................................. 2-542.3.5.2 ストア・フォワーディングの強化............................................................. 2-55

    2.3.6 REP文字列の強化 ................................................................................................... 2-572.3.7 システム・ソフトウェアの強化 ............................................................................... 2-582.3.8 消費電力の効率化..................................................................................................... 2-582.3.9 インテル ® マイクロアーキテクチャー Nehalemにおける

    ハイパースレッディング・テクノロジーのサポート............................................... 2-58

    2.4 Intel NetBurst® マイクロアーキテクチャー......................................................................... 2-592.4.1 設計目的 ................................................................................................................... 2-592.4.2 パイプライン............................................................................................................ 2-60

    2.4.2.1 フロントエンド ......................................................................................... 2-612.4.2.2 アウトオブオーダー・コア ....................................................................... 2-622.4.2.3 リタイアメント ......................................................................................... 2-63

    2.4.3 フロントエンド・パイプラインの詳細 .................................................................... 2-632.4.3.1 プリフェッチ ............................................................................................. 2-632.4.3.2 デコーダー................................................................................................. 2-642.4.3.3 実行トレースキャッシュ ........................................................................... 2-642.4.3.4 分岐予測 .................................................................................................... 2-64

    2.4.4 実行コアの詳細 ........................................................................................................ 2-662.4.4.1 命令のレイテンシーとスループット ......................................................... 2-662.4.4.2 実行ユニットと発行ポート ....................................................................... 2-672.4.4.3 キャッシュ................................................................................................. 2-682.4.4.4 データ・プリフェッチ............................................................................... 2-702.4.4.5 ロードとストア ......................................................................................... 2-722.4.4.6 ストア・フォワーディング ....................................................................... 2-73

    2.5 インテル ® Pentium® Mプロセッサー・マイクロアーキテクチャー .................................. 2-732.5.1 フロントエンド ........................................................................................................ 2-742.5.2 データ・プリフェッチ ............................................................................................. 2-762.5.3 アウトオブオーダー・コア ...................................................................................... 2-772.5.4 インオーダー・リタイアメント ............................................................................... 2-77

    2.6 インテル ® Core™ Soloプロセッサーとインテル ® Core™ Duoプロセッサーのマイクロアーキテクチャー.................................................................................................. 2-772.6.1 フロントエンド ........................................................................................................ 2-782.6.2 データ・プリフェッチ ............................................................................................. 2-78

    2.7 インテル ® ハイパースレッディング・テクノロジー.......................................................... 2-792.7.1 プロセッサー・リソースと HTテクノロジー .......................................................... 2-80

    2.7.1.1 リソースの複製 ......................................................................................... 2-80

    iv インテル® 64アーキテクチャーおよび IA-32アーキテクチャー最適化

  • 2.7.1.2 リソースの分割 ......................................................................................... 2-812.7.1.3 リソースの共有 ......................................................................................... 2-81

    2.7.2 マイクロアーキテクチャー・パイプライン、HTテクノロジー .............................. 2-822.7.3 フロントエンド・パイプライン ............................................................................... 2-822.7.4 実行コア ................................................................................................................... 2-822.7.5 リタイアメント ........................................................................................................ 2-83

    2.8 マルチコア・プロセッサー.................................................................................................. 2-832.8.1 マイクロアーキテクチャー・パイプラインとマルチコア・プロセッサー .............. 2-852.8.2 インテル ® Core™ Duoプロセッサーの共有キャッシュ ......................................... 2-86

    2.8.2.1 ロード操作とストア操作 ........................................................................... 2-86

    2.9 インテル ® 64アーキテクチャー......................................................................................... 2-87

    2.10 SIMD技術............................................................................................................................ 2-882.10.1 SIMDテクノロジーのまとめ ................................................................................... 2-90

    2.10.1.1 インテル ® MMX® テクノロジー ............................................................... 2-902.10.1.2 ストリーミング SIMD拡張命令 ................................................................ 2-902.10.1.3 ストリーミング SIMD拡張命令 2 ............................................................. 2-912.10.1.4 ストリーミング SIMD拡張命令 3 ............................................................. 2-912.10.1.5 ストリーミング SIMD拡張命令 3補足命令 ............................................. 2-912.10.1.6 SSE4.1 ...................................................................................................... 2-922.10.1.7 SSE4.2 ...................................................................................................... 2-92

    2.10.1.8 AESNIおよび PCLMULQDQ .................................................................... 2-932.10.1.9 インテル ® アドバンスト・ベクトル・エクステンション

    (インテル ® AVX)...................................................................................... 2-93

    第 3章 一般的な最適化ガイドライン 3-1

    3.1 パフォーマンス・ツール ..................................................................................................... 3-23.1.1 インテル ® C++コンパイラーとインテル ® Fortranコンパイラー .......................... 3-23.1.2 コンパイラーに関する一般的な推奨事項................................................................. 3-23.1.3 インテル ® VTune™ パフォーマンス・アナライザー .............................................. 3-3

    3.2 プロセッサーの相違 ............................................................................................................ 3-43.2.1 CPUIDディスパッチ手法と互換コード手法............................................................ 3-53.2.2 透過的なキャッシュ・パラメーター手法................................................................. 3-53.2.3 スレッディング手法とハードウェア・マルチスレッディング・サポート .............. 3-6

    3.3 コーディング規則、推奨事項、チューニングのヒント ...................................................... 3-6

    3.4 フロントエンドの最適化 ..................................................................................................... 3-73.4.1 分岐予測の最適化..................................................................................................... 3-7

    3.4.1.1 分岐の排除................................................................................................. 3-83.4.1.2 スピンウェイト・ループとアイドルループ .............................................. 3-103.4.1.3 静的予測 .................................................................................................... 3-113.4.1.4 インライン展開、コール、リターン ......................................................... 3-133.4.1.5 コード・アライメント............................................................................... 3-143.4.1.6 分岐タイプの選択 ...................................................................................... 3-153.4.1.7 ループのアンロール .................................................................................. 3-173.4.1.8 コンパイラーによる分岐予測のサポート .................................................. 3-18

    3.4.2 フェッチとデコードの最適化................................................................................... 3-193.4.2.1 マイクロフュージョン向けの最適化 ......................................................... 3-19

    目 次 v

  • 3.4.2.2 マクロフュージョン向けの最適化............................................................. 3-203.4.2.3 レングス変更プリフィクス(LCP)........................................................... 3-253.4.2.4 ループストリーム検出器(LSD)の最適化 .............................................. 3-273.4.2.5 インテル ® マイクロアーキテクチャー Sandy Bridgeにおける

    LSDマイクロオペレーション(µOP)拡散帯域幅の活用 ........................ 3-273.4.2.6 デコード済み命令キャッシュの最適化 ..................................................... 3-283.4.2.7 インテル ® Pentium® Mプロセッサーのデコーダーの

    スケジューリング規則............................................................................... 3-303.4.2.8 その他のデコード・ガイドライン............................................................. 3-31

    3.5 実行コアの最適化 ................................................................................................................ 3-313.5.1 命令の選択 ............................................................................................................... 3-32

    3.5.1.1 INC命令と DEC命令の使用 ..................................................................... 3-333.5.1.2 整数除算 .................................................................................................... 3-333.5.1.3 LEA命令の使用 ......................................................................................... 3-333.5.1.4 インテル ® マイクロアーキテクチャー Sandy Bridgeにおける

    ADCおよび SBB ....................................................................................... 3-363.5.1.5 ビット単位のローテーション .................................................................... 3-373.5.1.6 アドレス計算 ............................................................................................. 3-373.5.1.7 レジスターのクリアーと依存関係解消イディオム ................................... 3-383.5.1.8 比較 ........................................................................................................... 3-413.5.1.9 NOPの使用 ............................................................................................... 3-423.5.1.10 SIMDデータタイプの混在 ........................................................................ 3-433.5.1.11 スピル・スケジューリング ....................................................................... 3-43

    3.5.2 実行コアでのストールの回避................................................................................... 3-443.5.2.1 ROB読み出しポートのストール............................................................... 3-443.5.2.2 ライトバック・バスの競合 ....................................................................... 3-453.5.2.3 実行ドメイン間のバイパス ....................................................................... 3-463.5.2.4 パーシャル・レジスター・ストール ......................................................... 3-463.5.2.5 パーシャル XMMレジスターストール ...................................................... 3-483.5.2.6 パーシャル・フラグ・レジスター・ストール........................................... 3-493.5.2.7 浮動小数点 /SIMDオペランド ................................................................... 3-50

    3.5.3 ベクトル化 ............................................................................................................... 3-513.5.4 部分的にベクトル化可能なコードの最適化 ............................................................. 3-52

    3.5.4.1 代替パック手法 ......................................................................................... 3-553.5.4.2 結果の受け渡しの簡素化 ........................................................................... 3-553.5.4.3 スタックの最適化 ...................................................................................... 3-563.5.4.4 チューニングに関する考慮事項 ................................................................ 3-57

    3.6 メモリーアクセスの最適化.................................................................................................. 3-593.6.1 ロード /ストア実行帯域幅 ....................................................................................... 3-59

    3.6.1.1 インテル ® マイクロアーキテクチャー Sandy Bridgeでのロード帯域幅の利用 .................................................................................. 3-60

    3.6.1.2 インテル ® マイクロアーキテクチャー Sandy BridgeにおけるL1Dキャッシュ・レイテンシー ................................................................ 3-61

    3.6.1.3 L1Dキャッシュバンクの競合の対処......................................................... 3-623.6.2 レジスタースピルの軽減.......................................................................................... 3-643.6.3 スペキュレーティブ・エグゼキューションと

    メモリー・ディスアンビゲーションの拡張 ............................................................. 3-653.6.4 アライメント............................................................................................................ 3-65

    vi インテル® 64アーキテクチャーおよび IA-32アーキテクチャー最適化

  • 3.6.5 ストア・フォワーディング ...................................................................................... 3-683.6.5.1 ストア -ロード・フォワーディングのサイズとアライメントの制限 ....... 3-693.6.5.2 ストア・フォワーディングのデータの可用性の制限................................ 3-74

    3.6.6 データレイアウトの最適化 ...................................................................................... 3-753.6.7 スタックのアライメント.......................................................................................... 3-783.6.8 キャッシュの容量制限とエイリアシング................................................................. 3-79

    3.6.8.1 セットアソシアティブ・キャッシュの容量制限 ....................................... 3-803.6.8.2 インテル ® Pentium® Mプロセッサー、

    インテル ® Core™ Soloプロセッサー、インテル ® Core™ Duoプロセッサー、インテル ® Core™2 Duoプロセッサーにおけるエイリアシングの問題............................................................................... 3-80

    3.6.9 コードとデータの混在 ............................................................................................. 3-823.6.9.1 自己修正コード ......................................................................................... 3-833.6.9.2 位置に依存しないコード ........................................................................... 3-83

    3.6.10 ライト・コンバイニング.......................................................................................... 3-843.6.11 局所性の改善............................................................................................................ 3-853.6.12 バス・レイテンシーの最小化................................................................................... 3-863.6.13 非テンポラルなストア・バス・トラフィック ......................................................... 3-87

    3.7 プリフェッチ ....................................................................................................................... 3-893.7.1 ハードウェア命令フェッチとソフトウェア・プリフェッチ.................................... 3-893.7.2 以前のマイクロアーキテクチャーにおけるソフトウェア・プリフェッチと

    ハードウェア・プリフェッチ................................................................................... 3-893.7.3 1次データキャッシュのハードウェア・プリフェッチ............................................ 3-913.7.4 2次キャッシュのハードウェア・プリフェッチ ...................................................... 3-943.7.5 キャッシュ制御命令 ................................................................................................. 3-943.7.6 REPプリフィクスとデータ移動 .............................................................................. 3-95

    3.8 浮動小数点に関する考慮事項 .............................................................................................. 3-983.8.1 浮動小数点コードの最適化のガイドライン ............................................................. 3-983.8.2 浮動小数点モードと浮動小数点例外........................................................................ 3-100

    3.8.2.1 浮動小数点例外 ......................................................................................... 3-1003.8.2.2 x87 FPU コード内の浮動小数点例外の処理.............................................. 3-1003.8.2.3 SSE/SSE2/SSE3コード内の浮動小数点例外 ........................................... 3-101

    3.8.3 浮動小数点モード..................................................................................................... 3-1023.8.3.1 丸めモード................................................................................................. 3-1033.8.3.2 精度 ........................................................................................................... 3-1053.8.3.3 並列性と FXCHの利用の改善 ................................................................... 3-105

    3.8.4 x87コードとスカラー SIMD浮動小数点コードのトレードオフ ............................. 3-1063.8.4.1 インテル ® Core™ Soloプロセッサーと

    インテル ® Core™ Duoプロセッサーでのスカラー SSE/SSE2のパフォーマンス ......................................................................................... 3-106

    3.8.4.2 整数オペランドを使用する x87浮動小数点操作....................................... 3-1073.8.4.3 x87浮動小数点比較命令............................................................................ 3-1073.8.4.4 超越関数 .................................................................................................... 3-108

    3.9 PCIeパフォーマンスの最大化 ............................................................................................ 3-108

    目 次 vii

  • 第 4章 SIMDアーキテクチャー向けのコーディング 4-1

    4.1 プロセッサーによる SIMD技術のサポートのチェック ...................................................... 4-24.1.1 インテル® MMX® テクノロジーのサポートのチェック........................................... 4-24.1.2 ストリーミング SIMD拡張命令のサポートのチェック ........................................... 4-34.1.3 ストリーミング SIMD拡張命令 2のサポートのチェック ....................................... 4-34.1.4 ストリーミング SIMD拡張命令 3のサポートのチェック ....................................... 4-44.1.5 ストリーミング SIMD拡張命令 3補足命令のサポートのチェック......................... 4-44.1.6 ストリーミング SIMD拡張命令 4.1のサポートのチェック .................................... 4-54.1.7 ストリーミング SIMD拡張命令 4.2 のサポートのチェック .................................... 4-54.1.8 PCLMULQDQおよび AESNI命令の検出 ................................................................ 4-64.1.9 AVX命令の検出........................................................................................................ 4-74.1.10 VEXでエンコードされた AESおよび VPCLMULQDQの検出 ............................... 4-9

    4.2 SIMDプログラミング・コードへの変換に関する留意点.................................................... 4-104.2.1 ホットスポットの特定 ............................................................................................. 4-124.2.2 SIMD実行コードへの変換によるメリットがあるかどうかの判定 .......................... 4-13

    4.3 コーディング手法 ................................................................................................................ 4-134.3.1 各種のコーディング手法.......................................................................................... 4-14

    4.3.1.1 アセンブリー ............................................................................................. 4-154.3.1.2 組み込み関数 ............................................................................................. 4-164.3.1.3 クラス ........................................................................................................ 4-174.3.1.4 自動ベクトル化 ......................................................................................... 4-18

    4.4 スタックとデータのアライメント....................................................................................... 4-194.4.1 データ・アクセス・パターンのアライメントと隣接性 ........................................... 4-19

    4.4.1.1 パディングによるデータのアライメント .................................................. 4-204.4.1.2 配列によるデータの隣接性の保証............................................................. 4-20

    4.4.2 128ビット SIMD技術のスタック・アライメント .................................................. 4-214.4.3 インテル® MMX® テクノロジーのデータ・アライメント ....................................... 4-224.4.4 128ビット・データのデータ・アライメント.......................................................... 4-22

    4.4.4.1 コンパイラーがサポートしているアライメント ....................................... 4-23

    4.5 メモリーの使用効率の改善.................................................................................................. 4-254.5.1 データ構造のレイアウト.......................................................................................... 4-254.5.2 ストリップマイニング ............................................................................................. 4-284.5.3 ループ・ブロッキング ............................................................................................. 4-30

    4.6 命令の選択........................................................................................................................... 4-324.6.1 SIMDの最適化とマイクロアーキテクチャー .......................................................... 4-34

    4.7 開発の最終段階におけるアプリケーションのチューニング ............................................... 4-35

    第 5章 SIMD整数アプリケーション向けの最適化 5-1

    5.1 SIMD整数コードに関する一般的な規則 ............................................................................. 5-2

    5.2 SIMD整数と x87浮動小数点との併用 ................................................................................ 5-25.2.1 EMMS命令の使用.................................................................................................... 5-35.2.2 EMMS命令を使用するためのガイドライン ............................................................ 5-3

    5.3 データのアライメント......................................................................................................... 5-5

    5.4 データ移動のコーディング手法 .......................................................................................... 5-7

    viii インテル® 64アーキテクチャーおよび IA-32アーキテクチャー最適化

  • 5.4.1 符号なしアンパック ................................................................................................. 5-75.4.2 符号付きアンパック ................................................................................................. 5-85.4.3 飽和ありインターリーブ型パック ........................................................................... 5-85.4.4 飽和なしインターリーブ型パック ........................................................................... 5-105.4.5 非インターリーブ型アンパック ............................................................................... 5-105.4.6 データ要素の抽出..................................................................................................... 5-125.4.7 データ要素の挿入..................................................................................................... 5-135.4.8 非ユニット間隔データの移動................................................................................... 5-155.4.9 バイトマスクの整数への移動................................................................................... 5-165.4.10 64ビット・レジスター用のパックド・シャッフル・ワード .................................. 5-175.4.11 128ビット・レジスター用のパックド・シャッフル・ワード ................................ 5-175.4.12 バイトのシャッフル ................................................................................................. 5-185.4.13 条件付きのデータ移動 ............................................................................................. 5-185.4.14 128ビット・レジスター内での 64ビット・データの

    アンパック /インターリーブ ................................................................................... 5-185.4.15 データの移動............................................................................................................ 5-185.4.16 変換命令 ................................................................................................................... 5-19

    5.5 定数の生成........................................................................................................................... 5-19

    5.6 ビルディング・ブロック ..................................................................................................... 5-215.6.1 符号なし数値間の絶対差.......................................................................................... 5-215.6.2 符号付き数値間の絶対差.......................................................................................... 5-215.6.3 絶対値....................................................................................................................... 5-225.6.4 ピクセル形式の変換 ................................................................................................. 5-225.6.5 エンディアンの変換 ................................................................................................. 5-255.6.6 任意の範囲 [High, Low]へのクリップ操作 ............................................................... 5-26

    5.6.6.1 効率の良いクリップ方法 ........................................................................... 5-265.6.6.2 任意の符号なし範囲 [High, Low]へのクリップ操作.................................. 5-28

    5.6.7 バイト、ワード、ダブルワードのパックド最大値 /最小値..................................... 5-285.6.8 整数のパックド乗算 ................................................................................................. 5-295.6.9 絶対差のパックド和 ................................................................................................. 5-295.6.10 MPSADBWと PHMINPOSUW命令 ........................................................................ 5-305.6.11 パックド平均(バイト /ワード).............................................................................. 5-305.6.12 定数との複素乗算..................................................................................................... 5-305.6.13 パックド 64ビット加算 /減算 ................................................................................. 5-315.6.14 128ビット・シフト ................................................................................................. 5-325.6.15 PTESTと条件分岐 ................................................................................................... 5-325.6.16 ループの反復間における異種演算のベクトル化...................................................... 5-335.6.17 ネストされたループの制御フローのベクトル化...................................................... 5-34

    5.7 メモリーの最適化 ................................................................................................................ 5-385.7.1 パーシャル・メモリー・アクセス ........................................................................... 5-39

    5.7.1.1 キャッシュラインの分割を防止するための補助的な手法......................... 5-415.7.2 メモリーフィルおよびビデオフィルの帯域幅の拡大............................................... 5-42

    5.7.2.1 MOVDQ命令でのメモリー帯域幅の拡大 .................................................. 5-425.7.2.2 同じ DRAMページに対してロード操作 /ストア操作を

    行うことによるメモリー帯域幅の拡大 ..................................................... 5-435.7.2.3 ストア操作のアライメントを合わせることによる UCおよび

    WCのストア帯域幅の拡大........................................................................ 5-43

    目 次 ix

  • 5.7.3 リバース・メモリー・コピー................................................................................... 5-43

    5.8 64ビットから 128ビット SIMD整数への変換 ................................................................... 5-485.8.1 SIMDの最適化とマイクロアーキテクチャー .......................................................... 5-49

    5.8.1.1 パックド SSE2整数命令とインテル® MMX®命令の比較 ........................ 5-495.8.1.2 不正な依存関係の問題の回避策 ................................................................ 5-50

    5.9 部分的にベクトル化可能なコードのチューニング ............................................................. 5-51

    5.10 並列モードの AES暗号化 /復号 ......................................................................................... 5-555.10.1 AES カウンターモードの演算.................................................................................. 5-565.10.2 AESキー拡張の代替手法 ......................................................................................... 5-65

    第 6章 SIMD 浮動小数点アプリケーション向けの最適化 6-1

    6.1 SIMD 浮動小数点コードに関する一般的な規則 .................................................................. 6-1

    6.2 計画上の留意点.................................................................................................................... 6-1

    6.3 x87浮動小数点と SIMD 浮動小数点との併用 ..................................................................... 6-2

    6.4 スカラー浮動小数点コード.................................................................................................. 6-2

    6.5 データのアライメント......................................................................................................... 6-36.5.1 データの配列............................................................................................................ 6-3

    6.5.1.1 垂直計算と水平計算の比較 ....................................................................... 6-36.5.1.2 データのスウィズリング ........................................................................... 6-66.5.1.3 データのデスウィズリング ....................................................................... 6-96.5.1.4 SSEを使用した水平加算 .......................................................................... 6-11

    6.5.2 cvttps2pi/cvttss2si 命令の使用 ................................................................................. 6-136.5.3 ゼロ・フラッシュ・モードと DAZモード ............................................................... 6-14

    6.6 SIMDの最適化とマイクロアーキテクチャー...................................................................... 6-146.6.1 SSE3を使用した SIMD浮動小数点プログラミング ............................................... 6-14

    6.6.1.1 SSE3と複素数演算 ................................................................................... 6-156.6.1.2 インテル® Core™Duoプロセッサーにおける

    パックド浮動小数点のパフォーマンス ..................................................... 6-186.6.2 ドット積と水平 SIMD命令 ...................................................................................... 6-186.6.3 ベクトルの正規化..................................................................................................... 6-216.6.4 水平 SIMD命令セットとデータレイアウトの使用 .................................................. 6-23

    6.6.4.1 SoAとベクトル -マトリクス乗算............................................................. 6-26

    第 7章 キャッシュ利用の最適化 7-1

    7.1 プリフェッチのコーディングに関する一般的なガイドライン ........................................... 7-2

    7.2 ハードウェアによるデータのプリフェッチ ........................................................................ 7-3

    7.3 PREFETCH命令とキャッシュ制御命令 ............................................................................. 7-47.4 PREFETCH ......................................................................................................................... 7-5

    7.4.1 ソフトウェアによるデータのプリフェッチ ............................................................. 7-57.4.2 PREFETCH命令(インテル® Pentium® 4 プロセッサーの場合)........................... 7-67.4.3 PREFETCH命令とロード命令 ................................................................................ 7-7

    7.5 キャッシュ制御.................................................................................................................... 7-87.5.1 非テンポラルなストア命令 ...................................................................................... 7-8

    7.5.1.1 フェンス操作 ............................................................................................. 7-8

    x インテル® 64アーキテクチャーおよび IA-32アーキテクチャー最適化

  • 7.5.1.2 ストリーミング方式の非テンポラルなストア........................................... 7-87.5.1.3 メモリー・タイプ・ストアと非テンポラルなストア................................ 7-97.5.1.4 ライト・コンバイニング ........................................................................... 7-10

    7.5.2 ストリーミング・ストアの使用モデル .................................................................... 7-107.5.2.1 整合要求 .................................................................................................... 7-107.5.2.2 非整合要求................................................................................................. 7-11

    7.5.3 ストリーミング・ストア命令の説明........................................................................ 7-117.5.4 ストリーミング・ロード命令................................................................................... 7-127.5.5 FENCE 命令 ............................................................................................................. 7-12

    7.5.5.1 SFENCE 命令 ............................................................................................ 7-127.5.5.2 LFENCE 命令 ............................................................................................ 7-137.5.5.3 MFENCE 命令 ........................................................................................... 7-13

    7.5.6 CLFLUSH 命令......................................................................................................... 7-13

    7.6 プリフェッチを使用したメモリーの最適化 ........................................................................ 7-147.6.1 ソフトウェア制御プリフェッチ ............................................................................... 7-147.6.2 ハードウェア・プリフェッチ................................................................................... 7-157.6.3 ハードウェア・プリフェッチで実効レイテンシーを削減する具体例 ..................... 7-167.6.4 ソフトウェアによるプリフェッチ命令でレイテンシーを隠蔽する具体例 .............. 7-177.6.5 ソフトウェア・プリフェッチを使用する際の点検事項 ........................................... 7-197.6.6 ソフトウェアのプリフェッチ・スケジューリング間隔 ........................................... 7-197.6.7 プリフェッチの連結 ................................................................................................. 7-207.6.8 ソフトウェア・プリフェッチ命令の実行回数を最小限に抑える............................. 7-227.6.9 ソフトウェア・プリフェッチ命令と演算命令を混在させる.................................... 7-247.6.10 ソフトウェア・プリフェッチとキャッシュ・ブロッキング手法............................. 7-257.6.11 ハードウェア・プリフェッチとキャッシュ・ブロッキング手法............................. 7-307.6.12 シングルパス実行とマルチパス実行との比較 ......................................................... 7-31

    7.7 非テンポラルなストアを使用したメモリーの最適化 .......................................................... 7-337.7.1 非テンポラルなストアとソフトウェアによるライト・コンバイニング.................. 7-337.7.2 キャッシュ管理 ........................................................................................................ 7-34

    7.7.2.1 ビデオエンコーダー .................................................................................. 7-347.7.2.2 ビデオデコーダー ...................................................................................... 7-357.7.2.3 ビデオエンコーダー /デコーダーの実装例から引き出せる結論............... 7-357.7.2.4 メモリー・コピー・ルーチンの最適化 ..................................................... 7-357.7.2.5 TLB の初期化............................................................................................. 7-377.7.2.6 8バイト・ストリーミング・ストアと

    ソフトウェア・プリフェッチの使用 ......................................................... 7-377.7.2.7 16バイト・ストリーミング・ストアと

    ハードウェア・プリフェッチの使用 ......................................................... 7-387.7.2.8 メモリー・コピー・ルーチンのパフォーマンスの比較 ............................ 7-39

    7.7.3 キャッシュ・パラメーター ...................................................................................... 7-417.7.3.1 キャッシュ・パラメーターを使用したキャッシュ共有 ............................ 7-427.7.3.2 シングルコアまたはマルチコアでのキャッシュ共有................................ 7-427.7.3.3 プリフェッチ間隔の決定 ........................................................................... 7-42

    目 次 xi

  • 第 8章 マルチコアとハイパースレッディング・テクノロジー 8-1

    8.1 性能および使用モデル......................................................................................................... 8-28.1.1 マルチスレッディング ............................................................................................. 8-28.1.2 マルチタスキング環境 ............................................................................................. 8-3

    8.2 プログラミング・モデルおよびマルチスレッディング ...................................................... 8-58.2.1 並列プログラミング・モデル................................................................................... 8-5

    8.2.1.1 ドメイン分解 ............................................................................................. 8-58.2.2 機能分解 ................................................................................................................... 8-68.2.3 専用プログラミング・モデル................................................................................... 8-6

    8.2.3.1 生産 -消費スレッド化モデル .................................................................... 8-78.2.4 マルチスレッド・アプリケーション作成用のツール............................................... 8-10

    8.2.4.1 OpenMP* 指示句を使用したプログラミング ............................................ 8-108.2.4.2 コードの自動並列化 .................................................................................. 8-118.2.4.3 開発ツールのサポート............................................................................... 8-118.2.4.4 インテル® スレッド・チェッカー ............................................................. 8-118.2.4.5 インテル®スレッド・プロファイラー ...................................................... 8-118.2.4.6 インテル® スレッディング・ビルディング・ブロック ............................ 8-11

    8.3 最適化のガイドライン......................................................................................................... 8-128.3.1 スレッド同期の主な基準.......................................................................................... 8-128.3.2 システムバス最適化の主な基準 ............................................................................... 8-128.3.3 メモリー最適化の主な基準 ...................................................................................... 8-138.3.4 フロントエンド最適化の主な基準 ........................................................................... 8-138.3.5 実行リソース最適化の主な基準 ............................................................................... 8-148.3.6 一般性および性能の影響.......................................................................................... 8-14

    8.4 スレッド同期 ....................................................................................................................... 8-158.4.1 同期プリミティブの選択.......................................................................................... 8-158.4.2 短期間の同期............................................................................................................ 8-168.4.3 スピンロックによる最適化 ...................................................................................... 8-198.4.4 長期間の同期............................................................................................................ 8-19

    8.4.4.1 スレッド同期におけるコーディングの落とし穴と回避策......................... 8-218.4.5 変更されたデータの共有とフォルス・シェアリングの防止.................................... 8-228.4.6 共有同期変数の配置 ................................................................................................. 8-23

    8.5 システムバス最適化 ............................................................................................................ 8-258.5.1 バス帯域幅の保持..................................................................................................... 8-258.5.2 バスとキャッシュとの相互作用について................................................................. 8-268.5.3 過度なソフトウェア・プリフェッチの回避 ............................................................. 8-268.5.4 キャッシュミスの実効レイテンシーの改善 ............................................................. 8-278.5.5 フルサイズの書き込みトランザクションによる高データレートの実現.................. 8-28

    8.6 メモリー最適化.................................................................................................................... 8-298.6.1 キャッシュ・ブロッキング手法 ............................................................................... 8-298.6.2 共有メモリー最適化 ................................................................................................. 8-30

    8.6.2.1 物理プロセッサー間でのデータ共有の最小化........................................... 8-308.6.2.2 バッチ方式の生産 -消費モデル ................................................................. 8-30

    8.6.3 64KB エイリアシング・データ・アクセスの排除 ................................................... 8-32

    8.7 フロントエンド最適化......................................................................................................... 8-338.7.1 過度なループアンロールの回避 ............................................................................... 8-33

    xii インテル® 64アーキテクチャーおよび IA-32アーキテクチャー最適化

  • 8.8 アフィニティーと共有プラットフォーム・リソースの管理 ............................................... 8-348.8.1 共有リソースのトポロジー列挙 ............................................................................... 8-358.8.2 Non-Uniform Memory Access .................................................................................. 8-35

    8.9 その他の共有リソースの最適化 .......................................................................................... 8-388.9.1 HTテクノロジー最適化の機会拡大 ......................................................................... 8-38

    第 9章 64ビット・モードのコーディング・ガイドライン 9-1

    9.1 はじめに .............................................................................................................................. 9-1

    9.2 64ビット・モードに影響があるコーディング規則 ............................................................ 9-19.2.1 データサイズが 32ビットの場合はレガシーの 32ビット命令を使用..................... 9-19.2.2 追加のレジスターを使用したレジスターへの負荷の削減 ....................................... 9-29.2.3 64ビット同士の乗算の有効活用.............................................................................. 9-29.2.4 128ビット整数除算の 128ビット乗算への置換 ..................................................... 9-39.2.5 完全な 64ビットへの符号拡張 ................................................................................ 9-6

    9.3 64ビット・モード向けの代替コーディング規則................................................................ 9-79.3.1 64ビット演算結果では 2つの 32ビット・レジスターの代わりに

    64ビット・レジスターを使用 ................................................................................. 9-79.3.2 CVTSI2SSと CVTSI2SD命令 ................................................................................ 9-89.3.3 ソフトウェア・プリフェッチの使用........................................................................ 9-8

    第 10章テキスト処理 /字句解析 /構文解析における SSE4.2とSIMDプログラミング 10-1

    10.1 SSE4.2の文字列 /テキスト命令 ......................................................................................... 10-110.1.1 CRC32...................................................................................................................... 10-5

    10.2 SSE4.2の文字列 /テキスト命令の使用 .............................................................................. 10-710.2.1 アライメントの合っていないメモリーアクセスとバッファーサイズの管理........... 10-810.2.2 アライメントの合っていないメモリーアクセスと文字列ライブラリー.................. 10-8

    10.3 SSE4.2のアプリケーション・コーディングのガイドラインと例...................................... 10-810.3.1 NULL文字の識別(Strlenと同等)........................................................................... 10-910.3.2 スペース類の文字の識別.......................................................................................... 10-1310.3.3 サブ文字列の検索..................................................................................................... 10-1610.3.4 文字列トークンの抽出と大文字 /小文字の処理....................................................... 10-2510.3.5 Unicode処理と PCMPxSTRy .................................................................................. 10-3010.3.6 SSE4.2を使用した置換文字列ライブラリー関数 ................................................... 10-36

    10.4 SSE4.2で可能な数値および字句計算 ................................................................................. 10-38

    第 11章インテル® アドバンスト・ベクトル・エクステンションの最適化 11-1

    11.1 インテル® AVX組込み関数のコーディング ........................................................................ 11-3

    11.2 非破壊ソース(NDS).......................................................................................................... 11-8

    11.3 AVXコードと SSEコードの混在 ........................................................................................ 11-10

    11.4 128ビット・レーンの操作と AVX ...................................................................................... 11-12

    11.5 データの収集 /分散 ............................................................................................................. 11-19

    目 次 xiii

  • 11.6 インテル® AVXのデータ・アライメント............................................................................ 11-23

    11.7 L1Dキャッシュラインの置換.............................................................................................. 11-28

    11.8 4Kエイリアシング .............................................................................................................. 11-28

    11.9 条件付きの SIMDパックドロード /ストア ......................................................................... 11-29

    11.10 整数と浮動小数点が混在したコード ................................................................................. 11-33

    11.11 ポート 5の負荷の軽減 ...................................................................................................... 11-37

    11.12 除算演算および平方根演算 ............................................................................................... 11-44

    11.13 Array Sub Sumの最適化の例............................................................................................ 11-52

    第 12章モバイル利用時における電力の最適化 12-1

    12.1 概要...................................................................................................................................... 12-1

    12.2 モバイル環境での利用シナリオ .......................................................................................... 12-212.2.1 電力効率に優れたソフトウェア ............................................................................... 12-3

    12.3 ACPI Cステート.................................................................................................................. 12-412.3.1 プロセッサー固有の C4ステートと Deep C4ステート .......................................... 12-512.3.2 プロセッサー固有の Deep Cステートと

    インテル® ターボ・ブースト・テクノロジー.......................................................... 12-612.3.3 インテル® マイクロアーキテクチャー Sandy Bridgeの

    プロセッサー固有の Deep Cステート..................................................................... 12-712.3.4 インテル® ターボ・ブースト・テクノロジー 2.0.................................................... 12-8

    12.4 バッテリー持続時間の延長に関するガイドライン ............................................................. 12-812.4.1 機能品質を満たすためのパフォーマンスの調整...................................................... 12-912.4.2 処理量の削減............................................................................................................ 12-1012.4.3 プラットフォーム・レベルの最適化........................................................................ 12-1012.4.4 スリープ状態への遷移の処理................................................................................... 12-1112.4.5 拡張版 Intel SpeedStep® テクノロジーの使用......................................................... 12-1112.4.6 拡張版インテル® Deeper Sleepの実現 ................................................................... 12-1312.4.7 マルチコアに関する考慮事項................................................................................... 12-13

    12.4.7.1 拡張版 Intel SpeedStep® テクノロジー.................................................... 12-1412.4.7.2 スレッドの移行に関する考慮事項............................................................. 12-1412.4.7.3 Cステートでのマルチコアに関する考慮事項........................................... 12-15

    12.5 インテリジェントな電力消費を実現するためのソフトウェアの調整................................. 12-1712.5.1 アクティブサイクルの削減 ...................................................................................... 12-17

    12.5.1.1 マルチスレッディングによるアクティブサイクルの削減......................... 12-1712.5.1.2 ベクトル化................................................................................................. 12-18

    12.6 システム・ソフトウェアのプロセッサー固有のパワー・マネジメントの最適化............... 12-2412.6.1 プロセッサー固有の非アクティブ状態構成のパワー・マネジメントの推奨事項 ... 12-24

    12.6.1.1 非アクティブ状態からアクティブ状態への遷移の場合のパワー・マネジメントと応答性のバランス .............................................. 12-26

    第 13章インテル ® Atom™ マイクロアーキテクチャーとソフトウェアの最適化 13-1

    13.1 概要...................................................................................................................................... 13-1

    13.2 インテル® Atom™マイクロアーキテクチャー ................................................................... 13-1

    xiv インテル® 64アーキテクチャーおよび IA-32アーキテクチャー最適化

  • 13.2.1 インテル® Atom™マイクロアーキテクチャーにおけるハイパースレッディング・テクノロジーのサポート............................................... 13-3

    13.3 インテル® Atom™マイクロアーキテクチャーにおけるコーディングの推奨事項 ............. 13-413.3.1 インテル® Atom™マイクロアーキテクチャーのフロントエンドの最適化 ............ 13-413.3.2 実行コアの最適化..................................................................................................... 13-6

    13.3.2.1 整数命令の選択 ......................................................................................... 13-613.3.2.2 アドレス生成 ............................................................................................. 13-713.3.2.3 整数の乗算................................................................................................. 13-813.3.2.4 整数シフト命令 ......................................................................................... 13-913.3.2.5 パーシャル・レジスター・アクセス ......................................................... 13-913.3.2.6 FP/SIMD命令の選択 ................................................................................. 13-9

    13.3.3 メモリーアクセスの最適化 ...................................................................................... 13-1213.3.3.1 ストア・フォワーディング ....................................................................... 13-1213.3.3.2 L1データキャッシュ ................................................................................. 13-1213.3.3.3 セグメントベース ...................................................................................... 13-1313.3.3.4 文字列移動................................................................................................. 13-1313.3.3.5 パラメーターの受け渡し ........................................................................... 13-1413.3.3.6 関数呼び出し ............................................................................................. 13-1413.3.3.7 乗算 /加算の依存関係チェーンの最適化................................................... 13-1513.3.3.8 位置に依存しないコード ........................................................................... 13-17

    13.4 命令レイテンシー ................................................................................................................ 13-17

    付録 A アプリケーション・パフォーマンス・ツール A-1

    A.1 各種コンパイラー ................................................................................................................ A-2A.1.1 インテル® 64プロセッサーと IA-32プロセッサーの推奨される最適化設定 .......... A-2A.1.2 ベクトル化とループ最適化 ...................................................................................... A-4

    A.1.2.1 OpenMP* によるマルチスレッド処理 ....................................................... A-5A.1.2.2 自動マルチスレッド処理 ........................................................................... A-5

    A.1.3 ライブラリー関数のインライン展開(/Oi、/Oi-).................................................... A-5A.1.4 浮動小数点演算の精度(/Op、/Op-、/Qprec、/Qprec_div、/Qpc、

    /Qlong_double)........................................................................................................ A-5A.1.5 丸め制御オプション(/Qrcr、/Qrcd)....................................................................... A-6A.1.6 プロシージャー間の最適化とプロファイルに基づく最適化.................................... A-6

    A.1.6.1 プロシージャー間の最適化(IPO)............................................................ A-6A.1.6.2 プロファイルに基づく最適化(PGO)...................................................... A-6

    A.1.7 ベクトル化されたコードの自動生成........................................................................ A-7

    A.2 インテル® VTune™ パフォーマンス・アナライザー .......................................................... A-11A.2.1 サンプリング............................................................................................................ A-11

    A.2.1.1 一定時間ごとのサンプリング .................................................................... A-11A.2.1.2 イベントごとのサンプリング .................................................................... A-11A.2.1.3 ワークロードの特性評価 ........................................................................... A-12

    A.2.2 コールグラフ............................................................................................................ A-12A.2.3 カウンターモニター ................................................................................................. A-13

    A.3 インテル® パフォーマンス・ライブラリー......................................................................... A-13A.3.1 利点の概要 ............................................................................................................... A-14A.3.2 インテル® パフォーマンス・ライブラリーによる最適化........................................ A-14

    目 次 xv

  • A.4 インテル® スレッド化ツール .............................................................................................. A-15A.4.1 インテル® スレッド・チェッカー............................................................................ A-15A.4.2 インテル® スレッド・プロファイラー .................................................................... A-16A.4.3 インテル® スレッディング・ビルディング・ブロック .......................................... A-17

    A.5 インテル®クラスターツール .............................................................................................. A-17A.5.1 インテル® MPIライブラリー................................................................................... A-17A.5.2 インテル® トレース・アナライザー /コレクター ................................................... A-18A.5.3 インテル® MPIベンチマーク................................................................................... A-18A.5.4 利点の概要 ............................................................................................................... A-18

    A.5.4.1 ユーザビリティーにおける複数の強化点 .................................................. A-18A.5.4.2 アプリケーション・パフォーマンスの向上 .............................................. A-18A.5.4.3 相互運用性の拡大 ...................................................................................... A-18

    A.6 インテル® ソフトウェア・カレッジ ................................................................................... A-18

    付録 B パフォーマンス監視イベントの使用 B-1

    B.1 インテル® Xeon® プロセッサー 5500番台 ......................................................................... B-1

    B.2 インテル® Xeon® プロセッサー 5500番台のパフォーマンス分析手法.............................. B-3B.2.1 サイクル・アカウンティングとマイクロオペレーション(µOP)フローの分析 ... B-3

    B.2.1.1 サイクルのドリルダウンと分岐の予測ミス .............................................. B-5B.2.1.2 基本ブロックのドリルダウン .................................................................... B-9

    B.2.2 ストールサイクルの分解とコア・メモリー・アクセス ........................................... B-10B.2.2.1 マイクロアーキテクチャー条件のコストの測定 ....................................... B-10

    B.2.3 コア PMUの正確なイベント.................................................................................... B-12B.2.3.1 正確なメモリー・アクセス・イベント ..................................................... B-12B.2.3.2 ロード・レイテンシー・イベント............................................................. B-15B.2.3.3 正確な実行イベント .................................................................................. B-17B.2.3.4 最後の分岐レコード(LBR)...................................................................... B-19B.2.3.5 コア・メモリー・アクセス・レイテンシーの測定 ................................... B-22B.2.3.6 コア単位帯域幅の測定............................................................................... B-24B.2.3.7 キャッシュミスに関するその他の L1/L2イベント ................................... B-25B.2.3.8 TLBミス .................................................................................................... B-26B.2.3.9 L1データキャッシュ ................................................................................. B-26

    B.2.4 フロントエンドの監視イベント ............................................................................... B-27B.2.4.1 分岐の予測ミス ......................................................................................... B-27B.2.4.2 フロントエンドのコード生成指標............................................................. B-27

    B.2.5 アンコアのパフォーマンス監視イベント................................................................. B-28B.2.5.1 グローバルキューの占有 ........................................................................... B-29B.2.5.2 グローバル・キュー・ポート・イベント .................................................. B-31B.2.5.3 グローバル・キュー・スヌープ・イベント .............................................. B-32B.2.5.4 L3イベント ............................................................................................... B-32

    B.2.6 インテル® QuickPathインターコネクトのホームロジック(QHL)........................ B-33B.2.7 アンコアからの帯域幅の測定................................................................................... B-39

    B.3 インテル® マイクロアーキテクチャー Sandy Bridgeのパフォーマンス・チューニング手法 ................................................................................... B-40B.3.1 パフォーマンスのボトルネックとソース・ロケーションの関連付け ..................... B-40B.3.2 マイクロアーキテクチャーのパイプライン内のストールの特定............................. B-41

    xvi インテル® 64アーキテクチャーおよび IA-32アーキテクチャー最適化

  • B.3.3 バックエンドのストール.......................................................................................... B-42B.3.4 メモリー・サブシステムのストール........................................................................ B-44

    B.3.4.1 ロード・レイテンシーのアカウンティング .............................................. B-44B.3.4.2 キャッシュラインの置換の分析 ................................................................ B-47B.3.4.3 ロックの競合の分析 .................................................................................. B-48B.3.4.4 その他のメモリーアクセスの問題............................................................. B-49

    B.3.5 実行ストール............................................................................................................ B-52B.3.5.1 命令のレイテンシーが長くなる ................................................................ B-52B.3.5.2 アシスト .................................................................................................... B-53

    B.3.6 バッド・スペキュレーション................................................................................... B-54B.3.6.1 分岐予測ミス ............................................................................................. B-54

    B.3.7 フロントエンドのストール ...................................................................................... B-54B.3.7.1 マイクロオペレーション(µOP)の供給速度について ............................ B-54B.3.7.2 マイクロオペレーション(µOP)キューのソースについて ..................... B-56B.3.7.3 デコード済み命令キャッシュ .................................................................... B-58B.3.7.4 レガシー・デコード・パイプラインにおける問題 ................................... B-60B.3.7.5 命令キャッシュ ......................................................................................... B-60

    B.4 インテル® Core™ Soloプロセッサーとインテル® Core™ Duoプロセッサーのパフォーマンス・イベントの使用....................................................................................... B-61B.4.1 パフォーマンス・カウンターの結果について ......................................................... B-61B.4.2 比率の解釈 ............................................................................................................... B-62B.4.3 特定のイベントに関する注意事項 ........................................................................... B-62

    B.5 パフォーマンス分析のドリルダウン手法 ............................................................................ B-64B.5.1 発行ポートでのサイクル構成................................................................................... B-66B.5.2 アウトオブオーダー(OOO)実行のサイクル構成 ................................................. B-67B.5.3 パフォーマンス・ストールのドリルダウン ............................................................. B-68

    B.6 インテル® Core™ マイクロアーキテクチャーのイベント比率 .......................................... B-70B.6.1 Clocks Per Instructions Retired Ratio(CPI)(リタイアした命令あたりの

    クロック数の比率)................................................................................................... B-70B.6.2 フロントエンド比率 ................................................................................................. B-70

    B.6.2.1 コードの局所性 ......................................................................................... B-71B.6.2.2 分岐とフロントエンド............................................................................... B-71B.6.2.3 スタックポインター追跡機能 .................................................................... B-71B.6.2.4 マクロフュージョン .................................................................................. B-72B.6.2.5 レングス変更プリフィクス(LCP)のストール ....................................... B-72B.6.2.6 自己修正コードの検出............................................................................... B-72