xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化...

29
1 滝沢 寛之 東北大学サイバーサイエンスセンター 2017年3月24日@秋葉原UDX 平成28年度 高速化ワークショップ Xevolverプロジェクト 計算科学と計算機科学をつなぐ架け橋を目指して

Upload: others

Post on 09-Oct-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

1

滝沢 寛之東北大学サイバーサイエンスセンター

2017年3月24日@秋葉原UDX平成28年度 高速化ワークショップ

Xevolverプロジェクト計算科学と計算機科学をつなぐ架け橋を目指して

Page 2: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

2

The Xevolver Project※1

•既存アプリで用いられているコード最適化手法調査• 江川隆輔 (東北大)

• システム依存のコード最適化パターンを明確化

•将来必要となるシステム依存最適化手法の考察• 須田礼仁 (東京大) and 高橋大介 (筑波大)

• 新世代システム向けのアルゴリズムや実装技術

•システム依存性の統一的表現方法の確立• 滝沢寛之 (東北大) (代表)

• アプリケーションからシステム依存性を切り離して表現

アプリ資産の次世代システムへの円滑な移行を支援アプリが特定のシステム構成を仮定して開発されていることが問題

※1 進化的アプローチによる超並列複合システム向け開発環境の創出

Page 3: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

3

もくじ•研究の背景と目的

• Xevolverコード変換フレームワーク

•事例研究

•まとめと今後の展開

Page 4: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

4

背景• HPCアプリケーション開発 = チームワーク

• アプリ開発者 ( = 計算科学)

• 正しいシミュレーション結果を得ることが目的

シミュレーションモデルとプログラムとの関係が主な関心事

• 性能エンジニア ( = 計算機科学/工学)

• シミュレーションを高速化することが目的

プログラムと計算システムとの関係が主な関心事

simulation codemodel system

Application requirements System requirements

Page 5: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

5

チームワークを阻む壁•東北大学サイバーサイエンスセンター

• 長年の高速化支援実績

•よくある問題・・・• 最適化作業中にアプリ開発者が新バージョンを作成した

• 最適化の結果,アプリ開発者が管理できないコードになった

• 新しいシステム向けにアプリを最適化し直さなければならなくなった

年 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014

件数 2 8 8 9 10 7 18 20 8 16 10 15 8 8 13 6 11 9

平均ベクトル化性能向上比

1.9 46.7 4.5 2.5 1.6 2.2 6.7 2.9 1.3 2.9 33 9.4 381 47 16.2 19.7 16.7 10.3

平均並列化性能向上比 11.1 18.4 31.7 8.6 4.9 2.8 18.6 4.5 5.3 8.1 1.9 5.1 3.6 48 17.2 15.3 12.9 7.9

アプリ開発者と性能エンジニアの上手な役割分担は?

Page 6: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

6

本研究の目的• システム依存性をアプリコードから分離して表現・管理

システム依存性を抽象化する技術• コンパイラ最適化• ライブラリ=共通インタフェースで各システムに最適化された実装を利用• 標準化されたプログラミングモデル・言語 = MPI, OpenMP, OpenACC …

Simulation code

System-aware implementations and optimizations

+

抽象化技術をすべてを適切に利用してもアプリ特有あるいはシステム特有の理由でアプリコードの修正が依然として必要 アプリコードの直接的修正を回避する方法を確立 = 高い性能可搬性の実現

Page 7: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

7

もくじ•研究の背景と目的

• Xevolverコード変換フレームワーク

•事例研究

•まとめと今後の展開

Page 8: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

8

性能最適化のためのコード修正• Bad News

• システム特有/アプリ特有の最適化→ケースバイケースでの対応

• 修正箇所はアプリコード全体に散在→保守性の著しい低下

• Good News

• 特定のシステム/アプリに限定して考えれば、同じ (or 似たような) コード修正が何度も求められる傾向

人手によるコード修正を比較的少ない種類の機械的なコード変換で代行できる可能性

コード変換フレームワークを基盤にしてシステム依存情報の分離

=手作業を減らすことで労力削減、知識や経験の蓄積・共有・再利用

Page 9: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

9

……………….……………….……………….……………….……………….……………….

Xevolver フレームワーク任意のコード修正を置き換えるためには多種多様なコード変換が必要=いくつかの変換ルールを事前に準備して組合せるだけでは対応不可

Xevolver : ユーザ定義コード変換のためのフレームワーク

……………….……………….……………….……………….……………….……………….

s2s

translator

……………….……………….……………….……………….……………….……………….

Optimized

for System A

コード変換ルール (変換レシピ)• 各目印に対して固有のコード変換を定義可能• システムごとに異なる変換ルールを利用可能• ユーザは独自のコード変換ルールを定義可能

事前定義あるいはユーザ定義の目印 (annotation)

App code

Optimized

for System B

……………….……………….……………….……………….……………….……………….

Takizawa et al.@HiPC14

Page 10: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

10

「コード変換」の表現方法•変換前後のコードの提示

• e.g. Loop unrolling の説明(en.wikipedia.org)

特別な知識 (e.g. XML and AST) がなくてもユーザ定義のコード変換を表現可能

Page 11: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

11

ルールの一般化• ループの中に具体的な文を記述 = 一般性のないルール

• 変換前のコードを具体的に書いたルールでは、入力コードが変換前のコードと正確に一致する必要

• 一般化されたルール• 任意の文を表現する特別な変数の利用

int x;for (x=0;x<100;x++) {

delete (x);}

int x;for (x=0;x<100;x+=3) {

delete (x);delete (x+1);delete (x+2);

}

int x;for (x=0;x<100;x++) {

$STMT;}

int x;for (x=0;x<100;x++) {

$STMT; x++;$STMT; x++;$STMT;

}

before

before

after

after

Page 12: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

12

変換ルールの自動生成program loop_reversal

!$xev tgen var(i_, i0_, i1_) exp!$xev tgen list(l_) stmt

!$xev tgen src begin!$xev loop revdo i_ = i0_, i1_

!$xev tgen stmt(l_)end do

!$xev tgen src end

!$xev tgen dst begindo i_ = i1_, i0_, -1

$!xev tgen stmt(l_)end do

!$xev tgen dst end

end program loop_reversal

A list variable that matches any

number of statements

The code pattern before transformation

Directive used as a mark for

transformation

Special directive that matches

arbitrary statement(s)

Loop is reversed

The loop body is copied to the dst

code.

The code pattern after transformation

Tgen variables that match any Fortran

variables

Suda et al.@LHAM15

Page 13: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

13

複数ルールの組合せ!$xev tgen var(i, i0, i1, p, q) exp!$xev tgen list(body1, body2, body3) stmt

!$xev tgen src begin!$xev loop unswitch

do i = i0, i1if (p) then

body1 = xevtgen_varelse if (q) then

body2 = xevtgen_varelse

body3 = xevtgen_varend if

end do

!$xev tgen src end

!$xev tgen dst beginif (p) then

do i = i0, i1body1 = xevtgen_var

end doelse

!$xev concat_if!$xev loop unswitch

do i = i0, i1if (q) then

body2 = xevtgen_varelse

body3 = xevtgen_varend if

end doend if

!$xev tgen dst end

!$xev tgen src begin!$xev loop unswitch

do i = i0, i1if (p) then

body1 = xevtgen_varelse

body2 = xevtgen_varend if

end do

!$xev tgen src end

!$xev tgen dst beginif (p) then

do i = i0, i1body1 = xevtgen_var

end doelse

do i = i0, i1body2 = xevtgen_var

end do

end if!$xev tgen dst end

Loop Unswitching• 簡単なルールを dummy Fortran + directivesで実装可能• 複数のルールを組み合わせることでも任意数の ELSE IFを支援• 出力コードの体裁を整えるためのコード合宿も必要

簡単なルールを組み合わせることで複雑なルールを表現

!BEFOREDO I=0…IF (…) …END IF

END DO

!AFTERIF (…) DO I=0……END DO

END IF

Suda et al.@LHAM15

Page 14: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

14

XMLデータを介した連携

高度な変換解析結果データの挿入

他のコンパイラとの連携

相互運用の実現

HPCToolkit

性能情報

Empirical Tuning System自動チューニング

ユーザー定義の変換

可視化リファクタリング(=対話的処理)

XcodeMLXevXML変換実装済み

XevWeb

Page 15: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

15

他のアプローチとの比較• 高水準言語

• C++ Template (e.g. Kokkos)• Lightweight languages (Python, Ruby, Scala, ….)

異なる言語での書き直しが必要(本研究では対象外)

• ドメイン特化型言語(DSL)• 利点

• 複雑な処理を簡潔に記述可能• 特にEDSLの場合にはコード修正は軽微(の可能性)

• 欠点• DSLの都合に合わせたコード修正が必要• 現在のアプリやシステムに合わせて設計(=将来?)

システムに依存しない代わりにDSL依存

• コンパイラツールによるトランスレータ作成• LLVM (ASTMatcher)やROSEなど

専門知識が必要であり性能エンジニアには困難

Page 16: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

16

もくじ•研究の背景と目的

• Xevolverコード変換フレームワーク

•事例研究

•まとめと今後の展開

Page 17: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

17

コード変換活用の事例研究• 性能リファクタリング支援

• 大規模コード中のパターン検索 (Wang@IJNC’15)

• 性能可搬性向上• OpenMP/OpenACCのカスタマイズ (Xiao@ATMG’14)

• アプリケーション特有の最適化• 数値タービン (Takizawa@SC’13 poster/HiPC’14)• ナノ粒子形成 (Takizawa@HiPC’14)• ステンシル計算用ディレクティブPACC (Kato@SC’14 Poster)• ステンシル計算のMPI通信隠ぺい (Hayashi@LHAM’16)• MSSG (Komatsu@LHAM’15)

• アプリケーション全体に対する一括変換• Xev-GMP (Hishinuma@IEEE-CSE’16)

• データレイアウト変換• MSSGのOpenACC対応 (Takizawa@HiPC’14)• XSLTでAoS-to-SoA変換を実装(Yamada@LHAM’15)• TgenでAoS-to-SoA変換を実装(Takizawa@SSP’16)

• 自動チューニング可能化• OpenTunerとの連携 (Takizawa@SC’16 poster)

Page 18: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

18

コード変換パターンの記述例program nt_opt!$xev tgen var(i1,i2,i3,i4,i5,i6,if) stmt!$xev tgen list(body) stmt!$xev tgen var(lstart,lend,II2,IIF) exp!$xev tgen condef(has_doi) contains stmt begin

DO I=II2,IIF!$xev tgen stmt(if)!$xev tgen stmt(body)

END DO!$xev tgen end!$xev tgen list(stmt_with_doi) stmt cond(has_doi)!$xev tgen src begin

DO L=lstart,lend!$xev tgen stmt(stmt_with_doi)

END DO!$xev end tgen src!$xev tgen dst begin

DO I=1,inumDO L = lstart, lend

IF (I .GE. IS(L) .AND. I .LE. IT(L)) THENEXIT

END IF!$xev tgen stmt(if)!$xev tgen stmt(body)

END DOEND DO

!$xev end tgen dstend program nt_opt

数値タービン (東北大山本悟研究室)• Fortranで記述された実用アプリ

• 長年の開発の歴史があるコード

• NEC SX-9向けに最適化• 最内ループの並列性を最大限利用

• 類似の構造を持つ44のカーネルループ• GPU向けのOpenACCコンパイラにはカーネルループを並列化不可

44のループをすべて修正する必要性

変換前のコードパターン

(vector-friendly)

変換後のコードパターン

(GPU-friendly)

Page 19: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

19

ユーザ定義変換による最適化

SX-9向けに開発されたアプリをGPU向けに最適化する変換を表現

手作業によるコード修正をコード変換パターンとして表現 GPUで実行時には変換、 SXで実行時には無変換=GPUとSXの両方で高性能を達成可能

コード変換適用による性能変化のグラフ

Page 20: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

20

program dl

!! Rule 1!! Replace the type definition of the data structure!$xev tgen src begin

type aos_treal:: xreal:: y

end type aos_t

type(aos_t) aosdata(100)!$xev end tgen src!$xev tgen dst begin

type soa_treal:: x(100)real:: y(100)

end type soa_t

type(soa_t) soadata!$xev end tgen dst

!! Rule 2!! Change the way of accessing the data structure!$xev tgen var(idx) exp!$xev tgen var(x) name!$xev tgen trans exp src(`aosdata(idx)%x`) dst(`soadata%x(idx)`)

end program dl

データ構造変換の事例

データ構造にあわせてコード変換ルールを定義する必要→ ユーザ定義のコード変換が必要な事例で有効性を実証

Takizawa et al.@SSP

Page 21: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

21

データレイアウト最適化

• データレイアウト最適化による性能向上• GPU性能にはメモリアクセスパターンが大きく影響する

• CPU性能への影響もデータサイズがキャッシュサイズを超えると大きくなる

• Xevolverでこの重要な最適化技法を表現可能• XSLTによる実現 (Yamada et al.@LHAM’15)

• Tgenによる実現 (Takizawa et al.@SSP’16)

• OpenACCの制限回避にも必要 (Takizawa et al.@HiPC’14)

Yamada et al.@LHAM15

Page 22: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

22

実アプリ(MSSG-A)での事例

• Directiveの挿入だけでは性能を引き出せない

➔コードの修正が必要

• Xevolverによるコード変換により最大約28%性能向上

• 他のプラットフォームで性能が下がる場合コード変換を適用しないことで対応

約28%

MSSGにおけるコード変更 出現数

OpenACC directiveの挿入 1562回

構造体(ポインタ)変更 793回

メモリロードの演算への置換

1回

データ依存関係の解消 2回

ループ交換 1回

ループ交換+コード移動 1回

ループ融合 → ループ交換 1回

ループ分割 → ループ交換 6回

コード移動 5+13回

Komatsu et al.@LHAM15

Page 23: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

23

•再利用可能な知識の表現と蓄積• 現在の最適化事例のカタログ化 (江川G)

• アンチパターンに注目した性能最適化

アンチパターンの検出と解消のノウハウ

= コードのパターンとその変換の組を再利用可能な形式で蓄積

「職人技」の形式的表現・蓄積

プラズマナノ粒子生成シミュレーション 天体地震シミュレーション

熱中症シミュレーション

混合燃焼乱流解析

大気・海洋シミュレーション(MSSG)高レイノルズ数乱流シミュレーション 構造格子流体シミュレーション

非構造格子流体シミュレーションタービン設計

Page 24: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

24

最適化事例のカタログ化• 56の最適化事例 (8月17日現在)

• 多様な最適化を集計

• 段階的に最適化が施される例も収録

• 現在,研究チームに留まらず,東北大学,JAMSTEC,大阪大学のチューナー,教職員と共有

• 最適化の現場でガイドラインとして活用

• 一般公開済み

https://one.sc.cc.tohoku.ac.jp/hpcref/

Page 25: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

25

国際共同研究へ発展Xevolver (JST CREST)

PI: Hiroyuki Takizawa

• Programming tools for performance engineering• Legacy code migration

• System-aware code optimizations

• Performance portability

• Software maintainability …etc

ExaFSA (SPPEXA 1st phase)

PI: Miriam Mehl (U. Stuttgart)

• Exascale simulation of FSA interactions• Modular multi-physics

environment

• Simultaneous fluid and structure solvers

• Multi-scale & multi-resolution fluid-acoustics … etc

Practical simulation codes (e.g. Ateles)Custom code transformation

ExaFSA (SPPEXA 2nd phase)- Performance engineering in an Exascale era

本CRESTの研究成果の有用性と実用性を評価する機会

実戦投入

Page 26: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

26

関連する成果•通信削減アルゴリズム

• 通信の回数を削減(演算数は増えるかも)• 疎行列反復法(須田ら@RIMS講究録 '16)

• 疎行列ベクトル積(須田@SWoPP'16)

•自動チューニングライブラリ• 並列GPUやXeon Phi向けの最適化手法の開拓

• 自動チューニング機能付きFFTライブラリ(Takahashi@IEEE-CSE’16)

•既存コードの移植支援• コンパイラメッセージに基づく並列化支援ツール

• コンパイラによる自動並列化情報を利用(Komatsu et al.@ISC’14)

• 性能情報取得・管理の自動化• コード修正と性能変化を関連付け(平澤ら@IPSJ-ACS’13)

• 計算結果の確認作業を効率化• 間違った結果になる途中結果を再利用(Hirasawa et al.@LHAM’15)

Page 27: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

27

もくじ•研究の背景と目的

• Xevolverコード変換フレームワーク

•事例研究

•まとめと今後の展開

Page 28: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

28

• ユーザ定義のコード変換の必要性• 既存の変換の組み合わせだけでは職人技的な性能最適化を実現不可

Xevolver: コード変換を容易に定義可能な環境

• 様々な事例研究で得られた知見• 元のコードへのシステム特有の変更を回避可能

アプリ開発者と性能エンジニアの責任分界点の明確化• 様々な実アプリケーションで有用性を実証

経験や知識を再利用可能な形式で表現・蓄積

• 今後の展開• 自動チューニング機能との連携

• 機械学習技術による性能最適化作業の支援・自動化

まとめ

Page 29: Xevolverプロジェクト - hpci-office.jp · ユーザ定義変換による最適化 sx-9向けに開発されたアプリを gpu向けに最適化する変換を表現 手作業によるコード修正をコード変換パターンとして表現

29

詳しくはウェブで!

• Xevolverを試してみてください• 詳しくは http://xev.sc.cc.tohoku.ac.jp

本研究はJST CREST 「進化的アプローチによる超並列複合システム向け開発環境の創出」の支援を受けて行ったものです。