インテル® ソフトウェア開発ツールで始める

インテル® VTune™ Amplifier を使用した最適化

応用編

2019 年 4 月
iSUS 編集長
すがわら きよふみ本日の予定10:30 – 17:00• コードの現代化と最適化
10:30 – 11:00• 並列アプリケーションのスケーラビリティーの問題を特定 11:00 – 12:00
昼食• インテル® コンパイラーによる高度な最適化
13:00 – 14:00• インテル® VTune™ Amplifier 応用編
14:00 – 15:00
休憩• インテル® Advisor 応用編
15:15 – 16:15• インテル® Inspector 応用編
16:15 – 16:45• まとめと Q/A
16:45 – 17:00© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

2内容インテル® VTune™ Amplifier とは
 スケーラビリティーを損ねる原因
 まとめ

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

3

インテル® ソフトウェア開発ツール
25 年以上の歴史•

日本語版は 1995 年より提供•

インテル社から提供される最新のバージョンは、インテル® VTune™
Amplifier 2019 update3•

2011 年から日本語技術ポータルサ
イト iSUS (www.isus.jp) を運営中

iSUS ではインテル® Advisor 2018/2019、インテル® VTune™ Amplifier 2019 の日本語パッケージを提供中© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

4

インテル® VTune™ Amplifier パフォーマンス・プロファイラーによるアプリ
ケーション・パフォーマンスとスケーラビリティーの解析とチューニング
コードの最適化にかかる時間を短縮• C、C++、Fortran、Python*、Go*、Java* に加えて、これらの言語が混在したコードを正確にプロファイル• CPU、スレッド、メモリー、キャッシュ、ストレージほかを最適化• 時間を節約: 詳細な解析によりさらに詳しい情報が得られるバージョン 2019 の新機能 (一部のみ抜粋)• 拡張されたアプリケーション・パフォーマンス・スナップショット:
新しいデータ選択と一時停止/再開により有益なデータに注目(Linux*)• 物理コアの CPU 使用率を解析• サーバー/クラウド・アプリケーションの JIT プロファイルを向上

詳細: isus.jp/intel-vtune-amplifier-xe/• 改良されたユーザー・インターフェイスにより単純化されたプロファイル・ワークフローを提供© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

5

CPU 使用率とスレッドの並行性 (コンカレンシー) を解析
インテル® VTune™ Amplifier

スレッドの並行性の平均は?

CPU を効率良く使用できているか?

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

6

アイドル (待機) 時間が多い理由は?
インテル® VTune™ Amplifier
上位の同期ポイント

待機時間と呼び出し回数© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

7

スレッド化モデルの詳細な解析インテル® VTune™ Amplifier

OpenMP*
解析
アプリケーションのシリアル時間がスケーリングを妨げているか?

理想的な並列実行に対してアプリケーションはどれくらい効率的か？
インバランス/オーバーヘッドのチューニングへの投資からどれくらい潜在的なゲインを得られるか？

どの領域が投資に対してよりゲインがあるか ?
リンクをクリックしてグリッドビューでさらに詳しい情報を表示© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

88インテル® VTune™ Amplifier は、 パフォーマンス・プロファイラー
 パフォーマンス・アナライザー
 パフォーマンス可視化ツール

システム全体、またはアプリケーション・コードで実行時間を費やす場所を特定して、その原因を調査するためのデータを提供します
インテル® VTune™ Amplifier は、サンプラーを使用してパフォーマンス・データを収集します© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

9サンプリングの仕組み
1. ユーザーモード・サンプリング
データコレクターは、OS タイマーを使用してアプリケーション・プロセスに割り込みをかけ、10 ミリ秒のサンプリング間隔でアクティブな命令アドレスのサンプルを収集し、それぞれのサンプルの呼び出しシーケンス (スタック) を取得します

2. ハードウェア・イベントベース・サンプリング
インテル® VTune™ Amplifier は、プロセッサーに内蔵されるパフォーマンス・モニタリング・ユニット (PMU) のカウンター・オーバーフロー機能を使用して、アプリケーションをプロファイルします。オーバーヘッドは 1ms のサンプリング間隔でおよそ 2% です© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

10サンプリング・ドライバー
インテル® VTune™ Amplifier は、ハードウェア・イベントベース・サンプリングを行うためカーネルドライバーを使用します Windows* ターゲット: ドライバーが適切にインストールされていることを確認します。必要に応じてドライバーをインストールします Linux* ターゲット:
 ドライバーがインストールされていることを確認してください− 必要であればドライバーをビルドします− 必要であればドライバーをインストールします ドライバーの設定を確認します。
 Android* ターゲット: ドライバーがインストールされていることを確認してください。必要に応じてドライバーをビルドしてインストールしますドライバーを利用できない場合、Linux* Perf* ツールの機能を使用するドライバーを使用しないサンプリング・データ収集を有効化© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

11

インテル® VTune™ Amplifier update2 以降の新しい機能
システム・アナライザーによるリアルタイム・モニタリング
システム・アナライザーは、継続的なリアルタイム・モニタリングに加えて、基本パフォーマン
スとリソースの使用状況に関するデータのレポートを可能にします これは、インテル® VTune™ Amplifier 2019 Update 2 で追加されたプレビュー機能です ユーザーからのフィードバックに応じて、将来のアップデートやリリースで利便性や機能が改善されたり、あるいは削除される可能性があります

ホストLinux*、MacOS*
Windows*

ネットワーク接続

ターゲット
Linux*
Windows*

以下をリアルタイムに解析: CPU 使用率と周波数
 メモリー使用率 (Linux* ターゲットのみ) ネットワーク・スループット (Linux* ターゲットのみ)
 GPU 使用率とその他のグラフィックス・メトリック (インテル® グラフィックス・ドライバーがインストールされている場合)© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

12

システム・アナライザーの使い方
1. ターゲットでシステム・アナライザーを起動する
2. ホスト上で [System View] を設定する
3. 詳細な解析向けに異常を特定する
4. 異常を検出するようにインテル® VTune™ Amplifier を設定する
5. システム・アナライザーとインテル® VTune™ Amplifier を実行する[インテル® VTune™ Amplifier 2019 のインストール先]->¥VTune Amplifier 2019¥system_analyzer\
host\SystemAnalyzer (ホストで起動するアナライザー)
target\gpa_router (ターゲットで起動するクライアント)© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

13

接続を確立ターゲットで gpa_router を起動:

ホストで SystemAnalyzer を起動:

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

14

SystemAnalyzer の設定
ターゲットの IP アドレスを指定:

SystemView を選択:

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

15

モニターする項目を選択して表示

項目 (この例ではAggegated CPU Load%と CPU 00/01/02/04
Load%) がリアルタイムに更新されますインテル® VTune™ Amplifier とシステム・アナライザーを同時に実行して、インテル® VTune™ Amplifier の解析により詳細なパフォーマンス・メトリックを取得し、システム・アナライザーによりメトリックの表示をモニタリングしてインテル® VTune™ Amplifier のデータ収集を停止するタイミングを特定します© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

16

結果の互換性
上位バージョンのインテル® VTune™ Amplifier で収集したデータを下位バージョンで開くとエラーが発生することがありますインテル® VTune™ Amplifier 2019 update3 で収集したデータを同 update2 で開いた場合:© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

17

内容


インテル® VTune™ Amplifier とはスケーラビリティーを損ねる原因
 計算集約型のアプリケーションの例© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

18

アプリケーションのスケーラビリティーを妨げる要因
CPU でコードが効率良く実行されず、ほとんどのストールがメモリー依存であることが分かったら、問題の具体的な原因を明らかにする必要があります

メモリー・レイテンシー?
メモリー帯域幅
インテル® VTune™ Amplifier のメモリーアクセス
解析を使用して、メモリーの問題を詳しく調査© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

19

アプリケーショがメモリー集約型ではない場合
 フォルスシェアリング
 キャッシュライン分割
 非効率な命令

int sum[MAX_THREADS];など…
スレッド間のデータ競合を避けるため、明示的にスレッド固有のストレージを使用各スレッドは異なる領域を使用し、処理後に集計#pragma omp for simd private(x)for (i=0; i<num_steps; i++){x = (i+0.5)*step;sum[id] += 4.0/(1.0+x*x);}© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

20

スケールするか？
インテル® Core™ i7-9700K で実行

8 スレッドで実行

1 スレッドで実行© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

21

何が違う? : フォルスシェアが発生するバイナリー
マイクロアーキテクチャー全般解析

L1 のアクセスに時間を要している

メモリー更新のレイテンシーが高くフォルスシェアリングが観察されている

過度なメモリー依存© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

22

何が違う? : フォルスシェアが発生しないバイナリー
マイクロアーキテクチャー全般解析

フォルスシェアリ
ングは解消されて、ストア依存が減少

新たな問題 ?
メモリーへの依存性が減少© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

23

比較してみる© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

24

このサンプルの本質的な問題はシングル・プロセッサーでは検証できない© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

25

2 ソケットのインテル® Xeon® システムで実行インテル® Xeon® プロセッサー E5-2699 v4 (Broadwell-EX) 22 コア x 2

44 コア実行でのパフォー
マンスの差は 10倍以上
 8 スレッドでの結果はCore i7 9700K と同傾向

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

26

NUMA の影響は ?
set KMP_AFFINITY=scatter を使用して、8 つのスレッドを全コアに分散して実行

フォルスシェアリングが発生するバイナリーは大幅にパフォーマンスが低下© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

27

QPI の帯域幅を確認
フォルスシェアリング発生

フォルスシェアリング未発生© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

28

再確認 : KMP=AFFINITY=compact を使用

NUMA ノード 0 のみで実行されている© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

29

NUMA システムに向けての考察 フォルスシェアリングを解決する
 必要であればアフィニティーを制御する
 最適な命令セットを使用しているか© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

30

内容

インテル® VTune™ Amplifier とはスケーラビリティーを損ねる原因 計算集約型のアプリケーションの例
 フォルスシェアの頻度と影響© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

31

フォルスシェアリングの頻度とパフォーマンスへの影響
インテル® Core™ i7-9700K で実行
フォルスシェアリングは発生しているが頻度が少な
いためパフォーマンスへの影響はわずか …

#pragma omp forfor( int i = start; i <= end; i+=2 ){if( TestForPrime(i) )local_prime[thread_id] += 1;© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

32

NUMA 環境での結果 : 44 スレッド

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

33

NUMA 環境での結果 : 22 スレッド

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

34

Prime のパフォーマンス・データを収集
バックエンドのメモリー依存はパフォーマンス上の問題ではない フロントエンドに問題がある

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

35

Prime のパフォーマンス・データを収集
バックエンドのメモリー依存はパフォーマンス上の問題ではない フロントエンドに問題がある
 メモリーアクセスは少なく、QPI の帯域幅もそれほど使用していない
© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

36

インテル® Advisor 2019 で Prime の命令セットを調査ベクトル命令が生成されていません© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

37

コンパイル・オプションを確認
 コンパイル・オプションに/QaxAVX2 を追加

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

インテル® Advisor で命令セットを確認

38

再度確認
 フロントエンドへの依存性が大幅に低下:(45.74% -> 28.52%)

 しかし、さらに改善の余地はあります© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

39

内容


インテル® VTune™ Amplifier とはスケーラビリティーを損ねる原因
 計算集約型のアプリケーションの例
 フォルスシェアの頻度と影響 フォルスシェアの頻度が高い場合© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

40

フォルスシェアが発生するコードの命令セットを確認

 命令セットは SSE2
 ベクトル化されていないスカラーコード© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

41

命令セットの詳細を確認

ループのアンロールもベクトル化も行われていないスカラー命令セットを使用するため、sum[id] を更新するたびにロケーションをアクセス© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

42

ベクトル化と最適化で期待されること256 ビットで 4 つの倍精度データを演算し、ループを 4 回アンロールすれば、メモリーロケーションのアクセスは減らせないか ?

6.01 秒 －＞ 0.08 秒、およそ 75 倍 !!
© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

43

マイクロアーキテクチャー全般解析を再実行

バックエンドの依存率は高いが、大部分はコア !!

QPI のアクセスも減少© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

44

新しい命令セット© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

45

さらに別の環境では…
インテル® Core™ i7 7800X (コード名: Skylake-X)© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

46

内容
インテル® VTune™ Amplifier とは
 スケーラビリティーを損ねる原因
 まとめ

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

47

まとめ
 開発評価環境と実際の運用環境が異なる場合、利用できる命令セットやプラットフォームの構成の違いを最低限理解しましょう 最適化データの解析やプロファイルは、運用環境で行います 最新のインテル® コンパイラーと解析ツールを活用してください© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

48

オンラインのライブセミナー
iSUS では定期的にオンラインのライブセミナーを開催中です
https://www.isus.jp/products/psxe/webinar-2018/• 2018 年秋のシリーズ (録画も公開中)
日時 (日本時間)

タイトル

内容

対象レベル

インテル® VTune™ Amplifier 2019 によるアプリケーションのパ
11 月 26 日 (月) 11:00am – 12:00pm インテル® VTune™ Amplifier 2019 活用パート 2
フォーマンス解析例を使用して、ツールが表示する情報を理解する アプリケーションの最適化に注目する開発者向け。
方法を紹介します。
インテル® VTune™ Amplifier 2019 の一新されたユーザー・イン
11 月 9 日 (金) 11:00am – 12:00pm インテル® VTune™ Amplifier 2019 の新機能活用
アプリケーションの最適化に注目する開発者向け。
ターフェイスと関連する機能について説明します。
最新のインテル® アーキテクチャーとその開発環境につ現代のニーズに応えるためにインテルが拡張している最新ハード
インテルの最新プロセッサーとソフトウェア開発製品のアッいて知りたい方、インテル® アーキテクチャーやインテ
11 月 1 日 (木) 10:05am – 11:00am
技術と製品、およびそれらをサポートするためのソフトウェア開発
プデート
ルの展開する最新製品を用いた機器のパフォーマンス用のツールについてご説明します。
向上のための情報に関心のある方向け。
インテル® Advisor 2019 の新機能を使用した整数/浮動小数点演
アプリケーションのベクトル化効率とメモリーアクセス
10 月 19 日 (金) 1:00pm – 2:00pm
インテル® Advisor 2019 の新機能の活用算を行うアプリケーションの解析とキャッシュを考慮したメモリーの最適化に注目する開発者向け。
アクセスの解析方法を紹介します。
インテル® C/C++ および Fortran コンパイラーの OpenMP* インテル® コンパイラー・バージョン 19.0 でサポートされる
OpenMP を使用して C/C++ または Fortran で開発を
10 月 12 日 (金) 1:00pm – 2:00pm
機能レビュー Part 2
OpenMP* 5.0 の機能を確認します。
行う開発者向け。
®
®
インテル C/C++ および Fortran コンパイラーの OpenMP* インテル コンパイラー・バージョン 19.0 でサポートされる
OpenMP を使用して C/C++ または Fortran で開発を
9 月 28 日 (金) 1:00pm – 2:00pm
機能レビュー Part 1
OpenMP* 5.0 の機能を確認します。
行う開発者向け。
9 月 22 日 (土) 9:00am – 10:00am

iSUS が独自に開発したインテル® Advisor 2018 の日本語版コン インテル® Advisor 2018 を導入済みの開発者、またはインテル® Advisor 2018 日本語版の紹介と 2019 の新機能 ポーネントの導入方法とインテル® Advisor の概要、およびインテル ベクトル化やスレッド化向けに支援ツールを検討され® Advisor の今後の日本語版開発の動向をお知らせします。ている開発者向け。

9 月 14 日 (金) 9:30am – 10:30am

今後発売される予定の「インテル® Parallel Studio XE」製品の次期 すでにインテル® ソフトウェア開発製品を導入されていインテル® Parallel Studio XE 製品の次期バージョンの案内 バージョンを、インテル Parallel Studio XE 2019 ベータ版の新機 る開発者向けに、新バージョンの新機能や改善点を紹能を参考にご紹介します。
介します。

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

49

インテル® ソフトウェア開発ツール
日本語版パッケージを提供中

 インテル® Advisor 2018 update 1,2,3
 インテル® Advisor 2019 Initial, update 1,2
https://www.isus.jp/products/advisor/advisor_jp/
 インテル® VTune™ Amplifier 2019 Initial, update 1, 2
https://www.isus.jp/products/vtune/vtune_jp/
インテル® 64 アーキテクチャーおよび IA-32 アーキテクチャー最適化リファレンス・
マニュアル (参考訳最新 040 版)
公開中のインテル® Parallel Universe マガジン日本語版© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

50

参考資料
インテル® VTune™ Amplifier 2019 の新機能
https://www.isus.jp/products/vtune/vtune-2019-overview/
インテル® Advisor 2019 の新機能
https://www.isus.jp/products/advisor/advisor-2019-overview/© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

51