Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
インテル® Advisor のルーフライン・モデルを使用してアプリケーションのパフォーマンスを高めるベクトル化のプロファイルと改善
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
内容
インテル® Advisor とベクトル化が重要な理由
インテル® Advisor のルーフライン・モデル
依存性の解析
メモリー・アクセス・パターンの解析
新機能
2
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
インテル® 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 との協業
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
アムダールの法則
𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆 = 11−𝑝𝑝 + 𝑝𝑝
𝑠𝑠
S = スピードアップ P = スレッド化の利点を得る実行時間の割合
5
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
アムダールの法則
2 倍のスピードアップ
2 倍には達しないスピードアップ
6
© 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
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
単一のベクトルレーンを使用しない!ベクトル化およびスレッド化されていないソフトウェアは、パフォーマンスを得られません
8
© 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
© 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
© 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
© 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
現在と将来
© 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
© 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
…
…
…
© 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 ビット
© 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
© 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
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 18
インテル® AVX ベクトルタイプ
インテル® AVX
インテル® AVX2
8x 単精度 FP
32x 8 ビット整数
16x 16 ビット整数
8x 32 ビット整数
4x 64 ビット整数
フラットな 256 ビット
4x 倍精度 FP
© 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 の世代
© 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) 拡張 • コードサイズの軽減
© 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)
© 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
© 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) を使用して、ベクトル化に効率良いデータにマッピングします
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
高速なコードを迅速に開発: インテル® Advisorベクトル化の最適化
問題: インテル® AVX2 向けの再コンパイルでは、
わずかなゲインどこをベクトル化するか? 新しいアーキテクチャー向けに組込み関数を
使用すべきか? コンパイラー・レポートの内容が分からない?
24
データ主導型のベクトル化: 最も効率良いベクトル化の候補は? ベクトル化を妨げているものは? その原因? ループはベクトル化に適しているか? データの再構成でパフォーマンスを改善可能か? 単純に pragma simd を使用しても安全か?
「インテル® Advisor のベクトル化アドバイザーは、開発者が本来行うべき作業に集中することを可能にします。 最適化に費やすことができる時間が限られている場合、非常に有効です」
ハイエンド・コンピューティング・アイルランド・センターシニア・ソフトウェア・アーキテクトGilles Civario 氏
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
効率良いベクトル化のための 4 つのステップインテル® Advisor - ベクトル化アドバイザー
25
2. ガイド: 問題を特定し、解決方法を推奨1. コンパイラーの診断 + パフォーマンス・データ+ SIMD の効率情報
3. ループ伝搬依存の解析 4. メモリー・アクセス・パターンの解析
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
ルーフライン・モデル(Roofline model)
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
ルーフライン・モデルとは? どれくらい高速化できるか理解しているか?
バークレイの研究者により提唱された パフォーマンスは、計算式/実装およびコード生成/ハードウェアにより
制限されます 2 つのハードウェア要件
ピーク FLOPs ピーク帯域幅
アプリケーションのパフォーマンスは、ハードウェアの仕様により制限されます
27
Gflops/秒 = 𝒎𝒎𝒎𝒎𝒎𝒎 � 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑩𝑩𝑩𝑩 ∗ 𝑷𝑷𝑨𝑨
算術強度 (Flops/バイト)
© 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/秒 = 𝒎𝒎𝒎𝒎𝒎𝒎 �𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑩𝑩𝑩𝑩 ∗ 𝑷𝑷𝑨𝑨
© 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/秒 = 𝒎𝒎𝒎𝒎𝒎𝒎 �𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑩𝑩𝑩𝑩 ∗ 𝑷𝑷𝑨𝑨
© 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/秒 = 𝒎𝒎𝒎𝒎𝒎𝒎 �𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑩𝑩𝑩𝑩 ∗ 𝑷𝑷𝑨𝑨
© 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/秒 = 𝒎𝒎𝒎𝒎𝒎𝒎 �𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝑷𝒎𝒎 𝑩𝑩𝑩𝑩 ∗ 𝑷𝑷𝑨𝑨
© 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]
© 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✝)
✝開発コード名
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
どのようにポイントを描画するか? 実際の AI と Flop/秒を取得
アプリケーションがこのグラフのどこに位置するかを知るため、いくつかのメトリックを抽出する必要があります
実際の flops は、SDE またはハードウェア・カウンター (利用可能であれば) から求めることができます。実際の flops と理論上の flops (手動でカウント) は近接すべきです。flops/秒を得るためアプリケーションに時間計測を追加します
実際の AI は、アンコアからコアへ転送されたバイト数 + flops から求められます。転送されたバイト数は、emon (ハードウェア・カウンターから) で取得できます
34
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
そして今は? パフォーマンスを向上させるには?
35
Gflops/秒
8.7
1036
1
119
メモリーアクセスを最適化
ベクトル化 + スレッド化
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
ルーフラインを理解する
36
© 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
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
インテル® Advisor のルーフラインを理解する
38
最終的にキャッシュ/ DRAM 依存
最終的に計算依存
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
依存性の解析
© 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入力
© 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
© 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
© 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
© 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
続く
© 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
© 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
© 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
ここでは動作しない
© 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
© 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
© 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
動作!
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
ベクトル化しても安全か?
51
ベクトルの依存関係はベクトル化を妨げる!
解析を行うループを選択してボタンをクリック !
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
インテル® Advisor は結果をどのように表示するか?
52
ループのベクトル化を強制するための推奨を取得:1. 実際の依存関係を知るためループごとに確認2. 部分的なコードの依存性を調査
この例では 3 つの依存関係が検出されています: RAW – Read After Write (書込み後の読込み) WAR – Write After Read (読込み後の書込み) WAW – Write After Write (書込み後の書込み)
ここはベクトル化を強制するよい候補とは言えません!
検出された依存関係
リードとライトアクセスが検出されたソース行
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
メモリー・アクセス・パターン解析
© 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 を計算、プリフェッチはうまく作用しない
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
どのように実行するか? 自動または手動モード
55
解析するループを選択
メモリー・アクセス・パターン解析を実行し、ループと呼び出す関数でどのようにメモリーがアクセスされているかをチェック
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
不適切なストライドのループを検出問題を先に特定
適切、不適切または混在するループを特定
アライメントされていないデータの検出
pragma omp declare simd uniform(…)
56
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
データアクセスの改善ベクトル化を改善するためにできることは?
一定ストライド ループの順番を確認 AoS から SoA へ移動
コードを完全に書き直す SIMD Data Layout Templates
(SDLT) を使用
予測できないメモリーアクセス 対処が困難なケース アルゴリズムの変更が必要 データ配置を再構成
57
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
いくつかのコメント
© 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 トリップカウント
新機能
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 61
次世代のインテル® Xeon Phi™ 製品をサポート
インテル® AVX-512 対応ハードウェアの有無にかかわらずインテル®AVX-512 を最適化
正確な FLOPS を計算
拡張されたメモリー・アクセス解析 インパクトが高いループを簡単に選択 バッチモードのワークフローで時間を節約 ループ解析してすぐに表示
バージョン 2017 の新機能! インテル® AVX-512、FLOPS など …インテル® Advisor – ベクトル化の最適化
新機能!
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 62
次世代のインテル® Xeon Phi™ プロセッサーをサポートベクトル化のアドバイザーは、インテル® Xeon Phi™ プロセッサー向けに最適化され実行できます
インテル® AVX-512 ER – インテル® Xeon Phi™ プロセッサー固有
効率 (72%)、スピードアップ (11.5x)、ベクトル長 (16)
パフォーマンス最適化の問題と解決方法をアドバイス
新機能!
© 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)
新機能!
✝開発コード名
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 64
ループと関数ごとの FLOPS 最近のインテル® プロセッサーすべて
(コプロセッサーは除外)
インストルメンテーション (FLOPs のカウント) とサンプリング (低オーバーヘッドの時間計測)
インテル® AVX-512 プロセッサーでマスクを行うように調整
正確な再現性のある FLOPS メトリックインテル® Advisor – ベクトル化の最適化
新機能!
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 65
拡張されたメモリーアクセス解析帯域幅と計算のどちらに制限を受けているか?
フットプリントを計測 キャッシュサイズと比較
L2 キャッシュに収まるか?
変数参照 解析を容易にするためデータ
を変数名にマップ
ギャザー/スキャッター パフォーマンスを低下させる
不必要なギャザー/スキャッターを特定
新機能!
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 66
最も影響のあるループを簡単に選択スマートモードが優先順位付けに有効
スマートモード有効 簡略化されたカラム表示 - 最も影響するループを特定するのを優先 スライドを調整して、影響のないループを非表示にします
スマートモード無効 熟練者向けに完全なデータを提供
新機能!
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
複数の解析を一度のクリックで開始
高度な解析を行うための事前定義のメトリックが含まれる
67
バッチモードの手順を利用して時間を節約インテル® Advisor - ベクトル化アドバイザー
バッチモードを有効にする
[Collect All]をクリック
実行する解析タイプを指定実行する解析タイプを指定実行する解析
を選択
新機能!
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。 68
ループ解析最適化を計画するために必要なデータを取得
迅速な結果: どれくらいのパフォーマンスを期待でき
ますか? 最適化する価値はありますか? スタティック解析の推奨事項
皆さんのアプリケーションのワークロードはメモリー依存か? 計算依存か?どちらでしょう?
新機能 !
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。
無料の 30 日間のインテル® Parallel Studio XE 評価版をダウンロード:
www.xlsoft.com/intel/ ›
69
パフォーマンスに優れたコード
© 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
© 2017 Intel Corporation. 無断での引用、転載を禁じます。 Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。