講演資料 - PC Cluster Consortium

Omni XcalableMP Compiler version 0.9の開発状況
村井 均 理研 AICS
2014/10/24
第2回XMPワークショップ
1
Omni XcalableMP
..... ..... XMPソース
フロントエンド
•  理研AICSと筑波大で開発中
のXMP処理系 –  XMP/C –  XMP/Fortran 中間表現 (XcodeML)
トランスレータ
..... .....
中間表現 (XcodeML)
Omni XcalableMP
•  オープンソース •  トランスレータ + ランタイム
(MPIベース) •  OpenACC、XcalableACC対応
2014/10/24
..... .....
第2回XMPワークショップ
バックエンド (デコンパイラ)
XMPランタイム
..... .....
C/Fortran ソース ネイティブ コンパイラ
MPIライブラリ
実行形式
2
現況
•  ver. 0.8.0を公開中 –  XMPの主要な機能を実装済み –  一部制限事項あり •  対応プラットフォーム –  Linuxクラスタ、Crayマシン、京コンピュータ、
NEC SX、地球シミュレータ、BlueGene、日立SR •  今後の予定 –  ver.0.9.0 (11月)、ver.1.0 (4月)? 2014/10/24
第2回XMPワークショップ
3
ver. 0.9.0の機能(1)
XMP/C
XMP/F
nodes ○
○
distribute
○
○
align
○
○
shadow
○
○
loop
○
○
task
○
○
array
○
○
reflect
○ ○
gmove
△
△
coarray
○
○
組込み手続き
△
△
○ 実装済み。△ 制限あり。赤字:新規
2014/10/24
第2回XMPワークショップ
4
ver.0.9.0の機能(2)
•  array指示文 •  gmove指示文 –  片側通信機能(in/outモード)を除きサポート済
み。 •  配列処理組込み/ビルトイン関数 –  matmulとtransposeをサポート済み。 •  XMP/Fのcoarray機能
2014/10/24
第2回XMPワークショップ
5
新機能: ノード形状の実行時指定
•  環境変数XMP_NODE_SIZEnにより、全体ノー
ド配列の形状を指定。 → 一つのバイナリを任意のノード形状で実行できる。
foo.f90
$ export XMP_NODE_SIZE0=4 $ export XMP_NODE_SIZE1=8 $ export XMP_NODE_SIZE2=4 $ mpiexpec -­‐n 128 ./a.out
2014/10/24
// 実行時にp(4,8,4)と // 見なされる。 !$xmp nodes p(*,*,*)
第2回XMPワークショップ
6
実装: 多次元仮引数の扱い
XMP/Fソース
変換後ソースのイメージ(新)
subroutine sub(a) real a(0:n-­‐1,0:n-­‐1) !$xmp align a(i,j) with t(i,j) a(i,j) = ... end subroutine sub
subroutine sub(a) real a(1) // ローカルサイズmを計算 call xmp_sub(a) contains subroutine xmp_sub(a) real a(m,m) // 二次元で宣言 a(i,j) = ... end subroutine xmp_sub end subroutine sub
変換後ソースのイメージ(従来)
subroutine sub(a) real a(1) // 一次元で宣言 // ローカルサイズmを計算 a(i+j*m) = ... end subroutine sub
2014/10/24
配列を多次元のまま扱うことで、
バックエンドコンパイラの最適化
を促進できる。
第2回XMPワークショップ
7
実装: 通信ライブラリ
•  現在 –  一対一通信、集団通信 •  MPI-­‐2 –  片側通信(coarray) •  GASNet (主にIBネットワーク) •  拡張RDMAインタフェース (京) •  将来 –  MPI-­‐3を全面的に採用したい ← ポータビリティ、工数 ∵ 片側通信機能が改善されている。 ∵ 非同期グローバル通信(e.g. bcast, reduction)の実装に、ノン
ブロッキング集団通信が使える。
2014/10/24
第2回XMPワークショップ
8
新プラットフォームにおける評価
•  SR16000@KEK •  BlueGene/Q (JUGENE@JSC) •  地球シミュレータ@JAMSTEC
2014/10/24
第2回XMPワークショップ
9
SR16000@KEK
HPL
HIMENO
1,000 250000 GFLOPS
MFLOPS
300000 200000 150000 100000 100 ピーク性能
50000 実効性能
0 1 4 8 Node(s)
10 1 2 4 8 16 32 Processor Core(s)
GByte/s
STREAM 600 500 400 300 200 100 0 •  HIMENOとSTREAMはマルチノード、
ハイブリッド並列(32スレッド) •  HPLは1ノード、フラット並列
1 4 8 Node(s)
2014/10/24
第2回XMPワークショップ
10
BlueGene/Q (JUGENE@JSC)
HIMENO HPL 150000.00 2500.00 2000.00 100000.00 1500.00 1000.00 50000.00 500.00 0.00 0.00 0 5000 10000 15000 20000 0 10 20 STREAM 30 40 50 60 70 FFT 500000 40000 400000 30000 300000 20000 200000 10000 100000 0 0 0 2014/10/24
5000 10000 15000 20000 0 第2回XMPワークショップ
5000 10000 15000 20000 11
地球シミュレータ@JAMSTEC
MFLOPS
HIMENO 3500 3000 2500 2000 1500 1000 500 0 0 2 4 6 8 10 #nodes
※ Fortranモジュール中の分散配
列の扱いに難(v0.9では解決)
があるため、他のベンチマーク
は未評価。
2014/10/24
•  large(512x256x256) •  1ノード内フラット並
列 •  ベクトル化率90-­‐95% •  絶対性能、スケーラ
ビリティとも調査は不
十分。
第2回XMPワークショップ
12
まとめ
•  2015年4月のv1.0リリースに向け、鋭意開発
中。 v0.95になるかも……(非同期グローバル通信の実装にはMPI-­‐3機能が必
須だが、メインターゲットである京で未提供) •  各プラットフォームへのポーティングおよび評
価も継続中。 雑談: あらゆる環境に対して、性能までも対応するのはすごく大変。 •  拡張機能として、XcalableACC機能を実装中。
2014/10/24
第2回XMPワークショップ
13