ハイパフォーマンス・ソフトウェア・カンファレンス

インテル® マイクロアーキテクチャー
Skylake Server✝/Skylake-X✝ とインテル® AVX-512 プログラミング

インテル® AVX-512 と新しいプロセッサーを使用してパフォーマンスを向上✝開発コード名2017 年 12 月
iSUS 編集長
すがわら きよふみ1

目的• インテル® AVX-512 命令セットと新しいキャッシュ・アーキテクチャーが既存アプリケーションのパフォーマンスに与える影響を検証する• 最新のコンパイラーの機能を理解する© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

2

内容• 残念なお知らせと、嬉しいお知らせ• Skylake Server✝ マイクロアーキテクチャー• Skylake Server✝ 向けプログラミング• コンパイラー・オプション• インテル® AVX-512• キャッシュ・アーキテクチャーの影響(内部ユニット、キャッシュ)• コンパイラーの振る舞いと最適化• 命令セットと電力管理• まとめ✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

3

残念なお知らせと、嬉しいお知らせ• インテル® C++ コンパイラー V18 では、インテル® Cilk™ Plusの機能が非推奨となり将来サポートされなくなることが発表されました− 「Cilk がやってきた」から「さよなら Cilk Plus」へ

https://www.isus.jp/products/c-compilers/goodbye-cilk-plus-01/• OpenMP* TR4 バージョン 5.0 プレビュー 1 の機能がサポートされました− コンパイラーのリリースノートをご覧ください

https://www.isus.jp/products/psxe/c-compiler-18-0-for-win-rn-for-psxe2018/#OMP5X© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

4

インテル® マイクロアーキテクチャー
Skylake Server✝ の特徴• Skylake Server✝ マイクロアーキテクチャー・ベースの新しいコアは、Kaby Lake✝
マイクロアーキテクチャーを基に改善を行っています• インテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) のサポート• ソケットあたりのコア数の増加 (最大 28 対最大 22)• Skylake✝ マイクロアーキテクチャーではソケットあたり 6 本のメモリーチャンネル (Broadwell✝ マイクロアーキテクチャーは 4 チャンネル)• より大きな L2 キャッシュと小さな非インクルーシブな L3 キャッシュ• インテル® Optane™ テクノロジーをサポート• インテル® Omni-Path アーキテクチャー (インテル® OPA)
• サブ NUMA クラスタリング (SNC) をサポート✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

5

インテル® マイクロアーキテクチャー
Skylake Server✝ の CPU コア・パイプライン✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

6

インテル® マイクロアーキテクチャー
Skylake Server✝ のキャッシュ[MB]✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

7

インテル® マイクロアーキテクチャー
Skylake Server✝ のサブ NUMA クラスタリング
サブ NUMA クラスタリング (SNC) は、ラスト・レベル・キャッシュ (LLC) からメモリーへの平均レ
イテンシーを改善するモードです。これは、以前の世代のインテル® Xeon® プロセッサー E5 ファ
ミリーにおけるクラスターオンダイ (COD) の実装を置き換えるものです••••

単一のウルトラ・パス・インターコネクト (UPI) キャッシュ・
エージェントが必要です
リモートクラスターへのメモリー・アクセス・レイテンシー
は小さく、UPI フローは必要ありません
LLC でラインが複製されることはないため、LLC の容量をより効率良く利用できます
リモートクラスターのアドレスがローカルクラスターの
LLC にキャッシュされることがないため、クラスターオン
ダイ (COD) 方式に比べレイテンシーが大きくなることがあります✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

8

詳細は、
インテル® 64 アーキテクチャーおよび IA-32 アーキ
テクチャー最適化リファレンス・マニュアルをご覧くださいiSUS で公開中です: https://www.isus.jp/
最新 (2017 年 10 月公開の英語版) の完訳が終了しました© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

9

インテル® マイクロアーキテクチャー
Skylake Server✝ 向けプログラミング
コンパイラー・オプション (命令セットの指定)✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

10インテル® AVX-512 - 比較

インテル® MPX、
インテル® SHA、…

• インテル® Xeon Phi™ プロセッサーとインテル® Xeon® プロセッサーは、大部分の命令を共有

インテル®
AVX-512PR

インテル®
AVX-512BW

インテル®
AVX-512ER

インテル®
AVX-512DQ

インテル®
AVX-512CD

インテル®
AVX-512CD

インテル®
AVX-512F

インテル®
AVX-512F

インテル®
AVX2

インテル®
AVX2

インテル®
AVX2

インテル®
AVX

インテル®
AVX

インテル®
AVX

インテル®
AVX

インテル®
SSE

インテル®
SSE

インテル®
SSE

インテル®
SSE

インテル®
SSE

NHM✝

SNB✝

HSW✝

KNL✝

SKL✝

しかし、若干の相違がある• サブセットは、固有の機能フラグ (CPUID)
で示されるインテル® マイクロアーキテクチャー© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

✝開発コード名

共通命令セット

インテル®
AVX-512VL

11

例:/QaxCOMMON-AVX512 /QxAVX2•COMMON-AVX512/QaxAVX2 /QxCORE-AVX512/QaxCORE-AVX512 /QxAVX2
特定のインテル® プロセッサーのアーキテクチャー向けにチューニング:-mtune=<プロセッサー>
例: バージョン 17.0 以降の新機能-mtune=knl または -mtune=skylake✝開発コード名

インテル® マイクロアーキテクチャー© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

インテル®
AVX-512VL
インテル®
AVX-512PR
インテル®
AVX-512ER

インテル®
AVX-512BW
インテル®
AVX-512DQ

インテル®
AVX-512CD

インテル®
AVX-512CD

インテル®
AVX-512F

インテル®
AVX-512F

インテル®
AVX2

インテル®
AVX2

インテル®
AVX

インテル®
AVX

インテル®
SSE

インテル®
SSE

KNL✝

SKL✝

CORE-AVX512

オプションで SIMD 拡張を選択:/Qx<命令セット> または /Qax<命令セット>

インテル® MPX、
インテル® SHA、…

共通命令セット•

MIC-AVX512

インテル® AVX-512 - インテル® コンパイラー

12

自動プロセッサー・ディスパッチ
自動プロセッサー・ディスパッチ
なしで、指定された命令セット
を生成

自動プロセッサー・ディスパッチ
ありで、指定された命令セットと汎用命令セット (インテル®
SSE2) を生成
© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

13

デフォルト命令セットの扱い© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

14

プロセッサー・ディスパッチはパフォーマンスに影響する
ランタイムチェックの影響> icl multiply.c /c /QaxCORE-AVX512 /QxCORE-AVX2> icl driver.c multiply.obj /QaxCORE-AVX2 /Fedriver.exe> icl multiply.c /c /QxCORE-AVX2> icl driver.c multiply.obj /QaxCORE-AVX2 /Fedriver.exe

処理中に数万回、数十万回呼び出されるような下位の関数では、
ランタイムチェックを行うべきではない© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

15

インテル® AVX-512 命令セット含むコード

ソースに組込み関数やインラインアセンブリーを含むコード (手動チェック)
uint64_t fma_only_tpt(int loop_cnt){
uint64_t loops = loop_cnt;__declspec(align(64)) double one_vec[8] = {1, 1, 1, 1,1, 1, 1, 1};__asm{
コード中で命令セットがサポート
vmovups zmm0, [one_vec]
されるかチェックしない
vmovups zmm1, [one_vec]
vmovups zmm2, [one_vec]
vmovups zmm3, [one_vec]
vmovups zmm4, [one_vec]
vmovups zmm5, [one_vec]
vmovups zmm6, [one_vec]
コード中で命令セットがサポートされるか
vmovups zmm7, [one_vec]
vmovups zmm8, [one_vec]
チェック
vmovups zmm9, [one_vec]
if(!_may_i_use_cpu_feature(_FEATURE_AVX512F)){
vmovups zmm10, [one_vec]
printf("This processor does not support AVX-512.. Bye¥n");vmovups zmm11, [one_vec]
exit(-1);
mov rdx, loops}……
© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

16

コード中で CPU の命令セットをチェックする#include <immintrin.h>#include <stdio.h>
int main(int argc, char *argv[]) {const unsigned long knl_features =(_FEATURE_AVX512F | _FEATURE_AVX512ER |_FEATURE_AVX512PF | _FEATURE_AVX512CD );if ( _may_i_use_cpu_feature( knl_features ) )printf("This CPU supports AVX-512F+CD+ER+PF as introduced in Knights Landing¥n");else
printf("This CPU does not support all Knights Landing AVX-512 features¥n");return 1;}

インテル® コンパイラーは、プロセッサーの機能をチェックする_may_i_use_cpu_feature() 組込み関数をサポート
https://www.isus.jp/specials/target-intel-core-processors/
https://www.isus.jp/products/c-compilers/how-to-detect-knl-instruction-support/© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

17

その他のインテル® AVX-512 向けオプション/QxCORE-AVX512 また /QaxCORE-AVX512 などと併用• ZMM レジスター利用を制御するオプション/Qopt-zmm-usage:<keyword>zmm レジスター利用のレベルを指定します。
−low - コンパイルしたプログラムで ZMM レジスター利用による効果が得られる
可能性が低いことをコンパイラーに伝えます。ZMM レジスター利用による効果があると分かっている場合を除いて、コンパイラーは ZMM レジスターを使用しません−high - 制限なしで ZMM コードを生成するようコンパイラーに伝えます。

不明な場合、両方のオプションでパフォーマンスを比較するか、インテル® Advisor 2018 を使用してプロファイルしてください© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

18

ベクトル化オプションはパフォーマンスに影響する

バイナリーに適用されている命令セットは?

ベクトル命令セットにインテル® AVX が適用されている
サーベイレポートで詳細を確認© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

19

インテル® マイクロアーキテクチャー
Skylake Server✝ 向けプログラミング
製品によって異なる内部ユニット✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

20

FMA ユニット
Skylake✝ マイクロアーキテクチャー・ベースのプロセッサーには、2 つのインテル® AVX-512 FMA ユニット (ポート 0 と 5) を備えるものがある一方、同じ
アーキテクチャー・ベースのプロセッサーでも単一のインテル® AVX-512 FMA ユニット (ポート 0) を持つものがあります2 つの FMA ユニットで実行されることを想定して最適化されたコードは、単一 FMA ユニット上での実行には最適でない可能性があります
コンパイラーには FMA ユニット数を制御するオプションは用意されていません✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

21

インテル® Xeon® スケーラブル・プロセッサー© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

22

FMA ユニット数を判定する
2 つの FMA ユニットを備えるプロセッサーは、FMA と shuffle 命令を同時に実行できますが、単一ユニットのプロセッサーは同時実行できません• FMA 命令のみを実行する関数を実行• FMA 命令と shuffle 命令を実行する関数実行• 2 つの実行時間を基にプロセッサーが 1 つまたは 2 つの FMA ユニットを搭載するかを特定します

詳細は、『インテル® 64 および IA-32 アーキテクチャー最適化リファレンス・マニュアル』(248966-03８) の 15.20 節 「単一 FMA ユニットを備える場合」 をご覧ください:https://www.isus.jp/technical-document/© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

23

FMA ユニット数を確認
Windows* - インテル® Core™ i7-7800X
X シリーズ・プロセッサー$ icc -fasm-blocks FMA_count.c$ ls
a.out FMA_count.c$ ./a.out
2 FMA server$
processor: 103
vendor_id: GenuineIntel
cpu family
:6
model
: 85
model name: Intel(R) Xeon(R) Platinum 8170 CPU @ 2.10GHz
stepping:4
microcode: 0x2000016
cpu MHz: 1136.871
cache size
: 36608 KB

Linux* - インテル® Xeon® Platinum 8170 プロセッサー© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

24

命令グループ (2 FMA)
• グループ A の命令: vadd*; vfmadd*; vfnmsub*; vfnmadd*; vfnmsub*; vmax*;
vmin*; vmul*; vscalef*; vsub*; vcvt*; vgetexp*; vfixupimm*; vrange*;
vgetmant*; vreduce*; vcmp*; vcomi*; vdpp*; vhadd*; vhsub*; vrndscale*;vround*• グループ B の命令: vpmaddubsw; vpmaddwd; vpmuldq; vpmulhrsw;
vpmulhuw; vpmulhw; vpmullw; vpmuludq

すべての命令のソースが FMA ユニットから供給される場合、FMA ユニットは高速バイパスをサポートします。グループ A はポート 0 とポート 5 で 4 サイクルのレイ
テンシー、グループ B はポート 0 とポート 5 で 5 サイクルのレイテンシーです© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

25

インテル® マイクロアーキテクチャー
Skylake Server✝ 向けプログラミング
異なるキャッシュ・アーキテクチャー(インクルーシブと、非インクルーシブ)✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

26

キャッシュ最適化
2M バイト256K バイト
32K バイト

配列 a, b, c はキャッシュのどの階層に収まるか?
for(j=1;j<n;j++){f=0;
for(i=1;i<n;i++){f+=a[i]*b[i];}c[j]+=f;}

1.375M バイト
1M バイト
32K バイトdouble a[100], b[100], c[100]double a[40000], b[40000], c[40000]© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

27

キャッシュ最適化 – 従来のプロセッサー
double a[40000], b[40000], c[40000] は、L2 キャッシュに収まらない
a[40000]a[40000]
ブロッキング© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

28

ブロッキングの例
for(jj=1;jj<n/FACTOR+1;jj++){for(ii=1;ii<n/FACTOR+1;ii++){for(j=(jj-1)*FACTOR+1;j<min(jj*FACTOR,n);j++){f=0;
for(i=(ii-1)*FACTOR+1;i<min(ii*FACTOR,n);i++){f=f+a[i]*b[i];}c[j]=c[j]+f;}}}© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

29

ブロッキングとパフォーマンス
プロセッサーキャッシュ

ブロッキングなし ブロッキングありインテル® Core™ i7-4790K
プロセッサー(4.00GHz/4.40GHz)

8M/256K

0.47 秒0.23 秒インテル® Core™ i7-7800X
X シリーズ・プロセッサー(3.50GHz/4.00GHz)

8.25M/1M

0.27 秒0.29 秒インテル® Core™ i7-5820K
プロセッサー (3.30GHz/3.60GHz)

15M/256K

0.66 秒0.28 秒インテル® Xeon® プロセッサー
E5-2699 v4 (2.20GHz/3.60GHz)

55M/256K

0.76 秒0.30 秒/QxCORE-AVX2 で生成した同じバイナリーを実行© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

30

インテル® マイクロアーキテクチャー
Skylake Server✝ 向けプログラミング
コンパイラーの振る舞い✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

31

ここで使用するプロセッサーの比較
インテル® Core™ i7-5820K インテル® Core™ i7-7800X
プロセッサー
X シリーズ・プロセッサー
アーキテクチャー

Haswell-E✝

Skylake✝

コア数

6 (12)

6 (12)

周波数

3.30GHz (3.60GHz)

3.50GHz (4.00GHz)

キャッシュ

32K/32K, 256K, 15MB

32K/32K, 1024KB, 8.25MB

メモリーチャネル数

4

4

メモリー

DDR4 2133

DDR4 2400✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

32

検証 1: 簡単な計算のループ (pi)#pragma omp simd reduction(+:sum) private(x)for (i=0;i< num_steps; i++){x = (i+0.5)*step;sum = sum + 4.0/(1.0+x*x);}$ icl pi.c /Qopenmp

インテル® Core™ i7-7800X
X シリーズ・プロセッサー

デフォルト
インテル® SSE2
(float/double)/QxCORE-AVX2(float/double)/QxCORE-AVX512(float/double/zmm)

0.48/0.57

0.27/0.56

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

33

opt-zmm-usage オプションの例 2
1 から 5 千万の間の素数の数を求める例

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

34

OpenMP* で simdlen を制御#pragma omp simd reduction(+:sum) private(x) simdlen(8 または 16)
for (i=0;i< num_steps; i++){x = (i+0.5)*step;sum = sum + 4.0/(1.0+x*x);}

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

35

ループ・スケジュール SIMD 修飾子の例
void sprod(float *a, float *b, int n) {float sum = 0.0f;#pragma omp parallel for simd reduction(+:sum) schedule(simd:static,5)for (int k=0; k<n; k++)sum += a[k] * b[k];return sum;}
並列化

スレッド 0スレッド 1スレッド 2

ベクトル化

新しい SIMD 修飾子は、コンパイラーとランタイムが SIMD レジスターのレングスにチャンクサイズを合わせることが可能です:•

新しいチャンクサイズは、chunk_size/simdlen * simdlen•

インテル® AVX2/インテル® AVX-512: 新しいチャンクサイズは、8/16 以上の 2 の累乗•

インテル® SSE: 新しいチャンクサイズは、4 以上の 2 の累乗© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

36

36

インテル® Core™ i7-5820K プロセッサー上のインテル® AVX2 コード© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

37

インテル® Core™ i7-7800X X シリーズ・
プロセッサー上のインテル® AVX-512 コード© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

38

検証 2: メモリー依存のループ
for(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];$ icl matrix1.cpp /O１ /Qx 命令セット
1024 (/O1 なし)

デフォルト
インテル® SSE2

/QxCORE-AVX2/QxCORE-AVX512

インテル® Core™ i7-7800X
X シリーズ・プロセッサー

8.71 (0.56)
111.81 (5.83)

8.82 (0.47)
110.92 (5.41)

8.6 (0.46)
111.36 (5.33)

インテル® Core™ i7-5820K
プロセッサー

15.79 (0.41)
143.99 (5.57)

15.74 (0.33)
143.76 (4.93)© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

NA

39

ユニットストライドではないループ© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

40

検証 3: メモリー依存のループ (スレッド/ベクトル)#pragma omp parallel for
for(i=0; i<m; i++)for(k=0; k<n; k++)#pragma omp simdfor(j=0; j<p; j++)c[i][j] = c[i][j] + a[i][k] * b[k][j];$ icl matrix2.cpp /Qx命令セット [/Qopenmp]
1024/2048/4096

デフォルト SSE2

/QxCORE-AVX2/QxCOREAVX512

インテル® Core™ i7-7800X
X シリーズ・プロセッサー

0.54 (0.10)
5.97 (0.77)
51 (7.42)

0.53 (0.09)
5.44 (0.67)
48 (7.88)

0.53 (0.08)
5.42 (0.66)
48 (7.99)

インテル® Core™ i7-5820K
プロセッサー

0.46 (0.08)
5.60 (0.75)
48.3 (5.84)

0.30 (0.07)
4.87 (0.72)
46.17 (5.76)© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

41

新たな命令セットの恩恵
インテル® C++ コンパイラーによってインテル® AVX2 以前の命令セットではベクトル化されず、インテル® Xeon® プロセッサーのインテル® AVX-512 を利用してベクトル化されるようになったループでは劇的にパフォーマンが向上することがあります。特に、インテル® AVX-512CD お
よびインテル® AVX-512F サブセットの新機能は、このようなアプリケーションに対し、コードを変更しなくても、コンパイラーが最適化されたベクトルコードを自動生成します

イメージのヒストグラム計算のおける依存性解決の例
テストケースループ

ベースライン(インテル® AVX2)

ベクトル化によるスピードアップ(インテル® AVX-512)

入力イメージ

ループ 1
ループ 2
ループ 1
ループ 2

1
1
1
1

2.2
7.0
2.6
7.4

ループ 1

1

1.7

ループ 2

1

5.6

鮮明な入力イメージ
滑らかな入力イメージ

https://www.isus.jp/products/c-compilers/improve-vectorization-performance-using-avx-512/© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

42

インテル® マイクロアーキテクチャー
Skylake Server✝ 向けプログラミング
命令セットと電力管理✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

43

Skylake Server✝ の電力管理•

Skylake Server✝ マイクロアーキテクチャーは、それぞれのコアの実行周波数を動的に選択します。選択される周波数は、命令タイプ、命令幅、および一定時間に実行されるベクトル命
令数などの組み合わせに依存します。プロセッサーはまた、同様の特性を持つコアの数を考慮します•Broadwell✝ マイクロアーキテクチャー・ベースのインテル® Xeon® プロセッサーも同じように振る舞いますが、256 ビット・ベクトル命令のみをサポートするため影響は軽度です。
Skylake Server✝ マイクロアーキテクチャーがサポートするインテル® AVX-512 命令は、潜在的にインテル® AVX2 命令よりも多くの電流と電力を必要とします•

プロセッサーは、必要に応じて動的に最大周波数をより高いか低いレベルに調整します。そのため、プログラムが実行されている間の最大周波数は異なる可能性があります✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

44

インテル® ターボ・ブースト・テクノロジーの最大コア周波数レベル
レベル

カテゴリー

周波数レベル0

軽量なインテル® AVX2
命令

1

重いインテル® AVX 2
命令 + 軽量なインテル®
AVX-512 命令

2

重いインテル® AVX512 命令

最も高い

最大周波数 (POn)
最大

命令タイプ
スカラー、インテル® AVX (128 ビット)、インテル® SSE、インテル® AVX2 (FPまたは INT MUL/FMA なし)

中間

最大インテル® AVX2

インテル® AVX2 FP + INT MUL/FMA、
インテル® AVX-512 (FP または
MUL/FMA なし)

最低

最大インテル® AVX-512

インテル® AVX-512 FP + INT
MUL/FMA

最大周波数 (POn) は、カテゴリー内のコア数に応じた周波数の配列で表されます。
多くのコアがある時点でカテゴリーに含まれると、最大周波数は低くなります© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

45

ワークロードの混在と周波数• それぞれのコアの周波数はワークロードの要求に基づいて独立して決定されます• 新しいレベルへの移行には最大 500 μ秒
かかります• 高い周波数レベルに戻る前には、およそ 2
ms のタイマーが適用されます

周
波
数

コア
次のパフォーマンス・モニタリング・イベントは、3 つの周波数レベルにおいて費やされるサイクル数を決定するために使用されます:• CORE_POWER.LVL0_TURBO_LICENSE: 最大周波数が P0n でコアが動作したコアサイクル• CORE_POWER.LVL1_TURBO_LICENSE: 最大周波数が P0n-AVX2 でコアが動作したコアサイクル• CORE_POWER.LVL2_TURBO_LICENSE: 最大周波数が P0n-AVX-512 でコアが動作したコアサイクル© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

46

https://ark.intel.com/ja/products/series/125191/Intel-Xeon-Scalable-Processors© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

47

ワークロードとパフォーマンス
インテル® AVX-512 命令を実行する
ワークロードが、命令全体に占める割合が大きいと、インテル® AVX2 命令に比べパフォーマンス・ゲインは高くなりますが、動作周波数は低くなる可能性があります✝開発コード名

例えば、高い比率で重いインテル®
AVX-512 命令を最大周波数で要求するディープラーニングのワークロード
は、インテル® AVX2 をターゲットとする同じワークロードに対し、1.3 倍から1.5 倍のパフォーマンスを向上できます (両者とも Skylake Server✝ マイク
ロアーキテクチャー上で実行)© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

48

ワークロードと推奨コンパイラー・オプション
最適なコンパイラー・オプションを特定するため、次に示す命令セットオプションでアプ
リケーションをビルドして、最も高いパフォーマンスを示す命令セットを選択します：• -xCORE-AVX2 -mtune=skylake-avx512 (Linux* および macOS*)/QxCORE-AVX2 /tune=skylake-avx512 (Windows*)• -xCORE-AVX512 -qopt-zmm-usage=low (Linux* および macOS*)/QxCORE-AVX512 /Qopt-zmm-usage:low (Windows*)• -xCORE-AVX512 -qopt-zmm-usage=high (Linux* および macOS*)/QxCORE-AVX512 /Qopt-zmm-usage:high (Windows*)
GCC コンパイラーでも、まもなく同様の low/high zmm を指定する方法がサポートされる予定です© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

49

メモリー依存のワークロードの例/QxCORE-AVX2 /tune=skylake-avx512 (Windows*)/QxCORE-AVX512 /Qopt-zmm-usage:low (Windows*)/QxCORE-AVX512 /Qopt-zmm-usage:high (Windows*)© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

50

計算集約型ワークロードのテスト例
シリアル

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

51

まとめ: アーキテクチャー最適化の推奨事項
推奨事項: アプリケーションの共有およびプライベート・データのサイズを、小さな非インクルーシブ L3 キャッシュと大きな L2 キャッシュに合わせて再度バランスを取ります
推奨事項: L2 キャッシュがアプリケーションの帯域幅要件を満たせば、Skylake
Server✝ マイクロアーキテクチャーでは L2 へのブロック化を検討します
推奨事項: データを共有しない場合、アプリケーションはコアあたりのキャッシュ容量
を L3 キャッシュだけでなく L2 と L3 キャッシュサイズの合計であると見なすべきです
推奨事項: データは 64 バイト境界でアライメントします✝開発コード名© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

52

まとめ：インテル® AVX-512 向けの推奨事項
推奨事項: 実行ターゲットが固定である場合、/Qx (-x) オプションで固有命令セットを生成します
推奨事項: /Qopt-zmm-usage オプションで、ZMM レジスターの使用を制御し、パフォーマンスを計測します。必要に応じて OpenMP* の simdlen、safelen 節を使用します
推奨事項: 実行ターゲットが固定でない場合、/Qax (-ax) オプションを使用してサポートされる最も低い命令セットに合わせてプロセッサー・ディスパッチを行います
推奨事項: FMA ユニット数に対応したプログラミングを行う場合、サポートされる
FMA ユニット数を手動で判定します© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

53

組込み関数を使用するガイドライン
•
•
•
•
•

静的および動的に割り当てられているバッファーを 64 バイトにアライメントします
定数向けの補助バッファーサイズを倍にします"__mm256_組込み関数名" のプリフィクスを "__mm512_" に変更します
変数のデータ型名を __m256 から __m512 へ変更します
ループの反復回数を半分にします (倍のストライド長に)アセンブリーを使用するガイドライン
•
•
•
•
•

静的および動的に割り当てられているバッファーを 64 バイトにアライメントします
必要であれば補足のバッファーサイズを 2 倍にします
命令ニーモニックの前に “v” プリフィクスを追加します
レジスター名を ymm から zmm へ変更します
ループの反復回数を半分にします (またはストライド長を倍にします)© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

54

パフォーマンスに優れたコード
インテル® Parallel Studio XE 201830 日間無料評価版をダウンロード:
makebettercode.com/parallelstudioxe-eval (英語) ›© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

55

関連情報
OpenMP* に関する情報

コードモダン化のリンク

OpenMP* による SIMD を利用するベクトル・プ
ログラミング

http://jp.xlsoft.com/documents/intel/catalog/
Intel_ParallelUniverse_Issue22_JPN.pdf



OpenMP* の現在と将来
https://jp.xlsoft.com/documents/intel/magazine/Intel_ParallelUniverse_Issue27_JPN.pdf

インテル® Xeon Phi™ プロセッサー向けにコードを現代化

https://jp.xlsoft.com/documents/intel/magazine/Intel_ParallelUniverse_Issue26_JPN.pdf



モダンコード開発者コミュニティー
http://www.isus.jp/modern-code/インテル® Code Modernization Enablement
Programhttps://software.intel.com/codemodernization-enablement (英語)インテル® Parallel Computing Centers
https://software.intel.com/ipcc (英語)
技術ウェビナーシリーズ (英語)https://software.intel.com/events/develop
ment-tools-webinars
インテル® Parallel Universe マガジン (日本語訳)
http://www.isus.jp/products/psxe/issue/© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

56

役立つ記事
自動ベクトル化が失敗した場合の対処:
https://www.isus.jp/products/c-compilers/what-to-do-when-auto-vectorization-fails/
ベクトル化によるパフォーマンスの向上:
https://www.isus.jp/products/c-compilers/improve-performance-with-vectorization/
コンパイラー最適化入門： 第 1 回 SIMD 命令とプロセッサーの関係:
https://www.isus.jp/products/c-compilers/compiler_part1/
インテルのベクトル化ツール:
https://www.isus.jp/intel-vectorization-tools/
ケーススタディー: インテル® アドバンスト・ベクトル・エクステンションを使用したブラック-ショールズの計算:
https://www.isus.jp/financial/case-study-computing-black-scholes-with-avx/
インテルの最新の並列化ツールによる明示的なベクトル化:
https://www.isus.jp/products/psxe/vectorization-gets-explicit/
明示的なベクトル・プログラミング – 最も一般的な手法:
https://www.isus.jp/products/psxe/explicit-vector-programming-bkm/
ループのベクトル化によるプログラムの最適化:
https://www.isus.jp/products/c-compilers/program-optimization-through-loop-vectorization/© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

57

お待たせしましたインテル® 64 アーキテクチャーおよび IA-32 アーキテクチャー最適化
リファレンス・マニュアル (参考訳版)
インテル® VTune™ Amplifier オンラインヘルプ (iSUS 翻訳版)
完成しました： https://www.isus.jp/ からどうぞ!!

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

58

パフォーマンス検証に使用した環境
プロセッサー• インテル® Core™ i7-7800X X シリーズ・プロセッサー、
6 コア、L3 8.53MB、3.50 (4.00) GHz、32GB• インテル® Core™ i7-5820K プロセッサー、
6 コア、L3 15MB、3.30 (3.60) GHz、32GB

オペレーティング・システム• Windows® 10 Creators Fall Edition (Windows® 10 バージョン 1709)
開発環境• インテル® C++ コンパイラー V18 Update 1© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

59

著作権と商標についておよび最適化に関する注意事項
本資料に掲載されている情報は現状のまま提供され、いかなる保証もいたしません。本資料は、明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず、いかなる知的財産権のライセンスを許諾するためのものではありません。製品に付属の売買契約書『Intel's Terms and Conditions of Sale』に規定されている場合を除き、インテルはいかなる責任を負うものではなく、またインテル製品の販売や使用に関する明示または黙示の保証 (特定目的への適合性、商品性に関する保証、第三者の特許権、著作権、その他、知的財産権の侵害への保証を含む) をするものではありません。
性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。SYSmark* や
MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。
© 2017 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴ、 Intel Core、Intel Optane、Xeon、Xeon Phi、Cilk、VTune は、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
Microsoft および Windows は、米国 Microsoft Corporation の、米国およびその他の国における登録商標または商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

最適化に関する注意事項
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2)、インテル® ストリーミン
グ SIMD 拡張命令 3 (インテル® SSE3)、ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 命令セットに関連する最適化およびその他の最適化が含まれます。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしま
せん。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイク
ロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。
改訂 #20110804© 2017 iSUS *その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

60

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

61