SS研 HPCフォーラム

ポスト「京」開発の取り組み
次世代テクニカルコンピューティング開発本部
新庄 直樹
2016.8.26
0Copyright 2016 FUJITSU LIMITEDアウトライン 富士通のHPCへの取り組み
 ポスト「京」開発の取り組み
 ARMv8-Aアーキテクチャについて
 HPC拡張命令セットSVEについて
 まとめ

1

Copyright 2016 FUJITSU LIMITED富士通のHPCへの取り組み
お客様のニーズに合わせたHPCソリューションを提供
独自CPU搭載の専用スパコンとx86クラスタシステムの両面サポート
シングルシステムイメージ運用を実現するシステムソフトの開発・提供
高性能、高可用性、高信頼性の実現
K computer
専用スパコンPRIMEHPC（理研様と共同開発）

PRIMEHPC FX100
PRIMEHPC FX10

High-end
Divisional

CPUとインターコネクトを独自開発し、高いスケーラビリティを実現

x86クラスタ
CX400/CX600(KNL)

Large-Scale
SMP System

Departmental

PRIMERGYによるx86ク
ラスタで、最新のCPUとアクセラレータに対応

BX900/BX400

Work Group

RX2530/RX2540
2RX900
Copyright 2016 FUJITSU LIMITEDPRIMEHPC FXシリーズとポスト「京」の開発
Past2015

PRIMEHPC FXシリーズ

2020

FUJITSU PRIMEHPC
FX10•
••

FX100

 1.8x CPU perf.  4x(DP) / 8x(SP) CPU & Tofu2
 Easier High-density & lower energy「京」のデザインコンセプトを継承
し、Tofuをはじめシステムアーキテ
クチャを踏襲、強化
アプリケーション互換を維持
アプリケーション資産と利用ノウハ
ウを蓄積

installation

Technical Computing Suite (TCS) Handles millions of parallel jobs  Lower OS

 Context-aware

jitter using optimizing compiler
 MPI: Ultra scalable collective assistant  Job-dedicated, scalablecore
local file systemcommunication libraries

 FEFS: super scalable file system

Japan’s National Projects
Operation of K computer

ポスト「京」••

理研とともにポスト「京」システムの開発に取り組み中
ARMv8+HPC拡張命令をサポートするCPUを開発中

Post-KHPCI strategic apps program Priority Issues

Apps.
review/ FS

Post K computer development

FUJITSU developed HPC optimized ARM CPU
w/ lower energy
3

Copyright 2016 FUJITSU LIMITEDポスト「京」開発の取り組み
要件
「京」、PRIMEHPC FXシリーズとの連続性の堅持
電⼒あたり演算性能の向上
オープンコミュニティとの連携と普及

施策
レイテンシコアの高い演算性能と高いメモリバンド幅＋高いスケーラビリティ【スケーラビリティ向上】 ハイブリッド並列（VISIMPACT）、アシスタントコア、【演算性能向上】FMA、SIMD拡張、数学関数補助、【効率向上】

コア間バリア同期、セクタキャッシュ、ソフトウェア制御プリフェッチ、

最先端テクノロジ使いこなしと制御•半導体、メモリに最先端テクノロジの採用と電⼒制御

システムソフト、OSSの拡がるオープンアーキテクチャへの移⾏•ARM/Linuxのコミュニティとの協業を促進し、コミュニティとともにHPC技術、利用技術を磨き、利用者の利便性を高める

4

Copyright 2016 FUJITSU LIMITEDARM ISAの採用と強化
ARMとともにHPC拡張命令（SVE）を開発
SVE(Scalable Vector Extension)の策定に“Lead partner”として参画
富士通で実績を積んだHPC技術を盛り込み、ARM ISAのHPC分野での応用の拡大を目指す

ARM SVEをポスト「京」向けCPUに実装
オープンアーキテクチャSVEの採用で、HPCの技術開発の機会を拡大し加速•コンパイラ、システムソフト、アプリケーション開発で富士通からARMコミュニティに技術貢献し、コミュニティとの協業を促進•他社システム含めた、ARMサーバのインストールベースの拡大で、コミュニティが拡大、強化

PRIEMHPCシリーズで実績ある、独自拡張についても継続、強化する•コア間ハードウェアバリア、セクタキャッシュなど

マイクロアーキテクチャの継続強化と展開
ARM ISAへの対応も糧にマイクロアーキテクチャの強化を継続
継続するSPARC、メインフレームCPU開発にもシナジー

5

Copyright 2016 FUJITSU LIMITEDARMv8-Aアーキテクチャについて

6

Copyright 2016 FUJITSU LIMITEDARMアーキテクチャの歴史
25年に渡り電⼒効率の良いCPUを開発
〜ARMv7 : 32bit命令セット。組込み分野でデファクト化
ARMv8-A : 従来の32bit命令セットに加え、新規に64bit命令セットを追加

引用元: https://www.arm.com/ja/products/processors/instruction-set-architectures/index.php
7

Copyright 2016 FUJITSU LIMITEDARMv8-Aアーキテクチャ
アーキテクチャの狙い
市場に浸透した32bit命令セットであるARMv7に対する互換性を保つ
 64bitモードに対応して、サーバ市場にターゲットを拡大2つの実⾏状態
AArch32: 32bitの実⾏状態 (ARMv7互換)

AArch64

A64• 命令セット︓A32, T32
AArch64: 64bitの実⾏状態• 命令セット︓A64

AArch32

A32
T32

ARMv8-A CPU搭載製品例
arrows NX F-02H(Snapdragon 808 MSM8992)
MP30-AR0(X-Gene 1)
8

Copyright 2016 FUJITSU LIMITEDAArch64の命令セット
概要
64bitアドレス空間（物理メモリは48bitアドレス）
32bit固定⻑命令汎用レジスタ 31個
浮動小数点レジスタ32個（NEON用 128bit）

特徴使用頻度の高い命令列をより高速に実⾏• 多種類の命令サポート• 複合命令も多種類サポート• 例）シフト + 加算: add x1, x2, x3, LSL #2• 豊富なアドレッシングモード

NEON(Advanced SIMD)が128-bit SIMDをサポート• ARMv8-AのAArch64で、NEONが強化されIEEE754準拠化9Copyright 2016 FUJITSU LIMITEDNEON (Advanced SIMD)
概要
整数および単精度、倍精度浮動小数点数のSIMD命令を定義
128ビットレジスタ 32本 V0〜V31（下図参照）

特徴
マルチメディア演算やデータ処理用途のSIMD拡張命令
要素サイズ単位で、ベクトルレジスタを隙間なく利用できる
例︓8bit要素16個でVnを使用(Vn.16B)
V31
V3
V2
V1

127

64 63

32 31

Vn

V0

Dn

Qn
1016 15

Sn

87

Hn

0

Bn

Copyright 2016 FUJITSU LIMITEDHPC拡張命令セットSVEについて

11

Copyright 2016 FUJITSU LIMITEDSVE(Scalable Vector Extension)
 AArch64のHPC拡張命令セット
 富士通のHPCの経験・技術を活かし、ARMと共同設計
 NEONとは別の拡張として、HPCにフォーカスしたSIMD命令を定義
 SVE命令とNEON命令を同時に利用可能
 高度なSIMD化を実現する豊富な命令をサポート

 ポスト「京」では、SVEを採用する

SVE
ARMv8-A

v8.1-A

NEON

12v8.2-A

Copyright 2016 FUJITSU LIMITEDSVEのレジスタ構成
 Scalable vector registers Z0-Z31
 NEONのベクトルレジスタV0-V31の拡張
 単精度・倍精度浮動小数点と64,32,16,8ビット整数
Z31
Z2
Z1
Z0

ZnVn
128

 Scalable predicate registers

P15（1〜16）×128

 P0〜P7︓Load/Store, 算術演算制御
 P8〜P15︓Predicate操作
 FFR︓投機的LoadによるFaultを記録

P2
P1P0

V31
V2
V1V0Pn（1〜16）×16
13

Copyright 2016 FUJITSU LIMITEDSIMD ISA拡張の比較
SVE

HPC-ACE2

AVX-512

ARMv8-A

SPARC V9Intel 64bit幅

128～2048

256

512

単精度要素数

4～648（命令に制限有）

16

倍精度要素数2～32

48

汎用整数レジスタ（本）

31+SP

32+32

（v8-Aと同じ）（g,l,i,o+xg）

16

ベクトルレジスタ（本）

32128

32

プレディケートレジスタ（本）16（ベクトルレジスタを共用）

8

ベースISA

SIMD

14

Copyright 2016 FUJITSU LIMITEDSVEの優位性
1

SVEの特徴SVEの利点異なるベクトルレジスタ幅を持つ
SVEマシン間でのバイナリ可搬性• Scalable vector length2• Fault-tolerant speculative
vectorization

3

HPC-ACE2ではできなかったSIMD化の実現• Per-lane predication

4• Horizontal and serialized vector
operations

5

豊富な命令によるコンパクトな命令列の実現• Gather-load and scatter-store

15Copyright 2016 FUJITSU LIMITED1. Scalable Vector Length ISAがベクトル⻑を固定していない
 SVEは128bitから2048bitまで、128の倍数のベクトル⻑(VL)をサポート
 ベクトル⻑は、CPUがサポートする⻑さに、動的に決定される。

 異なるベクトル⻑のCPUで実⾏可能なバイナリを⽣成可能 ベクトル⻑を動的に決定可能にするVector-Length Agnostic(VLA)プログラミング
バイナリの可搬性
オブジェクトはCPUのベクトル⻑に依存しない

SVE

バイナリ/a.out

512bit SIMD

SVE
256bit SIMD

16

Copyright 2016 FUJITSU LIMITED2. Fault-tolerant Speculative Vectorization
Faultの扱いが異なるベクトル化が可能(1) LD1D : 通常SIMD load
⇒ 通常のFaultが発⽣(2) LDNF1D : Non-faulting SIMD load ⇒ 全てのFaultを抑止(3) LDFF1D : First-fault load
⇒ 最初の有効な要素のFault以外を抑止
ページフォールトが発生するアドレス

0x58
1Fault

0x50

0x48

0x40

1SIMD
ロード 1

1FaultFault

Z1.D[3](2)LDNF1D

Z1.D[3]

Z1.D[2]

Z1.D[1]Z1.D[0]

抑止

抑止

抑止

Fault

(3)LDFF1D

抑止Z1.D[3]抑止Z1.D[2]

Z1.D[1]抑止Z1.D[1]

逐次ループと同じFaultを再現
逐次ロード

0x30
1Fault(1)LD1D

Z1.D[2]0x38

Z1.D[0]抑止

Z1.D[0]

0x28

メモリ

0x20

1 ロード 1SIMD

1Z0.D[3]Z0.D[2]

Z0.D[1]Z0.D[0]Z0Z0.D[3]Z0.D[2]Z0.D[1]Z0.D[0]Z0Z0.D[3]Z0.D[2]

Z0.D[1]Z0.D[0]

Z0

逐次ロード

逐次ロード

逐次ロード

逐次ロード

逐次ロード

X0

X0

X0

X0X0Fault

17

P0

X0
Copyright 2016 FUJITSU LIMITED3. Per-lane Predication
Predicateレジスタによる要素（Lane)単位の演算制御
FADD Z0.D,

P0.D

P0/M,

1

Z0.D,

1

Z1.D

00

Z0.D

A[3]

A[2]

A[1]

A[0]

Z1.D

B[3]

B[2]

B[1]

B[0]

FADD

FADD

A[3] + B[3]A[2] + B[2]

A[1]

A[0]

Z0.D

18

Copyright 2016 FUJITSU LIMITEDPredicationの活用例
if文を含むループのSIMD化 PTRUE命令で、ALL TRUEを⽣成
 CMPGT命令で、条件分岐のマスクP1を⽣成
 P1によるマスク付きで LD1D, FADD, ST1Dを実⾏
ソースプログラム
int a[n];double b[n], c[n];....
for (i=0; i<n; ++i) {if (a[i] > 1) {b[i] = b[i] + c[i];}}アセンブライメージ
PTRUE P0.D
LD1D Z0.D, P0/Z, [X0]
CMPGT P1.D, P0/Z, Z0.D, #1
LD1D Z1.D, P1/Z, [X1]LD1D Z2.D, P1/Z, [X2]
FADD Z1.D, P1/M, Z1.D, Z2.D
ST1D Z1.D, P1,[X1]19// a// b// c// b

Copyright 2016 FUJITSU LIMITED4. Horizontal and Serialized Vector Operations
⽔平加算命令を利用したSIMD化// 総和プログラム
for (i=0; i<n; ++i) {s = s + a[i];}// ⽔平加算を用いたSIMD化イメージ
for (i=0; i<n; i+=8) {Z0 = a[i+7〜i]; // SIMD loadv = 水平加算(Z0);s = s + v}
SIMD loadZ0a[i+7]

a[i+6]

a[i+5]

a[i+4]

a[i+3]

a[i+2]

a[i+1]

a[i]水平加算 a[i] + a[i+1] + a[i+2] + a[i+3] + a[i+4] + a[i+5] + a[i+6] + a[i+7]v
20Copyright 2016 FUJITSU LIMITEDコンパイラの出⼒コード例
演算順序の変更を伴うSIMD化// 部分和⇒総和for (i=0; i<n; i+=8) {Z0[0] = Z0[0] + a[i];Z0[1] = Z0[1] + a[i+1];:Z0[7] = Z0[7] + a[i+7];}t = ⽔平加算(Z0)// 総和プログラム
for (i=0; i<n; ++i) {t = t + a[i];}a[7]+a[15]+a[23]+:Z0レジスタ要素に配列の部分和を代入

a[2]+a[10]+a[18]+:a[1]+a[9]+a[17]+:

SIMD実⾏a[0]+a[8]+a[16]+:Z0ｔ

Z0レジスタの水平加算命令でSIMDレジスタ要素の総和水平加算
21

Copyright 2016 FUJITSU LIMITED5. Gather-load and Scatter-store
Load/StoreともにPredicateによるマスク処理が可能ベクトルレジスタでインデックス指定可能なアドレッシングモードをサポート

例) LD1D Z0.D,P0/Z,[X0, Z1.D, LSL #3](ベース)

0x1000Z1.D (インデックス)

26

40X0+Z1.D[n]<<30x1010

0x10300x10200x1000

X00x1030

メモリ

88776655

1P0/Z

0x10100x1020443300x1000
22

1110/Z

Z0.D (定義)33022/Z
55

0
Copyright 2016 FUJITSU LIMITEDGather Load/Scatter Storeのアドレッシングモード
豊富なアドレッシングモードをサポート(1) LD1D Z0.D, P0/Z, [ X0, Z0 ]ベース
・・・スカラレジスタ
オフセット・・・ベクトルレジスタ(scale無し)(2) LD1D Z0.D, P0/Z, [ X0, Z0, LSL #3 ]ベース・・・スカラレジスタ
オフセット・・・ベクトルレジスタ(scale有り)(3) LD1D Z0.D, P0/Z, [ Z0, #<imm> ]ベース
・・・ベクトルレジスタ
オフセット
・・・即値アドレス演算のコンパクト化
23

Copyright 2016 FUJITSU LIMITEDSVEが実現する新しいSIMD化
1

SVEの特徴新しくSIMD化できるループ// WHILE ループ
while (A[i] != 0)i++;}• Scalable vector length2• Fault-tolerant speculative
vectorization{// 飛び出しのあるループ
for (i=0; i<n; ++i) {if (x[i] !=0) {break;}dst[i] = src[i];}3• Per-lane predication

4• Horizontal and serialized vector
operations// データ依存のあるループ
for (i=0; i<N; ++i) {B[i] = B[A[i]];}5• Gather-load and scatter-store

24

Copyright 2016 FUJITSU LIMITEDWHILEループのSIMD化
First-fault loadとPredicateによるSIMD化
Predicateを用いた、ベクトル⻑に無依存な終端条件と繰り返しの実現
投機的SIMDロードによる、配列AのFaultを再現
ソースプログラムベクトルコード(SVE)

int i = 0;
int A[N];while (A[i] != 0)
i++;
}

{

スカラコード(ARMv8)
adrmovloop: ldr
addcbnzx0, Aw1, #0
w1, [x0], #4
w1, w1, 1w1, loop

adrx0, A
movx2, #0dupz0.s,#0
ptrues p7.s// 配列Aのアドレス取得// 変数iの初期化// 条件式の定数値0を定義// 全要素TRUEのpredicate定義

loop:
setffr// FFRを初期化
ldff1w z1.s, p7/z, [x0, x2, LSL#2]// First-fault load
rdffr p0.b, p7/z// FFR読み込み
cmpeq p1.s, p0/z, z1.s, z0.s // 条件式の比較
brkbs p1.b, p0/z, p1.b// breakの設定
incpx2, p1.s// 添え字iをインクリメント
b.last loop// breakの設定に従って分岐25

Copyright 2016 FUJITSU LIMITEDデータ依存があるループのSIMD化
ループ全体をSIMD化
データ依存がある部分を、ベクトルレジスタの⽔平方向に繰返し依存がない要素を動的に判定し、Predicateを用いてSIMD実⾏
ソースプログラム
int i;
int A[n], B[n];for(i=0;i<n;++i) {B[i] = B[A[i]];}スカラコード(ARMv8)
movw0, 0
adr
x1, A
adr
x2, B
loop:
ldrsw x4, [x1,x0,lsl #2]
ldr
w4, [x2,x4,lsl #2]
str
w4, [x2,x0,lsl #2]
addw0, w0, 1
cmpw0, x5 // i<nbltloop

ベクトル化したループの疑似コード(SVE)// 16要素SIMDの場合
for (i=0; i<n; i+=16){
vec1 = vload(A[i])pred1 = cmplt(vec1, n)
pred3 = pred1// A[i]をLoad// i<nを表すPredicate// Predicateをコピー// ベクトルの要素を⽔平方向に処理
do {// 依存が無い要素を表すPredicateを生成
pred2 = dependence_resolved(i, vec1, pred3)// B[A[i]]をLoad
vec2 = vgather_load(B[vec1]], pred2)// B[i]をStorevstore(B[i], pred2) = vec2//// "A" 実⾏した要素を記録
pred3 = bitclear(pred3, pred2)// "B"} while (pred3に未実⾏の要素がある);// "B"
i = i + pcnt(pred1) // pred1の有効な要素の数だけ、iをインクリメント}
26

Copyright 2016 FUJITSU LIMITEDポスト「京」の機能比較
Post-K

FX100

KcomputerIntel
Xeon Phi

SIMD拡張命令セット

SVE

HPC-ACE2

HPC-ACE

AVX-512SIMD幅（bit）

512

256

128

512

積和演算（4オペランド）

○

○

○

×

逆数近似（除算、SQRT）

○

○

○

○

三⾓関数補助命令

○

○

○

×

指数関数補助命令

○

○

×

○

パックド単精度演算※

○

△×

○

ハードウェアバリア

○

○

○

×

セクタキャッシュ

○

○

○

×

ハードウェアプリフェッチ

○

○

○

○

△・・・対象命令が限定的※・・・倍精度に対して⼆倍の要素数を実⾏する命令
27

Copyright 2016 FUJITSU LIMITEDまとめ アプリの効率的実⾏を追求したISA
 オープンなアーキテクチャ
 モバイル ⇒ サーバ ⇒ HPCへ拡大中

 スパコン向けに進化してきたISA
 実績のあるマイクロアーキ
 コンパイラのコード⽣成技術

SIMD命令セットアーキテクチャ 「SVE」
先進ベンダとの積極的なコラボレーション、先端テクノロジの確実な実装を通して、ポスト「京」を成功させます。
28

Copyright 2016 FUJITSU LIMITED29

Copyright 2016 FUJITSU LIMITED