® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor...

71
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。 * その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。 コンパイラーの最適化に関する詳細は、最適化に関する注意事項 を参照してください。 インテル ® Advisor のルーフライン モデル 使用 してアプリケーションの パフォーマンスを める ベクトル化のプロファイルと改善

Transcript of ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor...

Page 1: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

インテル® Advisor のルーフライン・モデルを使用してアプリケーションのパフォーマンスを高めるベクトル化のプロファイルと改善

Page 2: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

内容

インテル® Advisor とベクトル化が重要な理由

インテル® Advisor のルーフライン・モデル

依存性の解析

メモリー・アクセス・パターンの解析

新機能

2

Page 3: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

インテル® Advisor

Page 4: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 4

参考文献ルーフライン・モデルは、ローレンス・バークレー国立研究所の Samuel Williams 氏、カリフォルニア大学バークレイ校の Andrew Waterman 氏、および David Patterson 氏らによって提案されたものです。https://www2.eecs.berkeley.edu/Pubs/TechRpts/2008/EECS-2008-134.pdf (英語)

“Cache-aware Roofline model: Upgrading the loft (キャッシュを意識したルーフライン・モデル: loft のアップグレード)” (Ilic, Pratas, Sousa, INESC-ID/IST, The University of Lisbon) http://www.inesc-id.pt/ficheiros/publicacoes/9068.pdf (英語)

インテル:Roman Belenov、Zakhar Matveev、Julia Fedorova らのSSG 製品チーム、Hugh Caffey、Philippe Thierry との協業

Page 5: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

アムダールの法則

𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆 = 11−𝑝𝑝 + 𝑝𝑝

𝑠𝑠

S = スピードアップ P = スレッド化の利点を得る実行時間の割合

5

Page 6: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

アムダールの法則

2 倍のスピードアップ

2 倍には達しないスピードアップ

6

Page 7: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

インテル® Xeon® プロセッサー

64 ビット

インテル® Xeon® プロセッサー5100 番台

インテル® Xeon® プロセッサー5500 番台

インテル® Xeon® プロセッサー5600 番台

インテル® Xeon® プロセッサー開発コード名

Sandy Bridge EP

インテル® Xeon® プロセッサー開発コード名Ivy Bridge EP

インテル® Xeon® プロセッサー開発コード名Haswell EP

コア 1 2 4 6 8 12 18

スレッド 2 2 8 12 16 24 36

SIMD 幅 128 128 128 128 256 256 256

インテル® Xeon Phi™コプロセッサー開発コード名

Knights Corner

インテル® Xeon Phi™ プロセッサーとコプロセッサー開発コード名

Knights Landing

61 72

244 288

512 512

* ark.intel.com (英語) で公開されている出荷済みの製品仕様

ハイパフォーマンス・ソフトウェアは両方を活用する必要があります: 並列性 (マルチスレッド、マルチプロセス) ベクトル化

ソフトウェアに対するハードウェアの影響コア数、スレッド数、ベクトル幅

7

プレゼンター
プレゼンテーションのノート
新しいハードウェアは、より多くのコアおよびスレッド、より幅広いベクトルをサポート最高のパフォーマンスを得るには、並列化とベクトル化の両方を活用しなければいけません。
Page 8: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

単一のベクトルレーンを使用しない!ベクトル化およびスレッド化されていないソフトウェアは、パフォーマンスを得られません

8

プレゼンター
プレゼンテーションのノート
単一のベクトルレーンを使用するアプリケーションはパフォーマンスを得られません
Page 9: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

Single Instruction Multiple Data (SIMD)

for(i = 0; i <= MAX; i++)c[i] = a[i] + b[i];

+

a[i]

b[i]

c[i]

+

a[i+7] a[i+6] a[i+5] a[i+4] a[i+3] a[i+2] a[i+1] a[i]

b[i+7] b[i+6] b[i+5] b[i+4] b[i+3] b[i+2] b[i+1] b[i]

c[i+7] c[i+6] c[i+5] c[i+4] c[i+3] c[i+2] c[i+1] c[i]

9

for(i = 0; i <= MAX; i+8)

c[i:8] = a[i:8] + b[i:8];

9

プレゼンター
プレゼンテーションのノート
[スクリプト] SIMD 機能の用法は、それらを利用できるコードを作成することで達成されます。これは 「ベクトル化」 と呼ばれます。抽象化レイヤー (プログラミング言語/アセンブリー) とベクトル化に対する意識に応じて、異なる方法が取られます: プログラマーは、手動でベクトル化可能なノードを明示的に記述できます (アセンブリーやプログラミング言語拡張を使用して)。 または、コンパイラーにベクトル化を指示します (手動によるソリューションよりもできることが制限されます)。 例は後者のケースを示しています: 標準 C/C++ のループでは、コンパイラーは SIMD を使用して (常に使用することは保証されない)、この加算をベクトル化できます。 [その他]: コンパイラーによる自動ベクトル化: コンパイラーのヒューリスティックによるため、保証はありません。 インテル® Cilk™ Plus の配列表記と SIMD 対応関数を使用する 注意: �ベクトル長 8 は、可能性を高める好例です。
Page 10: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化に関連する用語

+

a[i+7] a[i+6] a[i+5] a[i+4] a[i+3] a[i+2] a[i+1] a[i]

b[i+7] b[i+6] b[i+5] b[i+4] b[i+3] b[i+2] b[i+1] b[i]

c[i+7] c[i+6] c[i+5] c[i+4] c[i+3] c[i+2] c[i+1] c[i]

10

ベクトルレーン

ベクトル長 (VL): ベクトル要素

ベクトルのすべての要素は同じデータ型

10

プレゼンター
プレゼンテーションのノート
[スクリプト]
Page 11: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ループのベクトル化

for(i = 0; i < MAX; i++) A[i] = B[i] + C[i];

// ベクトル化されたループ本体for(i = 0; i < MAX; i+=VL)

A[i:VL] = B[i:VL] + C[i:VL];

// リマインダーループfor(i = i-VL; i < MAX; i++)

A[i] += B[i] + C[i];

11

プレゼンター
プレゼンテーションのノート
各種ループがどのようにベクトル化されるか考えてみましょう
Page 12: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 12

インテル® プロセッサーの SIMD の進化

時間

目的: 4 世代で 8x ピーク FLOPs (FMA)

第 2 世代インテル® Core™ プロセッサーインテル® AVX (256 ビット): • 2x FP スループット• 2x ロード・スループット

パフォーマンス

/コア

第 3 世代インテル® Core™ プロセッサー• half-float 型変換• 乱数生成

第 4 世代インテル® Core™ プロセッサーインテル® AVX (256 ビット)• 2x FMA ピーク• ギャザー命令

現在と将来:インテル® MIC アーキテクチャー、インテル® AVX-512:• 512 ビットベクトル• 2x FP/ロード/FMA

1999 年以降: 128 ビット・ベクトル 2010 2012 2013

現在と将来

プレゼンター
プレゼンテーションのノート
[スクリプト] インテル® プロセッサーのパフォーマンスの要素の 1 つでありインテル® マイクロアーキテクチャーの一部として拡張されます。インテル® AVX の導入はパフォーマンスを劇的に向上されました (理論的には 2 倍のスループット)。同様に今後の拡張はパフォーマンスをさらに高めます。
Page 13: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

図Xi、Yi および結果は、32 ビット整数

13

インテル® アーキテクチャー I 向けの SIMD 型

X2

Y2

X2◦Y2

X1

Y1

X1◦Y2

063

X2

Y2

X2◦Y2

X1

Y1

X1◦Y2

X4

Y4

X4◦Y4

X3

Y3

X3◦Y3

127 0

インテル® MMX™ 命令ベクトルサイズ: 64 ビットデータ型:• 8、16 および 32 ビット整数

VL (ベクトル長): 2、4、8

インテル® ストリーミング SIMD 拡張命令(インテル® SSE )ベクトルサイズ: 128 ビットデータ型:• 8、16、32、64 ビット整数• 32 および 64 ビット浮動小数点

VL (ベクトル長): 2、4、8、16

プレゼンター
プレゼンテーションのノート
[スクリプト] この図は、異なる VL (64 ビットと 128 ビット) における SIMD 機能の違いを示しています。また、異なる型とサポートされる VL の対応に注意します (SSE の VL は MMX の 2 倍) MMX は x87FP レジスターを再利用するため、FP型をサポートしません。MMX は整数のみです。 スライドの図は、32 ビット整数であり、2 倍のスループットの違いが明確です。 [その他]: 注意: インテル 64 アーキテクチャーでは、もはや MMX は使用されません。ここでは、SSE と AVX に注目します。 最新のコンパイラーは MMX と最初の世代の SSE の自動ベクトル化をサポートしていません。インテル® SSE2 がベースラインとなります。
Page 14: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

図 Xi、Yi および結果は、32 ビット整数

14

インテル® アーキテクチャー II 向けの SIMD タイプ

インテル® アドバンスト・ベクトル・エクステンション (インテル® AVX)ベクトルサイズ: 256 ビットデータ型:

• 8、16、32、64 ビット整数• 32 および 64 ビット浮動小数点

VL (ベクトル長): 4、8、16、32

インテル® AVX-512 とインテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーベクトルサイズ: 512 ビットデータ型:

• 8、16、32、64 ビット整数• 32 および 64 ビット浮動小数点

VL (ベクトル長): 8、16、32、64

X4

Y4

X4◦Y4

X3

Y3

X3◦Y3

X2

Y2

X2◦Y2

X1

Y1

X1◦Y1

0

X8

Y8

X8◦Y8

X7

Y7

X7◦Y7

X6

Y6

X6◦Y6

X5

Y5

X5◦Y5

255

X4

Y4

X4◦Y4

X3

Y3

X3◦Y3

X2

Y2

X2◦Y2

X1

Y1

X1◦Y1

0

X8

Y8

X8◦Y8

X7

Y7

X7◦Y7

X6

Y6

X6◦Y6

X5

Y5

X5◦Y5

X16

Y16

X16◦Y16

511

プレゼンター
プレゼンテーションのノート
[スクリプト] この図は、異なる VL (128 ビットと 256 ビット & 512 ビット - インテル AVX-512 とインテル MIC アーキテクチャー) における SIMD 機能の違いを示しています。 前のスライドの SSE と AVX を比較してみます: お気づきでしょうがスループットは 2 倍です。 インテル MIC アーキテクチャーは、FP に注目するためここでは除外します。32 ビット整数処理には制限があります。 繰り返しますが、スライドの図は、32 ビット整数であり、2 倍のスループットの違いが明確です。 インテル AVX-512 は、インテル Xeon Phi プロセッサー (KNL) で最初に実装され、Core i7 7800X 以降と、Core i9 7900 以降でもサポートされています。今後登場するインテル Xeon プロセッサー・ファミリーでもサポートされる予定です。 [その他]: インテル® MIC アーキテクチャーは、AVX/SSE と互換性がありません。インテル® AVX-512 ベースのプロセッサーは互換性があります。
Page 15: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 15

インテル® SSE ベクトルタイプ

インテル® SSE

インテル® SSE2

4x 単精度 FP

2x 倍精度 FP

16 x 8 ビット整数

8 x 16 ビット整数

4 x 32 ビット整数

2 x 64 ビット整数

フラットな 128 ビット

プレゼンター
プレゼンテーションのノート
[スクリプト] 前のスライドで触れたように、SSE には複数の世代があります。最初の世代の SSE は単精度 FP のみがサポートされていました。倍精度 FP と整数のサポートは、インテル SSE2 で追加されました。 このスライドではサポートされるデータ型と最大ベクトル長を示しています (2 つの 64 ビット整数や 4 つの単精度 FP など)ベクトル要素はマスクされずすべてが使用されます。 プレーンの 128 ビットはビット操作に使用されます (AND、OR、XOR など) 生成されたビット値は一般にマスクとして使用されます。 [その他]: 注意: インテル SSE と SSE2 では新たなベクトル型が導入されました。その他の世代は新しい命令が追加されているだけです。 プレーンの 128 ビットは、論理操作とロード/ストアのみに使用されます。計算では使用されません。
Page 16: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 16

インテル® SSE の世代

70 個の新命令4 つの単精度ベクトル FP

スカラー FP 命令

キャッシュ操作命令

制御と変換命令

メディア拡張

144 個の新命令2 つの倍精度ベクトル FP

8/16/32/64 ベクトル整数

128 ビット整数

メモリーと電力管理

13 個の新命令FP ベクトル計算

x87 整数変換

アライメントされていない 128 ビット整数のロード

スレッドの同期

32 個の新命令パックド整数計算の

拡張

47 個の新命令パックド整数計算と

変換

コンパイラーによるベクトル化の向上

ストリーミング・ヒント付きロード

1999

インテル®SSE

2000

インテル®SSE2

2004

インテル®SSE3

2006

インテル®SSSE3

2007

インテル®SSE4.1

2008

インテル®SSE4.2

7 個の新命令文字列 (XML) 処理

POP カウント

CRC32

プレゼンター
プレゼンテーションのノート
[スクリプト] MMX は 1 つの世代しかありませんが、すべての始まりです。SSE は長い 128 ビット SIMD 処理の始まりであり、各世代で多くの機能 (命令) が追加されてきました。この傾向は AVX でも継続します。 [その他]: SSSE3 = Supplemental SSE3 (意図的にトレードマークが付いていません) 重要: インテル SSE は、単精度 FP のみをサポートします。インテル® SSE2 で倍精度 FP と整数サポートが追加されました。 完全なドキュメント: インテル® 64 および IA-32 アーキテクチャー ソフトウェア開発者マニュアル ボリューム 1: 基本アーキテクチャー
Page 17: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

• パックドインテル® SSE 命令はベクトルごとのすべての要素を操作します• これらの命令の大部分には、ベクトルの 1 つの要素のみを操作するスカラーバージョンがあります• SIMD の能力を引き出すには、スカラーバージョンは避けパックド命令のみを使用します!

17

インテル® SSE パックドとスカラー

スカラー単精度浮動小数点加算:

addss xmm2, xmm1single-precision (単精度) FP データ型scalar (スカラー) 実行モード

+

a3 a2 a1 a0

b3 b2 b1 b0

a3 a2 a1 a0+b0

パックド単精度浮動小数点加算:

addps xmm2, xmm1single-precision (単精度) FP データ型packed (パックド) 実行モード

+

a3 a2 a1 a0

b3 b2 b1 b0

a3+b3 a2+b2 a1+b1 a0+b0

xmm1

xmm2

xmm2

xmm1

xmm2

xmm2

プレゼンター
プレゼンテーションのノート
[スクリプト] ベクトル化されたコードは常に SIMD 機能を利用することになります。SSE や AVX が利用されることで、結果が異なることがあります: SSE には、パックドとスカラーの両方の専用命令があります。 パックド命令はベクトルの各要素を同時に操作します (上の例) スカラー命令は最下位の要素のみを操作します (下の例) 例中の SSE FP ADD 命令では、FP型は、単精度と倍精度にエンコードされます (この例では単精度) SSEでは、常に SIMD 機能を利用するため、可能な限りパックド命令を使用します。 [その他]: コンパイラーによる自動ベクトル化: コンパイラーのヒューリスティックによるため、保証はありません。 優れた決定論性のためインテル® Cilk™ Plus の配列表記と SIMD 対応関数を使用する
Page 18: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 18

インテル® AVX ベクトルタイプ

インテル® AVX

インテル® AVX2

8x 単精度 FP

32x 8 ビット整数

16x 16 ビット整数

8x 32 ビット整数

4x 64 ビット整数

フラットな 256 ビット

4x 倍精度 FP

プレゼンター
プレゼンテーションのノート
[スクリプト] SSE のスライドで示したように、AVX にもサポートされる要素型に関して複数の世代があります。最初の AVX では、FP (単精度と倍精度) のみがサポートされました。第 2 世代のインテル AVX2 で整数要素の操作がサポートされました。 [その他]: プレーンの 256 ビットは、論理操作とロード/ストアのみに使用されます。計算では使用されません。 参考資料: https://software.intel.com/en-us/articles/introduction-to-intel-advanced-vector-extensions
Page 19: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

• 2010: インテル® AVX の最初のバージョンは、第 2 世代インテル® Core™ プロセッサーでサポート: インテル® SSE の倍のレジスター幅、2 倍のベクトル要素 (2x ピーク FLOP) 単精度と倍精度 FP をサポート ロード/ストアサイズも 128 ビットから 256 ビットへ拡張

• 2012: 第 3 世代インテル® Core™ プロセッサーでの改善: 非決定論的乱数生成器 半精度変換 (単精度との)

• 2013: 第 4 世代インテル® Core™ プロセッサーでの改善: インテル® AVX2 (整数サポート含む) FMA (同じベクトル長で 2x ピーク FLOP) アライメントされていないメモリー位置のギャザー

• 将来: インテル® AVX-512

19

インテル® AVX の世代

プレゼンター
プレゼンテーションのノート
[スクリプト] AVX は 2010 年に第 2 世代インテル Core プロセッサーでサポートされました。この命令の利点と機能に関しては、前のスライドで触れました。 第 3 世代のインテル Core プロセッサー (IvyBrisge) では、マイクロアーキテクチャーに小規模の改良が加えられました。これは、インテルのプロセッサー進化におけるチックタック・モデルにおけるチックフェーズであり、マイクロアーキテクチャーへの変更や改良は最小限であるためです。 タックフェーズについては、次のスライドで説明します。 [その他]: インテル® AVX の最初の実装は、第 2 世代インテル® Core™ プロセッサー (SandyBridge) でサポートされました: FP 命令のみがサポートされます。 レジスターサイズは倍になり、最初に単精度と倍精度 FP がサポートされたことで、2x FLOP を達成。 ロード/ストアサイズ: アーキテクチャーの変更についてはプレゼンセットを参照 (SNB 倍のロード/ストアユニット、ツールなど) 第 3 世代インテル® Core™ プロセッサーでの改善: RDRAND 命令 (NIST SP 800-90A 準拠の乱数生成器、非決定論的) 半精度 FP (16 ビット): グラフィックス処理などでメモリー消費量を軽減; 操作の前に単精度に変換 (半精度は ロードとストアのみの操作)
Page 20: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

20

インテル® AVX の機能

• 広いベクトル• 128 から 256 ビットへ拡張• 2 つの 128 ビットロード/ストアポート

主な機能 利点

• 電力効率に優れた最大 2x ピーク FLOPs (floating point operations per second) 出力

• データ再配置の拡張: 新しい 256 ビットのプリミティブを使用して、ブロードキャスト、マスクロードおよび並べ替えを行う

• 必要なデータのみを素早く効率的にアクセスして取得するように構成

• 3 または 4 オペランド: VEX.128 と VEX.256 の両方で非破壊的な構文

• 少ないレジスターへコピー、ベクトルとスカラーの両方で効率良くレジスターを使用

• 柔軟性のあるアライメントされていないメモリーアクセスをサポート

• ロードと計算操作の融合の可能性を高める

• 新しいオペコードエンコード (VEX) 拡張 • コードサイズの軽減

プレゼンター
プレゼンテーションのノート
[スクリプト] AVX の最も重要な利点: SSE に対して倍の VL と 2 倍のスループット VL が増加したことで、ベクトルごとの要素をより柔軟にマスク、計算、そして操作できる命令を提供することが重要になってきました。AVX では、マスクや並べ替え向けのフラグを操作する新しい命令が用意されています。 AVX とともに、全く新しいオペコード (命令) エンコード方式が導入されました。新しい命令エンコードでは、3 もしくは 4 つのオペランドがサポートされます。これによりレジスターアクセスのプレッシャーが軽減され、より効率良くレジスターを使用できます。また、これにより必要となる命令数を少なくできるためスループットの向上に貢献します。VEC エンコード自体は、コードサイズに最適化されています。 結果として、AVX はアライメントされていないアクセスを容易にロードと計算を融合した操作を可能にします (FMA など)。 [その他]: ロードと計算操作の融合の可能性を高める: VEX エンコーディングは、特殊な基本命令を 1 つの命令として融合することを可能にします。例えば、FMA/FMS (減算) やロード操作の融合 (vaddpd は、メモリーからロードして加算を行います)。
Page 21: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

• インテル® SSE に対する 256 ビット・ベクトル拡張: インテル® SSE は XMM と呼ばれる専用の 128 ビット・レジスターを使用

(IA-32 では 8 個、インテル® 64 では 16 個) すべての XMM レジスターを YMM と呼ばれる 256 ビットに拡張 YMM の下位 128 ビットを XMM に割り当て/共有

• インテル® AVX はどちらかで動作 256 ビット全体 下位 128 ビット (上位 128 ビットはゼロ) インテル® AVX は既存のインテル® SSE 命令の大部分に対応する命令を持つ最初の世代 (インテル® AVX) は、FP 向けの完全な 256 ビットベクトルのみ。整数はなし

21

インテル® AVX はインテル® SSE の拡張

256 ビット (2010)

YMM

XMM

128 ビット (1999)

プレゼンター
プレゼンテーションのノート
[スクリプト] SSE と AVX の両方は、SIMD ベクトルを保持する専用のレジスター XMM と YMM を持つ。レジスターの個数は IA-32 で 8 個、インテル 64 で 16 個。 AVX のエンコード方式は完全に SSE のオペコードエンコードとは異なりますが、論理的には延長線上にあると考えることができます。 SSE の XMM レジスターは、AVX 命令が使用される場合 YMM に拡張されリネームされます。すべての YMM レジスター 256 ビットの下位半分は、物理的に対応する XMM レジスターと同じであることを忘れないでください。これは、SSE と AVX 命令を混在して利用する際に注意する必要があります (後述します)。 [その他]: AVX は、3または4つのオペコードの利用を可能にするため新しいオペコードのエンコード方式 (VEX) を使用します。 これは将来の拡張でも役立つでしょう。 256 ビットの整数ベクトルはインテル AVX2 でサポートされます。
Page 22: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

• インテル® AVX とインテル® AVX2 向け• 新しい (拡張) レジスターを使用するには OS のサポートが必要• 次の OS がインテル® AVX をサポートしています:

Linux* kernel 2.6.30 以降インテル® AVX 向けの機能が 2.6.34 で追加されています

Microsoft* Windows*:Microsoft* Windows* 7 SP1Microsoft* Windows* 8Microsoft* Windows® 10Microsoft* Windows Server* 2008 R2 SP1

OS X* 10.6.8OS のサポートなしでも基本的なプロセッサーの機能は利用できますが、インテル® AVX は使用できません!

22

オペレーティング・システムとインテル® AVX

プレゼンター
プレゼンテーションのノート
[スクリプト] AVX (AVX と AVX2) は、その機能を持つプロセッサーによって提供されます。しかし、OS によるコンテキスト切り替え時 (タスク/プロセス切り替え) にレジスターステートの保存がサポートされる必要があります。 [その他]: これは、AVX と AVX2 に限らず、将来の AVX 世代 (例えば、AVX-512) でも同様です。OS のサポートは、その時点では変わっているかもしれません。 注意: インテル C++ および Fortran コンパイラーは、AVX を使用するコードを生成する際に、最終的なアプリケーションで AVX のサポートを確認するランタイムコードを埋め込みます。これは、プロセッサーだけでなく OS のサポートもチェックします。
Page 23: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

インテル® Advisorスレッド化とベクトル化によるアプリケーションのパフォーマンスを向上

23

コンパイラーは常にコードをベクトル化するとは限りません インテル® Advisor を使用してループ伝搬依存を

チェック ベクトル化を強制しても問題ないか?

C++ : pragma simd、Fortran : SIMD ディレクティブ

ベクトル化が常に効率的とは限りません ストライド 1 はストライド 2 よりもキャッシュに効率

的。インテル® Advisor で解析 データ配置の再構成を検討

SIMD Data Layout Templates が有効

構造体配列はデータを直観的に構成するには優れていますが、配列構造体ほど効率的ではありません。SIMD Data Layout Templates(SDLT) を使用して、ベクトル化に効率良いデータにマッピングします

Page 24: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

高速なコードを迅速に開発: インテル® Advisorベクトル化の最適化

問題: インテル® AVX2 向けの再コンパイルでは、

わずかなゲインどこをベクトル化するか? 新しいアーキテクチャー向けに組込み関数を

使用すべきか? コンパイラー・レポートの内容が分からない?

24

データ主導型のベクトル化: 最も効率良いベクトル化の候補は? ベクトル化を妨げているものは? その原因? ループはベクトル化に適しているか? データの再構成でパフォーマンスを改善可能か? 単純に pragma simd を使用しても安全か?

「インテル® Advisor のベクトル化アドバイザーは、開発者が本来行うべき作業に集中することを可能にします。 最適化に費やすことができる時間が限られている場合、非常に有効です」

ハイエンド・コンピューティング・アイルランド・センターシニア・ソフトウェア・アーキテクトGilles Civario 氏

Page 25: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

効率良いベクトル化のための 4 つのステップインテル® Advisor - ベクトル化アドバイザー

25

2. ガイド: 問題を特定し、解決方法を推奨1. コンパイラーの診断 + パフォーマンス・データ+ SIMD の効率情報

3. ループ伝搬依存の解析 4. メモリー・アクセス・パターンの解析

Page 26: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ルーフライン・モデル(Roofline model)

Page 27: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ルーフライン・モデルとは? どれくらい高速化できるか理解しているか?

バークレイの研究者により提唱された パフォーマンスは、計算式/実装およびコード生成/ハードウェアにより

制限されます 2 つのハードウェア要件

ピーク FLOPs ピーク帯域幅

アプリケーションのパフォーマンスは、ハードウェアの仕様により制限されます

27

Gflops/秒 = 𝒎𝒎𝒎𝒎𝒎𝒎 � 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑩𝑩𝑩𝑩 ∗ 𝑷𝑷𝑨𝑨

算術強度 (Flops/バイト)

Page 28: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

プラットフォームのピーク Flops1 秒あたりの浮動小数点演算数

理論値は仕様によって算出可能例) 2 ソケットのインテル® Xeon® プロセッサー E5-2697 v2ピーク FLOP = 2 x 2.7 x 12 x 8 x 2 = 1036.8 Gflop/秒

より現実的な値は Linpack を実行して求めることができます2 ソケットのインテル® Xeon® プロセッサー E5-2697 v2 では ~ 930 Gflop/秒

28

ソケット数コア周波数

コア数

SIMD レジスター中の単精度要素の数

1 つのポートを加算に、もう 1 つを乗算に

Gflops/秒 = 𝒎𝒎𝒎𝒎𝒎𝒎 �𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑩𝑩𝑩𝑩 ∗ 𝑷𝑷𝑨𝑨

Page 29: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

プラットフォームのピーク帯域幅1 秒あたりの転送バイト数

理論値は仕様によって算出可能例) 2 ソケットのインテル® Xeon® プロセッサー E5-2697 v2ピーク BW = 2 x 1.866 x 8 x 4 = 119 GB/秒

より現実的な値は Stream を実行して求めることができます2 ソケットのインテル® Xeon® プロセッサー E5-2697 v2 では ~ 100 Gflop/秒

29

ソケット数メモリー周波数

チャンネルあたりのバイト数 メモリーチャンネル数

Gflop/秒 = 𝒎𝒎𝒎𝒎𝒎𝒎 �𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑩𝑩𝑩𝑩 ∗ 𝑷𝑷𝑨𝑨

Page 30: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ルーフラインを描く光速を定義

30

Gflops/秒

AI [Flop/B] 8.7

1036

2 ソケットのインテル® Xeon® プロセッサーE5-2697 v2ピーク Flop = 1036 Gflop/秒ピーク BW = 119 GB/秒

Gflops/秒 = 𝒎𝒎𝒎𝒎𝒎𝒎 �𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑩𝑩𝑩𝑩 ∗ 𝑷𝑷𝑨𝑨

Page 31: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ルーフラインを描く光速を定義

31

Gflops/秒

AI [Flop/B] 8.7

1036

2 ソケットのインテル® Xeon® プロセッサーE5-2697 v2ピーク Flop = 1036 Gflop/秒ピーク BW = 119 GB/秒

Gflops/秒 = 𝒎𝒎𝒎𝒎𝒎𝒎 �𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑩𝑩𝑩𝑩 ∗ 𝑷𝑷𝑨𝑨

Page 32: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

パフォーマンスの限界は? 手動で求める

行列/行列乗算を手動でカウント

# add = N * N * N #Read = 3 * N * N * 4 バイト

# mul = N * N * N #Write = N * N * 4 バイト

𝐴𝐴𝐴𝐴 = 2𝑁𝑁3

16𝑁𝑁2= 1

8𝑁𝑁

32

for(i=0; i<N; i++)for(j=0; j<N; j++)

for(k=0; k<N; k++)c[i][j] = c[i][j] + a[i][k] * b[k][j]

Page 33: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

最大パフォーマンスを求めるBW * 算術強度 (AI)

33

2 ソケットのインテル® Xeon® プロセッサーE5-2697 v2ピーク Flop = 1036 Gflop/秒ピーク BW = 119 GB/秒

Gflops/秒

AI [Flop/B]8.7

1036

sgemm の場合AI = 1/8 NN = 8, AI = 1 の場合

1

119

Gflops/秒 = 𝒎𝒎𝒎𝒎𝒎𝒎 �𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑩𝑩𝑩𝑩 ∗ 𝑷𝑷𝑨𝑨

N = 8 の場合 sgemm は 119 FGlop/秒を上回ることはできない

(2 ソケットの Ivy Bridge✝)

✝開発コード名

Page 34: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

どのようにポイントを描画するか? 実際の AI と Flop/秒を取得

アプリケーションがこのグラフのどこに位置するかを知るため、いくつかのメトリックを抽出する必要があります

実際の flops は、SDE またはハードウェア・カウンター (利用可能であれば) から求めることができます。実際の flops と理論上の flops (手動でカウント) は近接すべきです。flops/秒を得るためアプリケーションに時間計測を追加します

実際の AI は、アンコアからコアへ転送されたバイト数 + flops から求められます。転送されたバイト数は、emon (ハードウェア・カウンターから) で取得できます

34

Page 35: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

そして今は? パフォーマンスを向上させるには?

35

Gflops/秒

8.7

1036

1

119

メモリーアクセスを最適化

ベクトル化 + スレッド化

Page 36: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ルーフラインを理解する

36

Page 37: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

インテル® Advisor のルーフラインキャッシュを考慮したルーフライン・モデル

インテル® Advisor は、キャッシュを考慮したルーフライン・モデル (CARM) を実装しています

- “アルゴリズムの”、“累積する (L1+L2+LLC+DRAM)” トラフィック・ベース

- 特定のコード/プラットフォームの組み合わせで不変

どのように働くか?

- メモリー移動をすべてカウント

- バイトと Flops -> インストルメンテーション

- 時間 -> サンプリング

37

CARM: キャッシュを意識したルーフライン・モデルDRAM: DRAM を意識したルーフライン・モデルTRAM: 理論的なルーフライン・モデル

一般に AI_CARM < AI_DRAM < AI_TRAM

Page 38: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

インテル® Advisor のルーフラインを理解する

38

最終的にキャッシュ/ DRAM 依存

最終的に計算依存

Page 39: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

依存性の解析

Page 40: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化を強制変数の依存関係を確認

コンパイラー・レポートを確認: remark #15344: ループはベクトル化されませんでした: 内部ループではありません

#prama omp simd を追加しても安全か?

ループ伝搬依存はベクトル化可能か?

40

for (i=0; i<N; i++) A[i] = A[i-M] 0 1 2 3 4 5 6 7入力

Page 41: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化を強制変数の依存関係を確認

ループ伝搬依存はベクトル化可能か?

41

for (i=0; i<N; i++) A[i] = A[i-M] // with M=2

0 1 2 3 4 5 6 7

i=0

0 1 0 3 4 5 6 7

Page 42: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化を強制変数の依存関係を確認

ループ伝搬依存はベクトル化可能か?

42

for (i=0; i<N; i++) A[i] = A[i-M] // with M=2

0 1 0 3 4 5 6 7

i=1

0 1 0 1 4 5 6 7

Page 43: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化を強制変数の依存関係を確認

ループ伝搬依存はベクトル化可能か?

43

for (i=0; i<N; i++) A[i] = A[i-M] // with M=2

0 1 0 1 4 5 6 7

i=2

0 1 0 1 0 5 6 7

Page 44: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化を強制変数の依存関係を確認

ループ伝搬依存はベクトル化可能か?

44

for (i=0; i<N; i++) A[i] = A[i-M] // with M=2

0 1 0 1 0 5 6 7

i=3

0 1 0 1 0 1 6 7

続く

Page 45: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化を強制変数の依存関係を確認

ループ伝搬依存はベクトル化可能か?

45

for (i=0; i<N; i++) A[i] = A[i-M] // with M=2

0 1 2 3 4 5 6 7

i=0

ベクトル長は 4

0 1 0 1 2 3 6 7

Page 46: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化を強制変数の依存関係を確認

ループ伝搬依存はベクトル化可能か?

46

for (i=0; i<N; i++) A[i] = A[i-M] // with M=2

0 1 2 3 4 5 6 7

i=1

ベクトル長は 4

0 1 0 1 2 3 4 5

Page 47: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化を強制変数の依存関係を確認

ループ伝搬依存はベクトル化可能か?

47

for (i=0; i<N; i++) A[i] = A[i-M] // with M=2

0 1 2 3 4 5 6 7

i=1

ベクトル長は 4

0 1 0 1 2 3 4 5

ここでは動作しない

Page 48: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化を強制変数の依存関係を確認

ループ伝搬依存はベクトル化可能か?

48

for (i=0; i<N; i++) A[i] = A[i-M] // with M=2

0 1 2 3 4 5 6 7

i=0

ベクトル長は 2

0 1 0 1 4 5 6 7

Page 49: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化を強制変数の依存関係を確認

ループ伝搬依存はベクトル化可能か?

49

for (i=0; i<N; i++) A[i] = A[i-M] // with M=2

0 1 0 1 4 5 6 7

i=1

ベクトル長は 2

0 1 0 1 0 1 6 7

Page 50: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化を強制変数の依存関係を確認

ループ伝搬依存はベクトル化可能か?

50

for (i=0; i<N; i++) A[i] = A[i-M] // with M=2

0 1 0 1 4 5 6 7

i=1

ベクトル長は 2

0 1 0 1 0 1 6 7

動作!

Page 51: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化しても安全か?

51

ベクトルの依存関係はベクトル化を妨げる!

解析を行うループを選択してボタンをクリック !

Page 52: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

インテル® Advisor は結果をどのように表示するか?

52

ループのベクトル化を強制するための推奨を取得:1. 実際の依存関係を知るためループごとに確認2. 部分的なコードの依存性を調査

この例では 3 つの依存関係が検出されています: RAW – Read After Write (書込み後の読込み) WAR – Write After Read (読込み後の書込み) WAW – Write After Write (書込み後の書込み)

ここはベクトル化を強制するよい候補とは言えません!

検出された依存関係

リードとライトアクセスが検出されたソース行

Page 53: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

メモリー・アクセス・パターン解析

Page 54: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

メモリー・アクセス・パターン解析どのようにデータをアクセスすべきか?

ユニット・ストライド・アクセスは高速

一定ストライドはより複雑

予測できないアクセスは通常避けるべき

54

for (i=0; i<N; i++) A[i] = B[i]*d

B

B の 1 キャッシュラインをロードして 4 DP を計算

B

B の 2 キャッシュラインをロードして、再構成後 4 DP を計算

for (i=0; i<N; i+=2) A[i] = B[i]*d

for (i=0; i<N; i++) A[i] = B[C[i]]*d

B

B の 4 キャッシュラインをロードして、再構成後4 DP を計算、プリフェッチはうまく作用しない

Page 55: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

どのように実行するか? 自動または手動モード

55

解析するループを選択

メモリー・アクセス・パターン解析を実行し、ループと呼び出す関数でどのようにメモリーがアクセスされているかをチェック

Page 56: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

不適切なストライドのループを検出問題を先に特定

適切、不適切または混在するループを特定

アライメントされていないデータの検出

pragma omp declare simd uniform(…)

56

Page 57: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

データアクセスの改善ベクトル化を改善するためにできることは?

一定ストライド ループの順番を確認 AoS から SoA へ移動

コードを完全に書き直す SIMD Data Layout Templates

(SDLT) を使用

予測できないメモリーアクセス 対処が困難なケース アルゴリズムの変更が必要 データ配置を再構成

57

Page 58: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

いくつかのコメント

Page 59: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

ベクトル化アドバイザーはどのように役立つでしょう?ベクトル化を妨げ、効率を低下させる要因は?

59

void scale(int *a, int *b){

for (int i = 0; i < 1000; i++) b[i] = z * a[i];

}

2. ポインターのエイリアシング(コンパイラー固有)

4. 外部と内部ループ1. ループ伝搬依存DO I = 1, N

A(I + M) = A(I) + B(I)ENDDO

for(i = 0; i <= MAX; i++) {for(j = 0; j <= MAX; j++) {D[j][i] += 1;

}}

インテル® Advisor 依存性解析

インテル® Advisor MAP 解析

3. ループ構造、境界条件struct _x { int d; int bound; };void doit(int *a, struct _x *x){for(int i = 0; i < x->bound; i++)x->bound = …;

}

5. 間接メモリーアクセスまたは非ユニットストライド

for (i=0; i<N; i++) A[B[i]] = C[i]*D[i]

void doit(int *a, int *b, intunknown_small_value){for(int i = 0; i <

unknown_small_value; i++)a[i] = z*b[i];

}

6. VL の倍数ではない小さなトリップカウント

インテル® Advisor トリップカウント

Page 60: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

新機能

Page 61: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 61

次世代のインテル® Xeon Phi™ 製品をサポート

インテル® AVX-512 対応ハードウェアの有無にかかわらずインテル®AVX-512 を最適化

正確な FLOPS を計算

拡張されたメモリー・アクセス解析 インパクトが高いループを簡単に選択 バッチモードのワークフローで時間を節約 ループ解析してすぐに表示

バージョン 2017 の新機能! インテル® AVX-512、FLOPS など …インテル® Advisor – ベクトル化の最適化

新機能!

プレゼンター
プレゼンテーションのノート
次の何枚かのスライドはロードマップを示しています。 ここに多くの時間を費やす必要はありません。
Page 62: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 62

次世代のインテル® Xeon Phi™ プロセッサーをサポートベクトル化のアドバイザーは、インテル® Xeon Phi™ プロセッサー向けに最適化され実行できます

インテル® AVX-512 ER – インテル® Xeon Phi™ プロセッサー固有

効率 (72%)、スピードアップ (11.5x)、ベクトル長 (16)

パフォーマンス最適化の問題と解決方法をアドバイス

新機能!

プレゼンター
プレゼンテーションのノート
ヒント: KNL 上でパフォーマンスを解析する最適な方法は、KNL 上の実際の物理コア数に Advisor と Inspector のスレッド数を制限することです。 このスライドは、第 2 世代インテル® Xeon Phi™ ハードウェア Knights landing を搭載したシステム上での Advisor のプロファイルです。 スライド下には、KNL 向けの Advisor のサマリーが示されています。多くのループがベクトル化されていますが、さらなる改善の余地があります。 スライド中ほどの赤枠で囲まれた部分に、解析を実行した Advisor のサーベイが表示されています。ここでは、意図的にソースファイル名を見えないようにしていますが、この解析は重い負荷のワークロードであることが分かるでしょう。 さらに、標準的な Advisor のサーベイ情報に加え、AVX2よりも利点がある AVX-512 ER 命令セットの検出など AVX-512 固有のデータを観察できます。レジオスター幅が 2 倍であることも分かります。 リストの最後にあるループでは、単精度浮動小数点の計算で AVX や AVX2 を使用した Xeon プラットフォームにおけるスピードアップよりもはるかに高い 11.48 倍のスピードアップを達成できることが分かります。 Advisor は、ループのボディ、ピールおよびリマインダーの詳細を示します。興味深いことに、AVX-512 ではピールループもベクトル化されていることを示しています。
Page 63: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

–axCOMMON-AVX512 –xAVX コンパイラー・オプションを使用して 2 つのコードパスを生成 インテル® AVX/インテル® AVX2 (Haswell✝ 以前のプロセッサーで実行されるコードパス)

インテル® AVX-512 (最新のハードウェア向けのコードパス)

インテル® Advisor を使用して、インテル® AVX とインテル® AVX-512 コードを比較

インテル® AVX-512 対応ハードウェアなしでインテル® AVX-512 向けのチューニングを始めるインテル® Advisor - ベクトル化アドバイザー

Inserts (インテル® AVX2) と Gathers (インテル® AVX-512)

期待されるスピードアップ: 13.5x (AVX2) と.30.6x (AVX-512)

期待されるスピードアップ: 13.5x (インテル® AVX2) と30.6x (インテル® AVX-512)

新機能!

✝開発コード名

プレゼンター
プレゼンテーションのノート
第 2 世代の Xeon Phi や AVX-512 をサポートする次世代 Xeon プロセッサーを搭載するシステムを持っていなくても、チューニング作業を行うことができます。AVX-512 にどのように備えればいいでしょうか? 新しい Advisor では、既存の Xeon やクライアントシステム上で AVX-512 の解析ができるようになりました。 これは、AVX や AVX2 で実行されたコードパスと、実行されたなった AVX-512 コードパスも解析し、両者を比較する機能が Advisor に搭載されたことで可能になりました。 この新しい機能を利用するには、[email protected] にコンタクトしてください。
Page 64: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 64

ループと関数ごとの FLOPS 最近のインテル® プロセッサーすべて

(コプロセッサーは除外)

インストルメンテーション (FLOPs のカウント) とサンプリング (低オーバーヘッドの時間計測)

インテル® AVX-512 プロセッサーでマスクを行うように調整

正確な再現性のある FLOPS メトリックインテル® Advisor – ベクトル化の最適化

新機能!

プレゼンター
プレゼンテーションのノート
詳細: Advisor の FLOPS は、KNC を除くすべてのプロセッサーに適用可能。KNL、HSW、BDW、Nehalem、Skylake (クライアントとサーバー) では上手く動作します。 インストルメンテーションとサンプリング。FLOPS = FLOP/秒 FLOPS カウントはインストルメンテーションから求めます。時間はサンプリングから求めます。   Advisor の FLOPS 値は AVX-512 プロセッサー上で実行される場合、マスクされることを考慮します。(KNL/Skylake 以前のプロセッサーは、ハードウェアがマスクをサポートしていないため、Advisor は KNL/Skylake 以前のプロセッサーではマスクを考慮しません)   Advisor は、ループと関数ごとに FLOPS を表示できます。 VTune Amplifier の FLOPS メトリックは、統計的なサンプリング手法で算出されるため、高速に FLOPS を推測できます。 対称的に、Advisor はインストルメンテーションにより FLOPS データを収集するため、より高精度で再現性のあるデータを求めることができます。これは、すべてのプロセッサー (KNL は除く) に対応でき、マスクを考慮することができます。 しかし、オーバーヘッドが大きいため動作速度は低下します。 最新のインテル® Xeon Phi™ プロセッサー (開発コード名 Knights Landing (KNL)) 上では、VTune Amplifier は大まかな推測を行います。この場合、マスクの影響を考慮しないため、正確な操作数を計算できず、上限を推測しているだけです。VTune Amplifier のベータ版はベクトル長と精度をカウントしませんでしたが、バージョン 2017 の静的解析では、ベクトル長と精度を合わせるように改良されています。また、VTune Amplifier は第 4 世代インテル Core プロセッサー (開発コード名 Haswell) 向けの FLOPS 値を推測することができます。 VTune Amplifier の詳細については、製品ヘルプの 「HPC Performance Characterization Analysis」 をご覧ください。 “AI” カラムは、計算強度です。 この値は 0 から 1 の範囲で、1 が最も計算頻度が高く、計算により制限され、0 は帯域幅に制限されることを意味します。
Page 65: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 65

拡張されたメモリーアクセス解析帯域幅と計算のどちらに制限を受けているか?

フットプリントを計測 キャッシュサイズと比較

L2 キャッシュに収まるか?

変数参照 解析を容易にするためデータ

を変数名にマップ

ギャザー/スキャッター パフォーマンスを低下させる

不必要なギャザー/スキャッターを特定

新機能!

Page 66: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 66

最も影響のあるループを簡単に選択スマートモードが優先順位付けに有効

スマートモード有効 簡略化されたカラム表示 - 最も影響するループを特定するのを優先 スライドを調整して、影響のないループを非表示にします

スマートモード無効 熟練者向けに完全なデータを提供

新機能!

プレゼンター
プレゼンテーションのノート
カラム数を減らして、最も重要なものだけを表示します。 入れ子レベルと CPU 時間によってソート これは通常、最も内側のループをベクトル化することがインパクトがあるためです。 影響の少ない % の項目をフィルター処理 フィルターのしきい値はスライドで調整。
Page 67: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

複数の解析を一度のクリックで開始

高度な解析を行うための事前定義のメトリックが含まれる

67

バッチモードの手順を利用して時間を節約インテル® Advisor - ベクトル化アドバイザー

バッチモードを有効にする

[Collect All]をクリック

実行する解析タイプを指定実行する解析タイプを指定実行する解析

を選択

新機能!

Page 68: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 68

ループ解析最適化を計画するために必要なデータを取得

迅速な結果: どれくらいのパフォーマンスを期待でき

ますか? 最適化する価値はありますか? スタティック解析の推奨事項

皆さんのアプリケーションのワークロードはメモリー依存か? 計算依存か?どちらでしょう?

新機能 !

Page 69: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

無料の 30 日間のインテル® Parallel Studio XE 評価版をダウンロード:

www.xlsoft.com/intel/ ›

69

パフォーマンスに優れたコード

Page 70: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

法務上の注意書きと最適化に関する注意事項 本資料の情報は、現状のまま提供され、本資料は、明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず、いかな

る知的財産権のライセンスも許諾するものではありません。製品に付属の売買契約書『Intel's Terms and Conditions of Sale』に規定されている場合を除き、インテルはいかなる責任を負うものではなく、またインテル製品の販売や使用に関する明示または黙示の保証(特定目的への適合性、商品性に関する保証、第三者の特許権、著作権、その他、知的財産権の侵害への保証を含む) をするものではありません。

性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。 SYSmark* や MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。 結果はこれらの要因によって異なります。 製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。

© 2017 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴ、Intel Inside、Intel Inside ロゴ、Intel Core、Xeon、Intel Xeon Phi、MMX は、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。

Microsoft および Windows は、米国 Microsoft Corporation の、米国およびその他の国における登録商標または商標です。

最適化に関する注意事項

インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミングSIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。

注意事項の改訂 #20110804

70

Page 71: ® Advisor のルーフライン・モデル を使用してアプ …...インテル® Advisor とベクトル化が重要な理由 インテル® Advisor のルーフライン・モデル

© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。