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

インテル® Advisor を使用した最適化

応用編

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

内容
インテル® Advisor とは ?
 インテル® Advisor 2019 の有効な機能
 インテル® Advisor 2019 の利用例
 まとめ
© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

3

インテル® Advisor によるコードの現代化
ベクトル化の最適化、スレッドのプロトタイプ生成、フローグラフの作成と解析

パフォーマンスの良い現代化されたコード

新しいハードウェア世代ごとにパフォーマンスが向上

109 2 項オプション SP/秒
(数値が大きいほど高性能)

200

ベクトル化
とスレッド化'自動' ベクトル化では不十分
多くの場合は明示的なプラグマと最適化が必要

150

機能

130 倍
スレッド化

• ベクトル化とその最適化• メモリーパターン解析• 迅速なスレッドのプロトタイプ生成

ベクトル化
シリアル

バージョン 2019 の新機能 (一部のみ抜粋)

100
50
0

2010

2012

2013

2014

2016

• ベクトル化 (インテル® AVX-512/インテル® AVX2を使用)
• 効率良いメモリーアクセス• スレッド化

2017

インテル® Xeon® インテル® Xeon® インテル® Xeon® インテル® Xeon® インテル® Xeon® インテル® Xeon®
プロセッサープロセッサープロセッサープロセッサープロセッサー
Platinum 81xx
X5680
E5-2600
E5-2600 v2
E5-2600 v3
E5-2600 v4
プロセッサー
開発コード名製品ファミリー
製品ファミリー
製品ファミリー
製品ファミリー
開発コード名Westmere
開発コード名
開発コード名
開発コード名
開発コード名Skylake Server
Sandy Bridge
Ivy Bridge
Haswell
Broadwell• 階層ルーフライン解析を拡張• 共有可能な HTML ルーフライン• フローグラフ解析

ベンチマーク: 2 項オプション価格モデルhttps://software.intel.com/en-us/articles/binomial-options-pricing-model-code-for-intel-xeon-phi-coprocessor (英語)。
パフォーマンス結果は 2017 年 8 月時点のテスト結果に基づいたものであり、公開されている利用可能なすべてのセキュリティー・アップデートが適用されていない可能性があります。詳細については、構成の開示を参照してください。絶対的なセキュリティーを提供できる製品はありません。性能やベンチマーク結果について、さらに詳しい情報をお知りになりたい場合は、http://www.intel.com/benchmarks/ (英語) を参照してください。2010 - 2017 のシステム構成については、補足資料の「ベクトル化およびスレッド化する
か、パフォーマンスを諦めるか」にあるベンチマークを参照してください。2017 年 8 月時点のインテルによるテスト。

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

詳細: isus.jp/intel-advisor-xe/
4‘自動’ ベクトル化では不十分

優れたコンパイラーはベクトル化の最適化によりさらなる利点を得ることができる — インテル® Advisor

コンパイラーは常にベクトル化するとは限らない•

インテル® Advisor でループ伝播の依存性を確認•

依存性がない場合はベクトル化を強制し、プラグマ simd(C++)、SIMD ディレクティブ (Fortran) を使用

すべてのベクトル化が効率的であるわけではない•

ストライド 1 のほうがストライド 2 以上よりもキャッシュ効率が良い - インテル® Advisor を使用して解析•

SIMD Data Layout Templates (英語) を利用してデータ
レイアウトの変更を検討© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

これまでに紹介したベンチマークはすべて ‘自動ベクトル化’ ではない。
ベクトル化を強制し、さらなるパフォー
マンスを引き出すため、コンパイラー・
ディレクティブを使用している

構造体配列はデータを直感的に整理するのには適しているが、配列構造体よりも効率が悪いため、
SIMD Data Layout Templates(英語) を利用してベクトル化に適した効率良いレイアウトに
データをマップする

5ブレークスルーのベクトル化パフォーマンスを実現
インテル® Advisor — ベクトル化アドバイザー

素早くベクトル化を最適化
•
•
•
•
•

最も大きな利点が得られる個所をベクトル化
ベクトル化を妨げているものを素早く特定
効率良いベクトル化のためのヒント
安全にコンパイラーによるベクトル化を強制
メモリーストライドを最適化必要なデータとガイダンス
•

•
•
•

コンパイラー診断 + パフォーマンス・データ +SIMD 効率問題の検出と修正に関する推奨事項
ループ伝播の依存性解析
メモリー・アクセス・パターン解析

インテル® AVX-512 対応ハードウェアの有無に関係なくインテル® AVX-512 向けに最適化© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

6

効率的な最適化手法の発見

インテル® Advisor — キャッシュを考慮したルーフライン解析

ルーフライン・パフォーマンスの詳細な情報• パフォーマンスの悪いループをハイライト• 各ループの「最大」パフォーマンスを表示− 最適化可能なループ− 最適化する価値のあるループ• ボトルネックの原因の可能性を表示• 次の最適化ステップを提案「インテル® Advisor の新しい “統合ルーフライン” は素晴らしい機能です。メモリー転送の最適化とベクトル化という重要で難しい課題に、ステップ・バイ・ステップのアプローチで対処できるのです。」

Onera (フランス国立航空宇宙研究所)
ソフトウェア・アーキテクト、Nicolas Alferez 氏© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

7

設計、チューニング、デバッグ、実装

インテル® Advisor のスレッドのプロトタイプ生成 — 開発を妨げることなく設計可能問題••

アプリケーションをスレッド化してもパフォーマンスがそれほど向上しない"スケーラビリティーの限界" に達したのか?
同期問題によりリリースを延期

•
•
•
•

複数の選択肢のプロトタイプを迅速に生成
大規模なシステムにおけるスケーリングを予測
スレッド化する前に同期問題を発見
開発を妨げることなく設計可能•

データに基づくスレッド設計

より少ない労力とリスクで、より大きな効果が得られる並列処理を実装© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

「インテル® Advisor により、並列化候補のプロトタイプを素早く生成し、開発者の時間と労力を節約することができました。」
Sandia National Laboratories
シニア・テクニカル・スタッフ
Simon Hammond 氏
8並列処理を視覚化 — アルゴリズムをインタラクティブにビルド、検証、解析
インテル® Advisor — フローグラフ・アナライザー (FGA)

コードスタブを視覚的に生成

並列 C++ プログラムを生成

アルゴリズムのノードやエッジをクリックしてズームし、並列データとプログラムフローを理解

ロードバランス、コンカレンシー、その他の並列特性を解析し、プログラムを細かくチューニング

インテル® TBB または OpenMP* 5 (ドラフト) OMPTAPI を使用
https://www.isus.jp/products/advisor/taskgraph_webinar/© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

9

お詫び

Windows* 環境向け

最近インテル® Advisor 2019 Initial、Update1、Update2、および Update3 の動作がおかしい (サーベイレポート以外の機能が正しく動作しない) ので調べていたところ、以下の制限が Update3 のリリースノートに追加されていました。これはインテル®
Advisor 2019 for Windows* のすべてのバージョンに適用されます
COLLECTIONS OTHER THAN SURVEY ARE UNAVAILABLE ON WINDOWS* 10 VERSION 1809
Advisor supports only the Survey collection on Windows 10 Version 1809 (October 2018
Update). Any other collection type will fail. Work is in progress to remove this limitation.

Windows® 10 バージョン 1809 のどの時点で利用不能になったかは不明ですが、すべてのビルドで利用できないわけではないようです。iSUS では、Windows® 10 バー
ジョン 1809 ビルド17763.348 以降で利用できなくなったことを確認しています。
Windows® 10 バージョン 1803 では、この問題は発生しません© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

10

内容
インテル® Advisor とは ?
 インテル® Advisor 2019 の有効な機能
 インテル® Advisor 2019 の利用例
 まとめ
© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

11

インテル® Advisor も最も有効な機能
1. バイナリーで使用されている命令セットを容易に解析できます2. ベクトル化に関連する情報を取得できます
3. 最適化の目標値とパフォーマンス向上を推測できます© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

12

バイナリーで使用されている命令セットを解析
1. インテル® Advisor を使用してバイナリーを実行します
2. ソースコードやビルド情報がなくともバイナリーを解析できます
バイナリーに含まれる命令セット
は SSE、AVX、AVX2 です しかし、ベクトル化されておらずス
カラーコードが実行されています

バイナリーのベクトル化を改善する方法を調査、検討できます© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

13

ベクトル化に関連する情報を取得できます
デバッグ情報とソースが参照できれば ベクトル化の対象となるソースコード内のループ それぞれ使用されている命令セット
 ベクトル化できない理由 パフォーマンス上の問題

これらの情報をもとに最適化の準
備を始めましょうなどを知ることができます© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

14

最適化の目標値とパフォーマンス向上を推測できます
バイナリーが実行するプラットフォームのメモリー階層および演算リソースをどの程度効率良く利用しているか解析できます パフォーマンス向上によるゲインを推測できます

バイナリーはメモリーア
クセスの制限を受けており、最適化の可能性があります© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

15

バイナリーのコンパイルオプションは ?
Linux* では –sox オプションを使用して、バイナリーにコンパイルオプションとバー
ジョン情報を保存できます:$ icc / icpc –sox src.c
Windows* / Linux* / macOS* では、/Qopt-report:3 (-qopt-report=3) オプショ
ン以上を使用して最適化レポートにコンパイルオプションを含めることができます:$ icl /Qopt-report:3 src.c (-qopt-report=3)
インテル(R) Advisor はベクトル化を支援するため、ソースコードで最適化
レポートメッセージを表示します。
詳細は、"https://software.intel.com/en-us/intel-advisor-xe" を参照してください。
インテル(R) 64 対応インテル(R) C++ コンパイラー (インテル(R) 64 対応アプリケーション用) バージョン 19.0.4.219 ビルド
20190328
コンパイラー・オプション: /Qopt-report3© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

16

内容
インテル® Advisor とは ?
 インテル® Advisor 2019 の有効な機能
 インテル® Advisor 2019 の利用例


−
−

−
−



ステップ 1: 命令セットとベクトル化の確認
ステップ 2: 最適化の目標を確認
コンパイルオプションの決定
上位命令セットを使用
ステップ 3: 問題点の洗い出し
ステップ 4: 実装の検討

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

17

インテル® Advisor 2019 の利用例
最適化オプションによるパフォーマンスの違いをインテル® Advisor 2019 で調査
最適化オプション

実行時間

デフォルト

35.09 秒

/Qopenmp-simd-

4.89 秒/Zi

157.32 秒/O2 /Zi

35.14 秒

/O2 /Zi /Qopenmp-simd-

4.75 秒/O2 /Zi /QxCORE-AVX2

19.42 秒

/O2 /Zi /QxCORE-AVX2 /Qopenmp-simd-

4.57 秒/O3 /Zi /QxCORE-AVX2 /Qopenmp-simd-

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

18

ステップ 1: 命令セットとベクトル化の確認
デバッグ情報を利用できないバイナリーの情報は限定されます[サマリーウィンドウ] では次がわかります: 経過時間、命令セット、スレッド数
 合計 CPU 時間、ループで費やされた時間
 ベクトルコード / スカラーコードの実行時間
以下は明確ではありません: ベクトルおよびスカラーループの場所© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

19

ステップ 1: 命令セットとベクトル化の確認
デバッグ情報を利用できないバイナリーの情報は限定されます[サマリーウィンドウ] では次がわかります: 経過時間、命令セット、スレッド数
 合計 CPU 時間、ループで費やされた時間
 ベクトルコード / スカラーコードの実行時間
以下は明確ではありません: ベクトルおよびスカラーループの場所[サーベイウィンドウ] も同様© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

20

ステップ 1: 命令セットとベクトル化の確認
デバッグ情報が利用できるバイナリーでは詳細がわかります© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

21

ステップ 2: 最適化の目標を確認
インテル® Advisor のループライン・レポート



上位の命令セットを使用する
リソース (メモリー/キャッシュ/実行ユニット) の利用効率を改善する© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

22

ステップ 2: コンパイルオプションの決定
バイナリーがデバッグ情報を持っていなければ適切なコンパイルオプションを使用してデバッグ情報を生成します:/Zi、/ZI、/Z7、/DEBUG など (Windows*)-g (Linux*)

デバッグ情報を生成すると一部の最適化が無効になるため、新たにオーバーライドします:インテル® C++/Fortran コンパイラーのデフォルトは /O2

インテル® コンパイラーのその他の最適化のデフォルト:

SSE2 命令セットを使用#pragma omp simd (!$ omp simd) の有効化
© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

23

ステップ 2: 上位の命令セットを使用/QxSSE3、/QxSSSE3、/QxSSE4.1、/QxSSE4.2 を指定/QxAVX、/QxAVX2 を指定
ソースの演算で上位命令セットが利用できる可能性があり、下位の命令セットが利用されている場合推奨を提示します 適切な命令セットが使用される場合推奨は提示されません© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

24

インテル® AVX512 命令セットが利用可能な場合
インテル® AVX2 までの命令セットが利用されています 実行環境ではインテル® AVX512 命令
セットが利用可能であるため、オプションが提示されています [サーベイウィンドウ] を確認すると、インテル® AVX2 の FMA 命令が活用されていることが分かります© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

25

インテル® AVX512 命令セットを利用
インテル® AVX512 までの命令セットが利用されています 命令セットオプションの推奨はありません [サーベイウィンドウ] を確認すると、インテル® AVX512 の FMA 命令が活用されていることが分かります© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

26

内容
インテル® Advisor とは ?
 インテル® Advisor 2019 の有効な機能
 インテル® Advisor 2019 の利用例


−
−

−

−



ステップ 1: 命令セットとベクトル化の確認
ステップ 2: 最適化の目標を確認
コンパイルオプションの決定
上位命令セットを使用

ステップ 3: 問題点の洗い出し
omp simd の影響
メモリーアクセスステップ 4: 実装の検討

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

27

ステップ 3: 問題点の洗い出し
omp simd の影響#pragma omp simdfor(j=0; j<p; j++)for(k=0; k<n; k++)for(i=0; i<m; i++)c[i][j] = c[i][j] + a[i][k] * b[k][j];このソースコードに omp simd プラグマ/ディレクティブを適用すると、コンパイ
ラーのループ変換を妨げ、以下をコンパイラーに強要します: 配列 a、b、c にはエイリアシングがない 外部ループをベクトル化しても安全 コンパイラーがパフォーマンス上の利点が無いことを検出しても無視させる© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

28

#pragma omp simd なしのコード#pragma omp simd ありのコード#pragma omp simdfor(j=0; j<p; j++)for(k=0; k<n; k++)for(i=0; i<m; i++)c[i][j] = c[i][j] + a[i][k] * b[k][j];インテル® C++ コンパイラーの V19以降では、デフォルトで #pragma
simd を有効にします© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

29

#pragma omp simd なしのコード#pragma omp simd を無効化

#pragma omp simdfor(j=0; j<p; j++)for(k=0; k<n; k++)for(i=0; i<m; i++)c[i][j] = c[i][j] + a[i][k] * b[k][j];/Qopenmp-simd[-qno-openmp-simd] オプションで#pragma omp simd を無効化します© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

30

ステップ 3: 問題点の洗い出し
omp simd の影響 – インテル® Advisor で確認© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

31

ステップ 3: 問題点の洗い出し
omp simd の影響 - 最適化レポートで確認
ループの開始 C:¥matji.c(28,6)
リマーク #15389: ベクトル化のサポート: 参照 b[k][j] にアラインされていないアクセスが含まれています。 [ C:¥matji.c(31,41) ]リマーク #15389: ベクトル化のサポート: 参照 c[i][j] にアラインされていないアクセスが含まれています。 [ C:¥matji.c(31,11) ]リマーク #15389: ベクトル化のサポート: 参照 c[i][j] にアラインされていないアクセスが含まれています。 [ C:¥matji.c(31,21) ]リマーク #15381: ベクトル化のサポート: ループ本体内でアラインされていないアクセスが使用されました。
リマーク #15305: ベクトル化のサポート: ベクトル長 4
リマーク #15309: ベクトル化のサポート: 正規化されたベクトル化のオーバーヘッド 0.485
リマーク #15301: OpenMP* SIMD ループ がベクトル化されました。
リマーク #15450: マスクなし非アライン・ユニット・ストライド・ロード: 2
リマーク #15451: マスクなし非アライン・ユニット・ストライド・ストア: 1
リマーク #15475: --- ベクトルのコストサマリー開始 --リマーク #15476: スカラーのコスト: 30
リマーク #15477: ベクトルのコスト: 8.250
リマーク #15478: スピードアップの期待値: 3.630
リマーク #15488: --- ベクトルのコストサマリー終了 --リマーク #25015: ループの最大トリップカウントの予測=512

ループの入れ子はベクトル化されています

ループの開始 C:¥matji.c(29,9)
リマーク #25460: ループの最適化はレポートされませんでした。
リマーク #25015: ループの最大トリップカウントの予測=2048
ループの開始 C:¥matji.c(30,8)
リマーク #25460: ループの最適化はレポートされませんでした。
リマーク #25015: ループの最大トリップカウントの予測=2048
ループの終了
ループの終了
ループの終了ループ変換は行われていません© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

32

ステップ 3: 問題点の洗い出し
omp simd の影響 – omp simd を無効化
ループの開始 C:¥matji.c(30,8)
リマーク #25444: ループの入れ子の交換: ( 1 2 3 ) --> ( 3 2 1 )リマーク #15542: ループ はベクトル化されませんでした: 内部ループがすでにベクトル化されています。 [ C:¥matji.c(30,8) ]リマーク #25015: ループの最大トリップカウントの予測=2048

ループの開始 C:\matji.c(29,9)
リマーク #15542: ループ はベクトル化されませんでした: 内部ループがすでにベクトル化されています。
リマーク #25015: ループの最大トリップカウントの予測=2048
ループの開始 C:¥matji.c(28,6)
リマーク #15388: ベクトル化のサポート: 参照 c[i][j] にアラインされたアクセスが含まれています。 [ C:¥matji.c(31,11) ]リマーク #15388: ベクトル化のサポート: 参照 c[i][j] にアラインされたアクセスが含まれています。 [ C:¥matji.c(31,21) ]リマーク #15388: ベクトル化のサポート: 参照 b[k][j] にアラインされたアクセスが含まれています。 [ C:¥matji.c(31,41) ]リマーク #15305: ベクトル化のサポート: ベクトル長 2
リマーク #15399: ベクトル化のサポート: アンロールファクターが 4 に設定されます。
リマーク #15309: ベクトル化のサポート: 正規化されたベクトル化のオーバーヘッド 0.063
リマーク #15301: 変換されたループ がベクトル化されました。
リマーク #15448: マスクなしアライン・ユニット・ストライド・ロード: 2
リマーク #15449: マスクなしアライン・ユニット・ストライド・ストア: 1
リマーク #15475: --- ベクトルのコストサマリー開始 --リマーク #15476: スカラーのコスト: 9
リマーク #15477: ベクトルのコスト: 4.000
リマーク #15478: スピードアップの期待値: 2.240
リマーク #15488: --- ベクトルのコストサマリー終了 --リマーク #25015: ループの最大トリップカウントの予測=256
ループの終了/Qopenmp-simd- オプションで
omp simd を無効化

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

33

ステップ 3: 問題点の洗い出し
omp simd の影響 – omp simd 無効化の効果を確認
omp simd が有効

omp simd を無効化

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

34

ステップ 3: 問題点の洗い出し
omp simd の影響 – omp simd 無効化の効果を確認© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

35

ステップ 3: 問題点の洗い出し
omp simd でパフォーマンスが向上しない原因 (メモリーアクセス解析)#pragma omp simd28
for(j=0; j<p; j++)29
for(k=0; k<n; k++)30
for(i=0; i<m; i++)31c[i][j] = c[i][j] + a[i][k] * b[k][j];© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

36

ステップ 3: 問題点の洗い出し
omp simd でパフォーマンスが向上しない原因 (メモリーアクセス解析)

一部の配列アクセスが完全に非ユニットストライドです
データはキャッシュに収まり切れません
インテル® Core™ i7 5820K (L3 – 2.5M x 6 = 15M)
© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

37

ステップ 4: 実装の検討

最適化オプション
デフォルト

35.09 秒

1. omp simd の無効化
2. 上位命令セットの利用
3. 最適化オプションの再検討/O2 /Zi /Qopenmp-simd-

4.75 秒/O2 /Zi /QxCORE-AVX2 /Qopenmp-simd-

4.57 秒/O3 /Zi /QxCORE-AVX2 /Qopenmp-simd-

0.90 秒

omp simd が有効

実行時間

omp simd を無効化

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

38

ステップ 4: 実装の検討
上位命令セットの利用
SSE2 命令を使用

AVX2 命令を使用

ベクトルレジスター幅が、128 ビットから 256 ビットになったため効率が倍に© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

39

ステップ 4: 実装の検討
高度な最適化
/O2 /QxCORE-AVX2

/O3 /QxCORE-AVX2

O3 で適用された最適化により、ベクトルループの実行時間が 1/5 以下に© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

40

ステップ 4: 実装の検討
高度な最適化
上位命令セットの利用に加え:− ループのアンロールとジャム− ループ交換 (ブロック化)などさらに最適化が行われています© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

41

目標の達成を確認
最適化前:
パフォーマンス 0.46 GFLOPS
L1 演算強度 0.11 FLOP/バイト
セルフ経過時間 37.556 秒
セルフ GB/秒 4.117

最適化後:
パフォーマンス 20.53 GFLOPS
L1 演算強度 0.24 FLOP/バイト
セルフ経過時間 0.837 秒
セルフ GB/秒 87.2585© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

42

目標の達成を確認
最適化前:
パフォーマンス 0.1GFLOPS
L1 演算強度 0.031 FLOP/バイト
セルフ経過時間 20.978 秒
セルフ GB/秒 3.2762

最適化後:
パフォーマンス 20.53 GFLOPS
L1 演算強度 0.24 FLOP/バイト
セルフ経過時間 0.837 秒
セルフ GB/秒 87.2585© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

43

ステップ 4: 実装の検討
インテル® MKL の活用
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, m, p, n, 1.0,&a[0][0], n, &b[0][0], p, 1.0, &c[0][0], p);© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

44

ステップ 4: インテル® MKL の実装を確認「インテル® MKL ループと関数を解析」
オプションを選択します© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

45

内容
インテル® Advisor とは ?
 インテル® Advisor 2019 の有効な機能
 インテル® Advisor 2019 の利用例
 まとめ
© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

46

まとめ
 インテル® Advisor 2019 を使用して、最適化の検証、目標値の理解、改善によるゲインの確認を容易に行えます インテル® Advisor 2019 が最適化の作業効率を大幅に改善します© 2019 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

47

オンラインのライブセミナー
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 *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

48

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

 インテル® 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 *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

49

参考資料
インテル® 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 *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

50