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
© Copyright 2024 Paperzz