Top Banner
ppOpenATによる静的コード生成 で実現する 自動チューニング方式の評価 片桐 孝洋、松本 正晴、大島 聡史 (東京大学情報基盤センター) 1 日本応用数理学会2015年 年会 201599日〜11日、金沢大学角間キャンパス 911日(金)会員主催OS:先進的環境での数値計算と自動チューニング技術(1) B会場:103講義室、9:309:50
37

ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

Apr 12, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

ppOpen‐ATによる静的コード生成で実現する

自動チューニング方式の評価

片桐 孝洋、松本 正晴、大島 聡史

(東京大学情報基盤センター)

1

日本応用数理学会2015年年会2015年9月9日〜11日、金沢大学角間キャンパス9月11日(金)会員主催OS:先進的環境での数値計算と自動チューニング技術(1)B会場:103講義室、9:30‐9:50

Page 2: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

話の流れ

1. 背景

2. Dynamic Code Generation Auto‐tuning (DCG‐AT) と Static Code Generation Auto‐tuning (SCG‐AT)

3. コード選択機能

4. 予備評価– FDMコードを例にして

5. おわりに

Page 3: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

話の流れ

1. 背景

2. Dynamic Code Generation Auto‐tuning (DCG‐AT) と Static Code Generation Auto‐tuning (SCG‐AT)

3. コード選択機能

4. 予備評価– FDMコードを例にして

5. おわりに

Page 4: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

背景 スレッド数の増加/プログラミングモデルの複雑化

– マルチコアCPU、メニーコアCPUの浸透• マルチコアCPU: 16‐32 コア, 32‐64 スレッド、かつHyper Threading (HT) や Simultaneous Multithreading (SMT)付き

• メニーコアCPU: Xeon Phi – 60コア、240スレッド(HT実行時)

– ハイブリッドMPI/OpenMP実行• MPIプロセス数、OpenMPスレッド数の組合せ数増加

– チューニングの手間が増えている!

4

性能可搬性(Performance Portability (PP))◦ 複数の計算機環境でも高性能を維持

複数のCPUだけではなく、複数のコンパイラでも

実行時情報、例えば<ループ長>や<スレッド数>の情報は重要

◦ Auto‐tuning (AT) はPPを実現するための技術の1つ

Page 5: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

ppOpen‐AT によるATソフトウェア構築方式

オリジナルコード

ディレクティブによる記載

ユーザ知識ライブラリ

開発者

① ライブラリ公開前

Candidate1

Candidate2

Candidate3

候補nオートチューナー

公開ライブラリ

自動コード生成

:対象計算機

実行時間④

選択

実行時

Xabclib、ABCLib、ppOpen‐AT(ABCLibScript)のAT方式

自動チューニングされたコード実行

ライブラリ呼び出し

ライブラリユーザ

Page 6: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

ppOpen‐APPL/FDMへの適用シナリオ

12

AT無しで、 適化されたカーネルの実行

ライブラリ利用者

ATパラメタの指定とライブラリの実行(OAT_AT_EXEC=1)

■オートチューナの実行固定ループ長での実行(行列サイズ、MPIプロセス数、OpenMPスレッド数の固定による)

対象カーネルの実行時間の計測 適パラメタ情報の収納

ATパラメタの指定とライブラリの実行(OAT_AT_EXEC=0)

速カーネル情報の収納

ATなしで 速カーネルを使う(行列サイズ、MPIプロセス数、

OpenMPスレッド数を変えない限り有効)

行列サイズ、MPIプロセス数、

OpenMPスレッド数の指定

[FIBER方式、Katagiri et.al., 2003]

実行起動前時AT

Page 7: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

話の流れ

1. 背景

2. Dynamic Code Generation Auto‐tuning (DCG‐AT) と Static Code Generation Auto‐tuning (SCG‐AT)

3. 階層型AT処理とコード選択機能

4. 予備評価– FDMコードを例にして

5. おわりに

Page 8: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

従来のATの流れ:Dynamic Code Generation Auto‐tuning (DCG‐AT)

対象の計算機の決定

ATソフトウェアのインストール(コンパイル)

オートチューナの起動

コード生成

コンパイル

実行

性能は十分か?

適化コード

本計算の実行

Yes

No

インストール時のみ行う

Page 9: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

提案AT方式の流れ:Static Code Generation Auto‐tuning (SCG‐AT)

対象の計算機の決定

ATソフトウェアのインストール(コンパイル)

実行パラメタ指定

オートチューナの起動

コードの指定

性能は十分か?

適化コード

本計算の実行

Yes

No

インストール時実行起動前時実行時で可能

コード生成

Page 10: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

SCG‐ATの利点と欠点 利点

– コードの再コンパイルが不要1. (コンパイルに費やす)ATのための時間が削減2. ATを実行する計算機上(例えば、ログインノード)に

余分な負荷を与えない– 実行時のコード自動生成が不要

1. コード自動生成のためのソフトウェアスタック(スクリプト言語など)が不要

2. ATシステム内でのバッチジョブスクリプトの書き直しが不要3. 処理の自動化で必要なデーモン起動・常駐などが不要– ATで効果的となるアルゴリズム選択(コード選択)の実装が容易

欠点– AT候補のコードをプログラム中に持つため、コード量が増大– 適化済み情報を得るための処理(ファイルアクセスなど)が追加

されるため、ATのための処理時間(ATのオーバーヘッド)が増える– (SCG‐ATの特性のswitch文の挿入による)AT候補を選択する処理の

挿入により、オリジナルコードの実行に対し、キャッシュなどの振る舞いが異なることがある

Page 11: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

話の流れ

1. 背景

2. Dynamic Code Generation Auto‐tuning (DCG‐AT) と Static Code Generation Auto‐tuning (SCG‐AT)

3. コード選択機能

4. 予備評価– FDMコードを例にして

5. おわりに

Page 12: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

コード選択の例(FDMコード)

Page 13: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

ppOpen‐APPL/FDM(Seism3D)の流れ図

22

),,,(

}],,,)21({},,)

21({[1

),,(

2/

1

zyxqp

zyxmxzyxmxcx

zyxdxd

pqpq

M

mm

pq

中心差分近似による空間微分の評価

),,(,121

21

zyxptfzyx

uu np

nzp

nyp

nxpn

p

n

p

Leapfrog法による陽解法時間発展

開始

Velocity Derivative (def_vel)

Velocity Update (update_vel)

Stress Derivative (def_stress)

Stress Update (update_stress)

反復の終了?NO

YES

終了

Velocity PML condition (update_vel_sponge)Velocity Passing (MPI) (passing_vel)

Stress PML condition (update_stress_sponge)Stress Passing (MPI) (passing_stress)

Page 14: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

今までの実装 (ベクトル機向け)

call ppohFDM_pdiffx3_p4( SXX,DXSXX, NXP,NYP,NZP,NXP0,NXP1,NYP0,NYP1,NZP0,NZP1, DX )call ppohFDM_pdiffy3_p4( SYY,DYSYY, NXP,NYP,NZP,NXP0,NXP1,NYP0,NYP1,NZP0,NZP1, DY call ppohFDM_pdiffx3_m4( SXY,DXSXY, NXP,NYP,NZP,NXP0,NXP1,NYP0,NYP1,NZP0,NZP1, DX )call ppohFDM_pdiffy3_m4( SXY,DYSXY, NXP,NYP,NZP,NXP0,NXP1,NYP0,NYP1,NZP0,NZP1, DY )call ppohFDM_pdiffx3_m4( SXZ,DXSXZ, NXP,NYP,NZP,NXP0,NXP1,NYP0,NYP1,NZP0,NZP1, DX )call ppohFDM_pdiffz3_m4( SXZ,DZSXZ, NXP,NYP,NZP,NXP0,NXP1,NYP0,NYP1,NZP0,NZP1, DZ )call ppohFDM_pdiffy3_m4( SYZ,DYSYZ, NXP,NYP,NZP,NXP0,NXP1,NYP0,NYP1,NZP0,NZP1, DY )call ppohFDM_pdiffz3_m4( SYZ,DZSYZ, NXP,NYP,NZP,NXP0,NXP1,NYP0,NYP1,NZP0,NZP1, DZ )call ppohFDM_pdiffz3_p4( SZZ,DZSZZ, NXP,NYP,NZP,NXP0,NXP1,NYP0,NYP1,NZP0,NZP1, DZ )

!! Substitute to Reduced‐order derivatives at around model boundarycall ppohFDM_truncate_diff_stress(idx,idy,idz)

if( is_fs .or. is_nearfs ) thencall ppohFDM_bc_stress_deriv( KFSZ,NIFS,NJFS,IFSX,IFSY,IFSZ,JFSX,JFSY,JFSZ )

end if

call ppohFDM_update_vel       ( 1, NXP, 1, NYP, 1, NZP )

中心差分近似による空間微分の評価

モデル境界の処理

Leapfrog法による陽解法時間発展

Page 15: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

今までの実装(ベクトル機向け)subroutine OAT_InstallppohFDMupdate_stress(..)!$omp parallel do private(i,j,k,RL1,RM1,RM2,RLRM2,DXVX1,DYVY1,DZVZ1,…)do k = NZ00, NZ01do j = NY00, NY01do i = NX00, NX01RL1   = LAM (I,J,K); RM1   = RIG (I,J,K);  RM2   = RM1 + RM1; RLRM2 = RL1+RM2DXVX1 = DXVX(I,J,K);  DYVY1 = DYVY(I,J,K);  DZVZ1 = DZVZ(I,J,K)D3V3  = DXVX1 + DYVY1 + DZVZ1SXX (I,J,K) = SXX (I,J,K) + (RLRM2*(D3V3)‐RM2*(DZVZ1+DYVY1) ) * DTSYY (I,J,K) = SYY (I,J,K)  + (RLRM2*(D3V3)‐RM2*(DXVX1+DZVZ1) ) * DTSZZ (I,J,K) = SZZ (I,J,K)  + (RLRM2*(D3V3)‐RM2*(DXVX1+DYVY1) ) * DTDXVYDYVX1 = DXVY(I,J,K)+DYVX(I,J,K);  DXVZDZVX1 = DXVZ(I,J,K)+DZVX(I,J,K)DYVZDZVY1 = DYVZ(I,J,K)+DZVY(I,J,K)SXY (I,J,K) = SXY (I,J,K) + RM1 * DXVYDYVX1 * DTSXZ (I,J,K) = SXZ (I,J,K) + RM1 * DXVZDZVX1 * DTSYZ (I,J,K) = SYZ (I,J,K) + RM1 * DYVZDZVY1 * DT

end doend do

end doretuenend

Leapfrog法による陽解法時間発展

手続きコールのたびに配列に入出力

→B/F値が大きくなる

Page 16: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

スカラ計算機向け実装 (Intel向き)!$omp parallel do private (i,j,k,RL1,RM1,RM2,RLRM2,DXVX, …)do k_j=1, (NZ01‐NZ00+1)*(NY01‐NY00+1)k=(k_j‐1)/(NY01‐NY00+1)+NZ00j=mod((k_j‐1),(NY01‐NY00+1))+NY00do i = NX00, NX01RL1   = LAM (I,J,K);  RM1   = RIG (I,J,K)RM2   = RM1 + RM1; RLRM2 = RL1+RM2

! 4th order diffDXVX0 = (VX(I,J,K)  ‐VX(I‐1,J,K))*C40/dx &

‐ (VX(I+1,J,K)‐VX(I‐2,J,K))*C41/dxDYVY0 = (VY(I,J,K)  ‐VY(I,J‐1,K))*C40/dy &

‐ (VY(I,J+1,K)‐VY(I,J‐2,K))*C41/dyDZVZ0 = (VZ(I,J,K)  ‐VZ(I,J,K‐1))*C40/dz &

‐ (VZ(I,J,K+1)‐VZ(I,J,K‐2))*C41/dz! truncate_diff_vel! X dir

if (idx==0) thenif (i==1)thenDXVX0 = ( VX(1,J,K) ‐ 0.0_PN    )/ DX

end ifif (i==2) thenDXVX0 = ( VX(2,J,K) ‐ VX(1,J,K) )/ DXend if

end ifif( idx == IP‐1 ) thenif (i==NXP)then

DXVX0 = ( VX(NXP,J,K) ‐ VX(NXP‐1,J,K) ) /  DXend if

end if

! Y dirif( idy == 0 ) then ! Shallowmostif (j==1)thenDYVY0 = ( VY(I,1,K) ‐ 0.0_PN    )/ DY

end ifif (j==2)thenDYVY0 = ( VY(I,2,K) ‐ VY(I,1,K) ) / DY

end ifend ifif( idy == JP‐1 ) thenif (j==NYP)thenDYVY0 = ( VY(I,NYP,K) ‐ VY(I,NYP‐1,K) )/ DY

end ifend if

! Z dirif( idz == 0 ) then ! Shallowmostif (k==1)thenDZVZ0 = ( VZ(I,J,1) ‐ 0.0_PN    ) / DZ

end ifif (k==2)thenDZVZ0 = ( VZ(I,J,2) ‐ VZ(I,J,1) ) / DZ

end ifend ifif( idz == KP‐1 ) thenif (k==NZP)thenDZVZ0 = ( VZ(I,J,NZP) ‐ VZ(I,J,NZP‐1) )/ DZ

end ifend if

モデル境界の処理

中心差分近似による空間微分の評価

DXVX1 = DXVX0;  DYVY1 = DYVY0DZVZ1 = DZVZ0;  D3V3  = DXVX1 + DYVY1 + DZVZ1SXX (I,J,K) = SXX (I,J,K) &+ (RLRM2*(D3V3)‐RM2*(DZVZ1+DYVY1) ) * DT

SYY (I,J,K) = SYY (I,J,K) &+ (RLRM2*(D3V3)‐RM2*(DXVX1+DZVZ1) ) * DTSZZ (I,J,K) = SZZ (I,J,K) &+ (RLRM2*(D3V3)‐RM2*(DXVX1+DYVY1) ) * DTend do

end do!$omp end parallel d

Leapfrog法による陽解法時間発展

B/F値は小さくなるループ内部に

IF文があり適化を阻害

Page 17: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

Select節によるコード選択と階層的なAT指定

Program main….!OAT$ install select region start!OAT$ name ppohFDMupdate_vel_select!OAT$ select sub region startcall ppohFDM_pdiffx3_p4( SXX,DXSXX,NXP,NYP,NZP,….)call ppohFDM_pdiffy3_p4( SYY,DYSYY, NXP,NYP,NZP,…..)…if( is_fs .or. is_nearfs ) thencall ppohFDM_bc_stress_deriv( KFSZ,NIFS,NJFS,IFSX,….)end ifcall ppohFDM_update_vel    ( 1, NXP, 1, NYP, 1, NZP )!OAT$ select sub region end

!OAT$ select sub region startCall ppohFDM_update_vel_Intel  ( 1, NXP, 1, NYP, 1, NZP )!OAT$ select sub region end

!OAT$ install select region end

上位のAT指定 Select節でコード選択が記述可能

subroutine ppohFDM_update_vel(….)….!OAT$ install LoopFusion region start!OAT$ name ppohFDMupdate_vel!OAT$ debug (pp)!$omp parallel do private(i,j,k,ROX,ROY,ROZ)do k = NZ00, NZ01do j = NY00, NY01do i = NX00, NX01

…..….

下位のAT指定

subroutine ppohFDM_pdiffx3_p4(….)….!OAT$ install LoopFusion region start….

Page 18: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

ATによる関数呼び出し構成開始

Stress Derivative (def_stress)

Stress Update (update_stress)

反復の終了?NO

YES

終了

Velocity PML condition (update_vel_sponge)

Velocity Passing (MPI) (passing_vel)

Stress PML condition (update_stress_sponge)

Stress Passing (MPI) (passing_stress)

Velocity Derivative (def_vel)

Velocity Update (update_vel)

メインプログラム中

Velocity Update (update_vel_Intel)

Stress Update (update_stress_Intel)

選択

選択

update_vel_select

update_stress_select

update_vel_select

update_stress_select

候補候補候補候補

候補候補候補候補

候補候補候補候補

候補候補候補候補

候補候補候補候補

候補候補候補候補

候補候補候補候補

候補候補候補候補

:自動生成コード

Page 19: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

話の流れ

1. 背景

2. Dynamic Code Generation Auto‐tuning (DCG‐AT) と Static Code Generation Auto‐tuning (SCG‐AT)

3. コード選択機能

4. 予備評価– FDMコードを例にして

5. おわりに

Page 20: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

Candidates in Conventional AT1. Kernel update_stress

– 8 Kinds of Candidates with Loop Collapse and Loop Split.2. Kernel update_vel

– 6 Kinds of Candidates with Loop Collapse and Re‐ordering of Statements. 3 Kinds of Candidates with Loop Collapse.3. Kernel update_stress_sponge4. Kernel update_vel_sponge5. Kernel ppohFDM_pdiffx3_p46. Kernel ppohFDM_pdiffx3_m47. Kernel ppohFDM_pdiffy3_p48. Kernel ppohFDM_pdiffy3_m49. Kernel ppohFDM_pdiffz3_p410. Kernel ppohFDM_pdiffz3_m4 Kinds of Candidates with Loop Collapse for Data Packing and Data 

Unpacking.11. Kernel ppohFDM_ps_pack12. Kernel ppohFDM_ps_unpack13. Kernel ppohFDM_pv_pack14. Kernel ppohFDM_pv_unpack

34

Total Number of Kernel Candidates: 47+ 2 (code selection)= 49

Page 21: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

適パラメタ分布

Page 22: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

適パラメタ分布 (update_stress_select)8ノード

0

1

2

3

4

0 1 2 3 4 5 6 7 8

Phi Ivy Bridge_HT1 FX10

MPI並列性

パラメタ値

スカラ計算機向きコード(Intel向きコード)

ベクトル計算機向きコード(従来コード)

Page 23: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

適パラメタ分布 (update_vel_select)8ノード

0

1

2

3

4

0 1 2 3 4 5 6 7 8

Phi Ivy Bridge_HT1 FX10

MPI並列性

パラメタ値

スカラ計算機向きコード(Intel向きコード)

ベクトル計算機向きコード(従来コード)

Page 24: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

XEON PHIHT4

Page 25: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

Machine Environment (8 nodes of the Xeon Phi) The Intel Xeon Phi  Xeon Phi 5110P (1.053 GHz), 60 cores Memory Amount:8 GB (GDDR5) Theoretical Peak Performance:1.01 TFLOPS One board per node of the Xeon phi cluster InfiniBand FDR x 2 Ports 

Mellanox Connect‐IB PCI‐E Gen3 x16 56Gbps x 2 Theoretical Peak bandwidth 13.6GB/s Full‐Bisection

Intel MPI Based on MPICH2, MVAPICH2 Version 5.0 Update 3 Build 20150128 

Compiler:Intel Fortran version 15.0.3 20150407 Compiler Options:

‐ipo20 ‐O3 ‐warn all ‐openmp ‐mcmodel=medium ‐shared‐intel –mmic‐align array64byte

KMP_AFFINITY=granularity=fine, balanced (Uniform Distribution of threads between sockets)

Page 26: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

Execution Details• ppOpen‐APPL/FDM ver.0.2• ppOpen‐AT ver.0.2• The number of time step: 2000 steps• The number of nodes: 8 node• Native Mode Execution• Target Problem Size (Almost maximum size with 8 GB/node)– NX * NY * NZ = 1536 x  768 x 240 / 8 Node– NX * NY * NZ = 768 * 384 * 120 / node(!= per MPI Process)

• The number of iterations for kernels to do auto‐tuning: 100

Page 27: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

0

200

400

600

800

1000

1200

1400

P8T240 P16T120 P32T60 P64T30 P128T15 P240T8 P480T4

Others

IO

passing_stresspassing_velocityupdate_vel_spongeupdate_vel

update_stress_spongeupdate_stress

Whole Time (2000 time steps)[Seconds]

Comp.Time

Comm. Time

NX*NY*NZ = 1536x768x240/ 8 Node

Hybrid MPI/OpenMPPhi : 8 Nodes (1920 Threads)

Original Code

AT without code selection

Full AT

Page 28: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

1.12 

1.31 

1.04 

1.17 

1.55 

1.78 

0.95 

1.48 

1.15 

1.50 

1.09 

1.71 

1.17 

1.68 

0.80

1.00

1.20

1.40

1.60

1.80

2.00

P8T240 P16T120 P32T60 P64T30 P128T15 P240T8 P480T4

Speedups

Whole Time (Speedups)[Speedups]

NX*NY*NZ = 1536x768x240/ 8 Node

Original Code

AT without code selection

Full AT

Hybrid MPI/OpenMPPhi : 8 Nodes (1920 Threads)

今までのATとコード選択で

大1.78x

Page 29: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

0

50

100

150

200

250

300

350

400

P8T240 P16T120 P32T60 P64T30 P128T15 P240T8 P480T4

update_stress

update_stress (2000 time step)[Seconds]

NX*NY*NZ = 1536x768x240/ 8 Node

Hybrid MPI/OpenMPPhi : 8 Nodes (1920 Threads)

Original Code

AT without code selection

Full AT

Page 30: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

1.47 

2.09 

1.03 1.46 

3.93 

6.44 

0.81 

3.35 

1.73 

3.21 

1.12 

4.39 

1.18 

3.44 

0.00

1.00

2.00

3.00

4.00

5.00

6.00

7.00

P8T240 P16T120 P32T60 P64T30 P128T15 P240T8 P480T4

Speedups

update_stress (speedups)[Seconds]

NX*NY*NZ = 1536x768x240/ 8 Node

Original Code

AT without code selection

Full AT

Hybrid MPI/OpenMPPhi : 8 Nodes (1920 Threads)

コード選択で

大6.44x

Page 31: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

0

50

100

150

200

250

300

350

400

P8T240 P16T120 P32T60 P64T30 P128T15 P240T8 P480T4

update_vel

update_vel (2000 time step)[Seconds]

NX*NY*NZ = 1536x768x240/ 8 Node

Hybrid MPI/OpenMPPhi : 8 Nodes (1920 Threads)

Original Code

AT without code selection

Full AT

Page 32: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

1.11  1.11 

1.00 1.00 

0.99 1.01 1.04 0.97 

1.09 

1.19 1.18 1.18 1.21 

1.25 

0.50

0.60

0.70

0.80

0.90

1.00

1.10

1.20

1.30

1.40

1.50

P8T240 P16T120 P32T60 P64T30 P128T15 P240T8 P480T4

speedups

update_vel (speedups)[Seconds]

NX*NY*NZ = 1536x768x240/ 8 Node

Original Code

AT without code selection

Full AT

Hybrid MPI/OpenMPPhi : 8 Nodes (1920 Threads)

Page 33: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

オリジナリティ (AT言語)AT Language 

/ Items#1

#2

#3

#4

#5

#6

#7

#8

ppOpen‐AT OAT Directives ✔ ✔ ✔ ✔ ✔ なし

Vendor Compilers 対象外 Limited ‐Transformation 

Recipes Recipe

Descriptions✔ ✔ ChiLL

POET Xform Description ✔ ✔ POET translator, ROSE

X language  Xlang Pragmas ✔ ✔ X Translation,‘C and tcc

SPL SPL Expressions ✔ ✔ ✔ A Script Language

ADAPT

ADAPT Language

✔ ✔ PolarisCompiler 

Infrastructure, Remote Procedure 

Call (RPC)

Atune‐IL Atune Pragmas ✔ A Monitoring Daemon

PEPPHER PEPPHER Pragmas (interface)

✔ ✔ ✔ PEPPHER task graph and run-time

Xevolver Directive Extension(Recipe Descriptions)

(✔) (✔) (✔) ROSE,XSLT Translator

#1: 複数コンパイラ環境の支援手法 #2: 実行時のループ長の取得#3: 演算回数の増加を認めるループ分割、および、その分割したループに対するループ融合#4: 内側ループの式並び変更 #5:実装選択(階層AT処理)の概念 #6: アルゴリズム選択#7: 実行情報フィードバックによるコード生成 #8: ソフトウェアスタックの要求

(ユーザ自身で定義する )

Page 34: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

話の流れ

1. 背景

2. Dynamic Code Generation Auto‐tuning (DCG‐AT) と Static Code Generation Auto‐tuning (SCG‐AT)

3. コード選択機能

4. 予備評価– FDMコードを例にして

5. おわりに

Page 35: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

おわりに性能可搬性を達成するため、

コード選択の自動チューニング(AT)は有効であり、従来法では得られない速度向上が得られる

ppOpen‐ATのコード (MITライセンス):http://ppopenhpc.cc.u‐tokyo.ac.jp/

Page 36: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

将来課題探索アルゴリズムの改良

– 全探索を使っている• ユーザ知識を使っているので、現実時間でAT可能

– 新探索アルゴリズムも研究開発中(一部実装済)• d‐Splineベースの探索アルゴリズム (ブラック・ボックス型の性能モデル)、田中教授(工学院大)と連携

• ループ構造を見る性能モデル(ホワイト・ボックス型の性能モデル)とppOpen‐ATとの連結も、ステンシル計算に限定して研究開発予定

オフロード実装のコード選択機能の拡張(Xeon Phiにおける)– 問題サイズが小さい時、自動でXeon Phiへオフローディングせず、CPUで実行する、など

– OpenACC利用による、GPU計算の切り替えも、ppOpen‐ATで原理的に実装可能

Page 37: ppOpen-ATによる静的コード生成で実現する自動チューニング方式の評価

参考文献 (著者関連のみ)1. H. Kuroda, T. Katagiri, M. Kudoh, Y. Kanada, “ILIB_GMRES: An auto‐tuning parallel iterative solver for 

linear equations,” SC2001, 2001. (A Poster.)2. T. Katagiri, K. Kise, H. Honda, T. Yuba, “FIBER: A general framework for auto‐tuning software,” The Fifth 

International Symposium on High Performance Computing (ISHPC‐V), Springer LNCS 2858, pp. 146–159, 2003.

3. T. Katagiri, K. Kise, H. Honda, T. Yuba, “ABCLib_DRSSED: A parallel eigensolver with an auto‐tuning facility,” Parallel Computing, Vol. 32, Issue 3, pp. 231–250, 2006.

4. T. Katagiri, S. Ito, S. Ohshima, “Early experiences for adaptation of auto‐tuning by ppOpen‐AT to an explicit method,” Special Session: Auto‐Tuning for Multicore and GPU (ATMG) (In Conjunction with the IEEE MCSoC‐13), Proceedings of MCSoC‐13, 2013. 

5. T. Sakurai, T. Katagiri, H. Kuroda, K. Naono, M. Igai, S. Ohshima, "A Sparse Matrix Library with Automatic Selection of Iterative Solvers and Preconditioners", Eighth international Workshop on Automatic Performance Tuning (iWAPT2013) (In conjunction workshop with International Conference on Computational Science, ICCS2013), Proceedings of ICCS 2013, Volume 18, pp.1332–1341, 2013. 

6. T. Katagiri, T. Sakurai, M. Igai, S. Ohshima, H. Kuroda, K. Naono and K. Nakajima, "Control Formats for Unsymmetric and Symmetric Sparse Matrix‐vector Multiplications",  Selected Papers of 10th International Meeting on High‐Performance Computing for Computational Science (VECPAR'2012) , Springer Lecture Notes in Computer Science, Volume 7851, pp.236‐248, 2013.

7. T. Katagiri, S. Ohshima, M. Matsumoto, “Auto‐tuning of computation kernels from an FDM Code with ppOpen‐AT,” Special Session: Auto‐Tuning for Multicore and GPU (ATMG) (In Conjunction with the IEEE MCSoC‐14), Proceedings of MCSoC‐14, 2014. 

8. T.Katagiri, S.Ohshima, M. Matsumoto, "Directive‐based Auto‐tuning for the Finite Difference Method on the Xeon Phi," The Tenth International Workshop on Automatic Performance Tuning (iWAPT2015) (In Conjunction with the IEEE IPDPS2015 ), Proceedings of IPDPSW2015, pp.1221‐1230, 2015.