この記事は、インテル® デベロッパー・ゾーンに掲載されている「Profiling Intel® Transactional Synchronization Extensions with Intel® VTune™ Amplifier XE」(http://software.intel.com/en-us/articles/profiling-intel-transactional-synchronization-extensions-with-intel-vtune-amplifier-xe) の日本語参考訳です。
インテル® トランザクショナル・シンクロナイゼーション・エクステンション (インテル® TSX) は、ハードウェア・トランザクショナル・メモリーをサポートし、ロックのパフォーマンスを向上できるように、スペキュレーティブ・エグゼキューション・モードを提供します。この記事では、インテル® TSX の概念には触れません。インテル® TSX については多数の文献が発表されているので、それらを参照してください。Roman Dementiev のブログ (http://software.intel.com/en-us/blogs/2013/06/07/web-resources-about-intelr-transactional-synchronization-extensions) に、インテル® TSX 関連のテクニカルリソースの一覧があります。また、『インテル® 64 アーキテクチャーおよび IA-32 アーキテクチャー最適化リファレンス・マニュアル』の参考訳の 12 章をご覧ください。
インテル® TSX は、スペキュレーティブ・ロックの実装を可能にします。実際の競合が検出されない限り、粗粒度のロックであっても、シリアル化されることはありません。競合はトランザクション・アボートを引き起こし、「フォールバック・パス」 (通常、従来のロックを使用する) が実行されます。優れたパフォーマンスとスケーラビリティーを得るためには、アボートの発生率を把握し、アボートのコストを最小限に抑えるべきです。
インテル® VTune™ Amplifier XE では、インテル® TSX アボートをプロファイルできるようになりました。アボートの数を取集し、その原因と正確なソースコード行を確認することができます。この記事では、トランザクション・アボートに関する情報の取得方法を説明します。インテル® VTune™ Amplifier XE の将来のアップデートでは、さらに機能が追加される可能性がありますが、その際は新しい記事で取り上げる予定です。
注: これは、試験的な機能です。正式リリースに含まれるかどうかはまだ未定です。将来の開発で解決される可能性のある制限事項もいくつかあります。詳細は、後述の「現時点の制限事項」を参照してください。
TSX Exploration プロファイルの実行
システム要件
- CPU: インテル® マイクロアーキテクチャー Haswell (開発コード名) ベースの第 4 世代インテル® Core™ プロセッサー (注: ロックされていない乗算器を搭載した CPU。i7-4770K、i5-4670K などの K バージョンはインテル® TSX をサポートしていません。)
- インテル® VTune™ Amplifier XE 2013 Update 14 以降
- OS: Windows* または Linux*
TSX Exploration プロファイルの実行
- この機能を有効にする環境変数を設定します。
$ export AMPLXE_EXPERIMENTAL=tsx
- インテル® VTune™ Amplifier XE のグラフィカル・ユーザー・インターフェイス (GUI) を起動します。プロジェクトを設定し、[New Analysis] ダイアログを表示して、[TSX Exploration] 解析タイプを選択します。
- 解析を開始します。
解析結果の理解
現在の TSX Exploration 解析では、次の情報が得られます。
– アプリケーションのトランザクション・アボートの合計数
– 関数、スレッド、ソースコード行、命令のトランザクション・アボートの数
– アボートの原因: 命令、データ競合、処理能力、ほか
– アボート・フォールバックの平均時間 (クロック数)
関数をダブルクリックすると、ソースまたはアセンブリーにドリルダウンできます。特定の原因によりアボートを引き起こした命令を見つけられます。インテル® TSX アボートイベントでは、命令が正確に検出されるため、「イベントスキッド」はありません。
現時点の制限事項
-
最も大きな制限事項は、アボートしたトランザクションのみカウントされることです。成功したトランザクションに関するデータは提供されません。そのため、トランザクション・アボートの比率を計算できません。成功した/アボートしたトランザクションの比率を得るためには、インテル® PCM ツールと Linux* perf ツールを利用してください。
-
アボートの原因は、スタックを含まない TSX Exploration 解析でのみ検出されます。[New Analysis] ウィンドウで [Collect stacks] チェックボックスをオンにすると (またはコマンドラインでこのオプションを有効にすると)、アボート数を収集しソースへドリルダウンすることはできますが、アボートの原因は報告されません。
まとめ
TSX Exploration 機能は試験段階にあり、いくつかの制限があります。ほかのツールからの情報でインテル® VTune™ Amplifier XE のデータを補完することで、これらの制限に対処することができます。TSX Exploration プロファイルは、アボートの原因、アボートを引き起こしたソースコード行、アボート処理の平均時間など、貴重な情報を提供します。ぜひ、インテル® VTune™ Amplifier XE のインテル® TSX プロファイルを試してください。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。