スーパーコンピュータと アプリケーションの性能 · riken advanced institute for computational science スーパーコンピュータと アプリケーションの性能
CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2
-
Upload
computational-materials-science-initiative -
Category
Technology
-
view
1.441 -
download
4
Transcript of CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2
RIKEN13 ADVANCED13 INSTITUTE13 FOR13 COMPUTATIONAL13 SCIENCE
第5回
アプリケーションの性能最適化の実例2
2014年5月15日
独立行政法人理化学研究所計算科学研究機構運用技術部門ソフトウェア技術チームチームヘッド
南一生
minami_kazrikenjp
CMSI計算科学技術 特論B
講義の概要
bullスーパーコンピュータとアプリケーションの性能 bullアプリケーションの性能最適化1(高並列性能最適化) bullアプリケーションの性能最適化2(CPU単体性能最適化) bullアプリケーションの性能最適化の実例1 bullアプリケーションの性能最適化の実例2
22014年5月15日 CMSI計算科学技術 特論B
内容
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
3
本資料は理化学研究所AICS運用技術部門ソフトウェア技術チーム井上俊介氏(現所属富士通) 熊畑清氏の発表データを使用して作成しています
2014年5月15日 CMSI計算科学技術 特論B
4
理研で進めた性能最適化
2014年5月15日 CMSI計算科学技術 特論B
5
プログラム名 分野 アプリケーション概要 期待される成果 手法
NICAM 地球
科学
全球雲解像大気大循環モデル
大気大循環のエンジンとなる熱帯積雲対流活動を精緻に表現することでシミュレーションを飛躍的に進化させ現時点では再現が難しい大気現象の解明が可能となる(開発 東京大学JAMSTECRIKEN AICS)
FDM
(大気)
Seism3D 地球
科学
地震波伝播強震動
シミュレーション
既存の計算機では不可能な短い周期の地震波動の解析予測が可能となり木造建築およびコンクリート構造物の耐震評価などに応用できる(開発 東京大学地震研究所)
FDM
(波動)
PHASE ナノ 平面波展開第一原理
電子状態解析
第一原理計算によりポスト35nm世代ナノデバイス非シリコン系デバイスの探索を行う(開発 物質材料研究機構)
平面波
DFT
FrontFlowBlue 工学 Large Eddy Simulation (LES)に基づく非定常流体解析
LES解析によりエンジニアリング上重要な乱流境界層の挙動予測を含めた高精度な流れの予測が実現できる(開発 東京大学生産技術研究所)
FEM
(流体)
RSDFT ナノ 実空間第一原理電子状態解析
大規模第一原理計算により10nm以下の基本ナノ素子(量子細線分子電極ゲート基盤など)の特性解析およびデバイス開発を行う(開発 東京大学)
実空間
DFT
LatticeQCD 物理 格子QCDシミュレーションによる素粒子原子核研究
モンテカルロ法およびCG法により物質と宇宙の起源を解明する(開発 筑波大)
QCD
理研で進めた性能最適化
6本のターゲットアプリ
2014年5月15日 CMSI計算科学技術 特論B
6
13
13
理研で進めた性能最適化
コラボレーション
東京大学JAMSTEC
東京大学地震研究所
物質材料研究機構
東京大学生産技術研究所
筑波大 RIKEN AICS
2014年5月15日 CMSI計算科学技術 特論B
7
7
easy
difficult
PHASE
Parallelizationdifficult
Parallel Performance
NICAMSeism3D
FFB
Lattice QCD
High
LowHighLow
A P
roce
ssor
Per
form
ance
Parallel Performance
RSDFT
理研で進めた性能最適化
6本のターゲットアプリの計算機科学的な位置づけ
2014年5月15日 CMSI計算科学技術 特論B
8
Seism3Dの性能最適化
2014年5月15日 CMSI計算科学技術 特論B
9
Seism3D
n地震伝播を解くアプリケーション
n有限差分法により数値的に粘弾性方程式を時間発展させる
n現在は地震伝播と津波を連動して解く事が可能
n大規模な並列化に対応しているアプリケーション n以下の6つの計算部分より構成される
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収計算 e)速度時間積分計算 f) 速度時間積分吸収計算
13
13
Time Step
d)c)
f)e)
b)
a)
2014年5月15日 CMSI計算科学技術 特論B
10
Seism3Dの並列化
13
13
13
3次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
当初の評価アプリ
2014年5月15日 CMSI計算科学技術 特論B
11
1313
1K 2K 4K 8K
10
20
30
40
50
[sec]
60
70
80
90
100
110
10x10x10
20x10x10
20x20x1040x10x10
20x20x2080x10x10
10x10x10
20x10x10
20x20x10
20x20x20
80x10x10
40x10x10
ウィークスケーリング測定(理研RICC)
Seism3Dの並列特性分析
2014年5月15日 CMSI計算科学技術 特論B
12
T_DIFF T_DIFF T_DIFF T_DIFF
T_VX T_VX T_VX T_VX
13 T_SXX13 T_SXX 13 T_SXX 13 T_SXX
I I I I
J J J J
K K K K
Reduction T_COMM_3 Reduction T_COMM_3 Reduction T_COMM_3Reduction T_COMM_3
0
10
20
30
40
50
60
70
80
90
100
10x10x10 20x10x10 20x20x10 20x20x20
(
ReductionT_COMM_3
K
J
I
13
T_SXX
T_VX
T_DIFF
実行時間内訳(平均値) (144144144)メッシュcore
Seism3Dの並列特性分析
ウィークスケーリング測定(理研RICC)
2014年5月15日 CMSI計算科学技術 特論B
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
講義の概要
bullスーパーコンピュータとアプリケーションの性能 bullアプリケーションの性能最適化1(高並列性能最適化) bullアプリケーションの性能最適化2(CPU単体性能最適化) bullアプリケーションの性能最適化の実例1 bullアプリケーションの性能最適化の実例2
22014年5月15日 CMSI計算科学技術 特論B
内容
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
3
本資料は理化学研究所AICS運用技術部門ソフトウェア技術チーム井上俊介氏(現所属富士通) 熊畑清氏の発表データを使用して作成しています
2014年5月15日 CMSI計算科学技術 特論B
4
理研で進めた性能最適化
2014年5月15日 CMSI計算科学技術 特論B
5
プログラム名 分野 アプリケーション概要 期待される成果 手法
NICAM 地球
科学
全球雲解像大気大循環モデル
大気大循環のエンジンとなる熱帯積雲対流活動を精緻に表現することでシミュレーションを飛躍的に進化させ現時点では再現が難しい大気現象の解明が可能となる(開発 東京大学JAMSTECRIKEN AICS)
FDM
(大気)
Seism3D 地球
科学
地震波伝播強震動
シミュレーション
既存の計算機では不可能な短い周期の地震波動の解析予測が可能となり木造建築およびコンクリート構造物の耐震評価などに応用できる(開発 東京大学地震研究所)
FDM
(波動)
PHASE ナノ 平面波展開第一原理
電子状態解析
第一原理計算によりポスト35nm世代ナノデバイス非シリコン系デバイスの探索を行う(開発 物質材料研究機構)
平面波
DFT
FrontFlowBlue 工学 Large Eddy Simulation (LES)に基づく非定常流体解析
LES解析によりエンジニアリング上重要な乱流境界層の挙動予測を含めた高精度な流れの予測が実現できる(開発 東京大学生産技術研究所)
FEM
(流体)
RSDFT ナノ 実空間第一原理電子状態解析
大規模第一原理計算により10nm以下の基本ナノ素子(量子細線分子電極ゲート基盤など)の特性解析およびデバイス開発を行う(開発 東京大学)
実空間
DFT
LatticeQCD 物理 格子QCDシミュレーションによる素粒子原子核研究
モンテカルロ法およびCG法により物質と宇宙の起源を解明する(開発 筑波大)
QCD
理研で進めた性能最適化
6本のターゲットアプリ
2014年5月15日 CMSI計算科学技術 特論B
6
13
13
理研で進めた性能最適化
コラボレーション
東京大学JAMSTEC
東京大学地震研究所
物質材料研究機構
東京大学生産技術研究所
筑波大 RIKEN AICS
2014年5月15日 CMSI計算科学技術 特論B
7
7
easy
difficult
PHASE
Parallelizationdifficult
Parallel Performance
NICAMSeism3D
FFB
Lattice QCD
High
LowHighLow
A P
roce
ssor
Per
form
ance
Parallel Performance
RSDFT
理研で進めた性能最適化
6本のターゲットアプリの計算機科学的な位置づけ
2014年5月15日 CMSI計算科学技術 特論B
8
Seism3Dの性能最適化
2014年5月15日 CMSI計算科学技術 特論B
9
Seism3D
n地震伝播を解くアプリケーション
n有限差分法により数値的に粘弾性方程式を時間発展させる
n現在は地震伝播と津波を連動して解く事が可能
n大規模な並列化に対応しているアプリケーション n以下の6つの計算部分より構成される
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収計算 e)速度時間積分計算 f) 速度時間積分吸収計算
13
13
Time Step
d)c)
f)e)
b)
a)
2014年5月15日 CMSI計算科学技術 特論B
10
Seism3Dの並列化
13
13
13
3次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
当初の評価アプリ
2014年5月15日 CMSI計算科学技術 特論B
11
1313
1K 2K 4K 8K
10
20
30
40
50
[sec]
60
70
80
90
100
110
10x10x10
20x10x10
20x20x1040x10x10
20x20x2080x10x10
10x10x10
20x10x10
20x20x10
20x20x20
80x10x10
40x10x10
ウィークスケーリング測定(理研RICC)
Seism3Dの並列特性分析
2014年5月15日 CMSI計算科学技術 特論B
12
T_DIFF T_DIFF T_DIFF T_DIFF
T_VX T_VX T_VX T_VX
13 T_SXX13 T_SXX 13 T_SXX 13 T_SXX
I I I I
J J J J
K K K K
Reduction T_COMM_3 Reduction T_COMM_3 Reduction T_COMM_3Reduction T_COMM_3
0
10
20
30
40
50
60
70
80
90
100
10x10x10 20x10x10 20x20x10 20x20x20
(
ReductionT_COMM_3
K
J
I
13
T_SXX
T_VX
T_DIFF
実行時間内訳(平均値) (144144144)メッシュcore
Seism3Dの並列特性分析
ウィークスケーリング測定(理研RICC)
2014年5月15日 CMSI計算科学技術 特論B
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
内容
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
3
本資料は理化学研究所AICS運用技術部門ソフトウェア技術チーム井上俊介氏(現所属富士通) 熊畑清氏の発表データを使用して作成しています
2014年5月15日 CMSI計算科学技術 特論B
4
理研で進めた性能最適化
2014年5月15日 CMSI計算科学技術 特論B
5
プログラム名 分野 アプリケーション概要 期待される成果 手法
NICAM 地球
科学
全球雲解像大気大循環モデル
大気大循環のエンジンとなる熱帯積雲対流活動を精緻に表現することでシミュレーションを飛躍的に進化させ現時点では再現が難しい大気現象の解明が可能となる(開発 東京大学JAMSTECRIKEN AICS)
FDM
(大気)
Seism3D 地球
科学
地震波伝播強震動
シミュレーション
既存の計算機では不可能な短い周期の地震波動の解析予測が可能となり木造建築およびコンクリート構造物の耐震評価などに応用できる(開発 東京大学地震研究所)
FDM
(波動)
PHASE ナノ 平面波展開第一原理
電子状態解析
第一原理計算によりポスト35nm世代ナノデバイス非シリコン系デバイスの探索を行う(開発 物質材料研究機構)
平面波
DFT
FrontFlowBlue 工学 Large Eddy Simulation (LES)に基づく非定常流体解析
LES解析によりエンジニアリング上重要な乱流境界層の挙動予測を含めた高精度な流れの予測が実現できる(開発 東京大学生産技術研究所)
FEM
(流体)
RSDFT ナノ 実空間第一原理電子状態解析
大規模第一原理計算により10nm以下の基本ナノ素子(量子細線分子電極ゲート基盤など)の特性解析およびデバイス開発を行う(開発 東京大学)
実空間
DFT
LatticeQCD 物理 格子QCDシミュレーションによる素粒子原子核研究
モンテカルロ法およびCG法により物質と宇宙の起源を解明する(開発 筑波大)
QCD
理研で進めた性能最適化
6本のターゲットアプリ
2014年5月15日 CMSI計算科学技術 特論B
6
13
13
理研で進めた性能最適化
コラボレーション
東京大学JAMSTEC
東京大学地震研究所
物質材料研究機構
東京大学生産技術研究所
筑波大 RIKEN AICS
2014年5月15日 CMSI計算科学技術 特論B
7
7
easy
difficult
PHASE
Parallelizationdifficult
Parallel Performance
NICAMSeism3D
FFB
Lattice QCD
High
LowHighLow
A P
roce
ssor
Per
form
ance
Parallel Performance
RSDFT
理研で進めた性能最適化
6本のターゲットアプリの計算機科学的な位置づけ
2014年5月15日 CMSI計算科学技術 特論B
8
Seism3Dの性能最適化
2014年5月15日 CMSI計算科学技術 特論B
9
Seism3D
n地震伝播を解くアプリケーション
n有限差分法により数値的に粘弾性方程式を時間発展させる
n現在は地震伝播と津波を連動して解く事が可能
n大規模な並列化に対応しているアプリケーション n以下の6つの計算部分より構成される
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収計算 e)速度時間積分計算 f) 速度時間積分吸収計算
13
13
Time Step
d)c)
f)e)
b)
a)
2014年5月15日 CMSI計算科学技術 特論B
10
Seism3Dの並列化
13
13
13
3次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
当初の評価アプリ
2014年5月15日 CMSI計算科学技術 特論B
11
1313
1K 2K 4K 8K
10
20
30
40
50
[sec]
60
70
80
90
100
110
10x10x10
20x10x10
20x20x1040x10x10
20x20x2080x10x10
10x10x10
20x10x10
20x20x10
20x20x20
80x10x10
40x10x10
ウィークスケーリング測定(理研RICC)
Seism3Dの並列特性分析
2014年5月15日 CMSI計算科学技術 特論B
12
T_DIFF T_DIFF T_DIFF T_DIFF
T_VX T_VX T_VX T_VX
13 T_SXX13 T_SXX 13 T_SXX 13 T_SXX
I I I I
J J J J
K K K K
Reduction T_COMM_3 Reduction T_COMM_3 Reduction T_COMM_3Reduction T_COMM_3
0
10
20
30
40
50
60
70
80
90
100
10x10x10 20x10x10 20x20x10 20x20x20
(
ReductionT_COMM_3
K
J
I
13
T_SXX
T_VX
T_DIFF
実行時間内訳(平均値) (144144144)メッシュcore
Seism3Dの並列特性分析
ウィークスケーリング測定(理研RICC)
2014年5月15日 CMSI計算科学技術 特論B
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
4
理研で進めた性能最適化
2014年5月15日 CMSI計算科学技術 特論B
5
プログラム名 分野 アプリケーション概要 期待される成果 手法
NICAM 地球
科学
全球雲解像大気大循環モデル
大気大循環のエンジンとなる熱帯積雲対流活動を精緻に表現することでシミュレーションを飛躍的に進化させ現時点では再現が難しい大気現象の解明が可能となる(開発 東京大学JAMSTECRIKEN AICS)
FDM
(大気)
Seism3D 地球
科学
地震波伝播強震動
シミュレーション
既存の計算機では不可能な短い周期の地震波動の解析予測が可能となり木造建築およびコンクリート構造物の耐震評価などに応用できる(開発 東京大学地震研究所)
FDM
(波動)
PHASE ナノ 平面波展開第一原理
電子状態解析
第一原理計算によりポスト35nm世代ナノデバイス非シリコン系デバイスの探索を行う(開発 物質材料研究機構)
平面波
DFT
FrontFlowBlue 工学 Large Eddy Simulation (LES)に基づく非定常流体解析
LES解析によりエンジニアリング上重要な乱流境界層の挙動予測を含めた高精度な流れの予測が実現できる(開発 東京大学生産技術研究所)
FEM
(流体)
RSDFT ナノ 実空間第一原理電子状態解析
大規模第一原理計算により10nm以下の基本ナノ素子(量子細線分子電極ゲート基盤など)の特性解析およびデバイス開発を行う(開発 東京大学)
実空間
DFT
LatticeQCD 物理 格子QCDシミュレーションによる素粒子原子核研究
モンテカルロ法およびCG法により物質と宇宙の起源を解明する(開発 筑波大)
QCD
理研で進めた性能最適化
6本のターゲットアプリ
2014年5月15日 CMSI計算科学技術 特論B
6
13
13
理研で進めた性能最適化
コラボレーション
東京大学JAMSTEC
東京大学地震研究所
物質材料研究機構
東京大学生産技術研究所
筑波大 RIKEN AICS
2014年5月15日 CMSI計算科学技術 特論B
7
7
easy
difficult
PHASE
Parallelizationdifficult
Parallel Performance
NICAMSeism3D
FFB
Lattice QCD
High
LowHighLow
A P
roce
ssor
Per
form
ance
Parallel Performance
RSDFT
理研で進めた性能最適化
6本のターゲットアプリの計算機科学的な位置づけ
2014年5月15日 CMSI計算科学技術 特論B
8
Seism3Dの性能最適化
2014年5月15日 CMSI計算科学技術 特論B
9
Seism3D
n地震伝播を解くアプリケーション
n有限差分法により数値的に粘弾性方程式を時間発展させる
n現在は地震伝播と津波を連動して解く事が可能
n大規模な並列化に対応しているアプリケーション n以下の6つの計算部分より構成される
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収計算 e)速度時間積分計算 f) 速度時間積分吸収計算
13
13
Time Step
d)c)
f)e)
b)
a)
2014年5月15日 CMSI計算科学技術 特論B
10
Seism3Dの並列化
13
13
13
3次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
当初の評価アプリ
2014年5月15日 CMSI計算科学技術 特論B
11
1313
1K 2K 4K 8K
10
20
30
40
50
[sec]
60
70
80
90
100
110
10x10x10
20x10x10
20x20x1040x10x10
20x20x2080x10x10
10x10x10
20x10x10
20x20x10
20x20x20
80x10x10
40x10x10
ウィークスケーリング測定(理研RICC)
Seism3Dの並列特性分析
2014年5月15日 CMSI計算科学技術 特論B
12
T_DIFF T_DIFF T_DIFF T_DIFF
T_VX T_VX T_VX T_VX
13 T_SXX13 T_SXX 13 T_SXX 13 T_SXX
I I I I
J J J J
K K K K
Reduction T_COMM_3 Reduction T_COMM_3 Reduction T_COMM_3Reduction T_COMM_3
0
10
20
30
40
50
60
70
80
90
100
10x10x10 20x10x10 20x20x10 20x20x20
(
ReductionT_COMM_3
K
J
I
13
T_SXX
T_VX
T_DIFF
実行時間内訳(平均値) (144144144)メッシュcore
Seism3Dの並列特性分析
ウィークスケーリング測定(理研RICC)
2014年5月15日 CMSI計算科学技術 特論B
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
5
プログラム名 分野 アプリケーション概要 期待される成果 手法
NICAM 地球
科学
全球雲解像大気大循環モデル
大気大循環のエンジンとなる熱帯積雲対流活動を精緻に表現することでシミュレーションを飛躍的に進化させ現時点では再現が難しい大気現象の解明が可能となる(開発 東京大学JAMSTECRIKEN AICS)
FDM
(大気)
Seism3D 地球
科学
地震波伝播強震動
シミュレーション
既存の計算機では不可能な短い周期の地震波動の解析予測が可能となり木造建築およびコンクリート構造物の耐震評価などに応用できる(開発 東京大学地震研究所)
FDM
(波動)
PHASE ナノ 平面波展開第一原理
電子状態解析
第一原理計算によりポスト35nm世代ナノデバイス非シリコン系デバイスの探索を行う(開発 物質材料研究機構)
平面波
DFT
FrontFlowBlue 工学 Large Eddy Simulation (LES)に基づく非定常流体解析
LES解析によりエンジニアリング上重要な乱流境界層の挙動予測を含めた高精度な流れの予測が実現できる(開発 東京大学生産技術研究所)
FEM
(流体)
RSDFT ナノ 実空間第一原理電子状態解析
大規模第一原理計算により10nm以下の基本ナノ素子(量子細線分子電極ゲート基盤など)の特性解析およびデバイス開発を行う(開発 東京大学)
実空間
DFT
LatticeQCD 物理 格子QCDシミュレーションによる素粒子原子核研究
モンテカルロ法およびCG法により物質と宇宙の起源を解明する(開発 筑波大)
QCD
理研で進めた性能最適化
6本のターゲットアプリ
2014年5月15日 CMSI計算科学技術 特論B
6
13
13
理研で進めた性能最適化
コラボレーション
東京大学JAMSTEC
東京大学地震研究所
物質材料研究機構
東京大学生産技術研究所
筑波大 RIKEN AICS
2014年5月15日 CMSI計算科学技術 特論B
7
7
easy
difficult
PHASE
Parallelizationdifficult
Parallel Performance
NICAMSeism3D
FFB
Lattice QCD
High
LowHighLow
A P
roce
ssor
Per
form
ance
Parallel Performance
RSDFT
理研で進めた性能最適化
6本のターゲットアプリの計算機科学的な位置づけ
2014年5月15日 CMSI計算科学技術 特論B
8
Seism3Dの性能最適化
2014年5月15日 CMSI計算科学技術 特論B
9
Seism3D
n地震伝播を解くアプリケーション
n有限差分法により数値的に粘弾性方程式を時間発展させる
n現在は地震伝播と津波を連動して解く事が可能
n大規模な並列化に対応しているアプリケーション n以下の6つの計算部分より構成される
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収計算 e)速度時間積分計算 f) 速度時間積分吸収計算
13
13
Time Step
d)c)
f)e)
b)
a)
2014年5月15日 CMSI計算科学技術 特論B
10
Seism3Dの並列化
13
13
13
3次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
当初の評価アプリ
2014年5月15日 CMSI計算科学技術 特論B
11
1313
1K 2K 4K 8K
10
20
30
40
50
[sec]
60
70
80
90
100
110
10x10x10
20x10x10
20x20x1040x10x10
20x20x2080x10x10
10x10x10
20x10x10
20x20x10
20x20x20
80x10x10
40x10x10
ウィークスケーリング測定(理研RICC)
Seism3Dの並列特性分析
2014年5月15日 CMSI計算科学技術 特論B
12
T_DIFF T_DIFF T_DIFF T_DIFF
T_VX T_VX T_VX T_VX
13 T_SXX13 T_SXX 13 T_SXX 13 T_SXX
I I I I
J J J J
K K K K
Reduction T_COMM_3 Reduction T_COMM_3 Reduction T_COMM_3Reduction T_COMM_3
0
10
20
30
40
50
60
70
80
90
100
10x10x10 20x10x10 20x20x10 20x20x20
(
ReductionT_COMM_3
K
J
I
13
T_SXX
T_VX
T_DIFF
実行時間内訳(平均値) (144144144)メッシュcore
Seism3Dの並列特性分析
ウィークスケーリング測定(理研RICC)
2014年5月15日 CMSI計算科学技術 特論B
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
6
13
13
理研で進めた性能最適化
コラボレーション
東京大学JAMSTEC
東京大学地震研究所
物質材料研究機構
東京大学生産技術研究所
筑波大 RIKEN AICS
2014年5月15日 CMSI計算科学技術 特論B
7
7
easy
difficult
PHASE
Parallelizationdifficult
Parallel Performance
NICAMSeism3D
FFB
Lattice QCD
High
LowHighLow
A P
roce
ssor
Per
form
ance
Parallel Performance
RSDFT
理研で進めた性能最適化
6本のターゲットアプリの計算機科学的な位置づけ
2014年5月15日 CMSI計算科学技術 特論B
8
Seism3Dの性能最適化
2014年5月15日 CMSI計算科学技術 特論B
9
Seism3D
n地震伝播を解くアプリケーション
n有限差分法により数値的に粘弾性方程式を時間発展させる
n現在は地震伝播と津波を連動して解く事が可能
n大規模な並列化に対応しているアプリケーション n以下の6つの計算部分より構成される
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収計算 e)速度時間積分計算 f) 速度時間積分吸収計算
13
13
Time Step
d)c)
f)e)
b)
a)
2014年5月15日 CMSI計算科学技術 特論B
10
Seism3Dの並列化
13
13
13
3次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
当初の評価アプリ
2014年5月15日 CMSI計算科学技術 特論B
11
1313
1K 2K 4K 8K
10
20
30
40
50
[sec]
60
70
80
90
100
110
10x10x10
20x10x10
20x20x1040x10x10
20x20x2080x10x10
10x10x10
20x10x10
20x20x10
20x20x20
80x10x10
40x10x10
ウィークスケーリング測定(理研RICC)
Seism3Dの並列特性分析
2014年5月15日 CMSI計算科学技術 特論B
12
T_DIFF T_DIFF T_DIFF T_DIFF
T_VX T_VX T_VX T_VX
13 T_SXX13 T_SXX 13 T_SXX 13 T_SXX
I I I I
J J J J
K K K K
Reduction T_COMM_3 Reduction T_COMM_3 Reduction T_COMM_3Reduction T_COMM_3
0
10
20
30
40
50
60
70
80
90
100
10x10x10 20x10x10 20x20x10 20x20x20
(
ReductionT_COMM_3
K
J
I
13
T_SXX
T_VX
T_DIFF
実行時間内訳(平均値) (144144144)メッシュcore
Seism3Dの並列特性分析
ウィークスケーリング測定(理研RICC)
2014年5月15日 CMSI計算科学技術 特論B
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
7
7
easy
difficult
PHASE
Parallelizationdifficult
Parallel Performance
NICAMSeism3D
FFB
Lattice QCD
High
LowHighLow
A P
roce
ssor
Per
form
ance
Parallel Performance
RSDFT
理研で進めた性能最適化
6本のターゲットアプリの計算機科学的な位置づけ
2014年5月15日 CMSI計算科学技術 特論B
8
Seism3Dの性能最適化
2014年5月15日 CMSI計算科学技術 特論B
9
Seism3D
n地震伝播を解くアプリケーション
n有限差分法により数値的に粘弾性方程式を時間発展させる
n現在は地震伝播と津波を連動して解く事が可能
n大規模な並列化に対応しているアプリケーション n以下の6つの計算部分より構成される
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収計算 e)速度時間積分計算 f) 速度時間積分吸収計算
13
13
Time Step
d)c)
f)e)
b)
a)
2014年5月15日 CMSI計算科学技術 特論B
10
Seism3Dの並列化
13
13
13
3次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
当初の評価アプリ
2014年5月15日 CMSI計算科学技術 特論B
11
1313
1K 2K 4K 8K
10
20
30
40
50
[sec]
60
70
80
90
100
110
10x10x10
20x10x10
20x20x1040x10x10
20x20x2080x10x10
10x10x10
20x10x10
20x20x10
20x20x20
80x10x10
40x10x10
ウィークスケーリング測定(理研RICC)
Seism3Dの並列特性分析
2014年5月15日 CMSI計算科学技術 特論B
12
T_DIFF T_DIFF T_DIFF T_DIFF
T_VX T_VX T_VX T_VX
13 T_SXX13 T_SXX 13 T_SXX 13 T_SXX
I I I I
J J J J
K K K K
Reduction T_COMM_3 Reduction T_COMM_3 Reduction T_COMM_3Reduction T_COMM_3
0
10
20
30
40
50
60
70
80
90
100
10x10x10 20x10x10 20x20x10 20x20x20
(
ReductionT_COMM_3
K
J
I
13
T_SXX
T_VX
T_DIFF
実行時間内訳(平均値) (144144144)メッシュcore
Seism3Dの並列特性分析
ウィークスケーリング測定(理研RICC)
2014年5月15日 CMSI計算科学技術 特論B
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
8
Seism3Dの性能最適化
2014年5月15日 CMSI計算科学技術 特論B
9
Seism3D
n地震伝播を解くアプリケーション
n有限差分法により数値的に粘弾性方程式を時間発展させる
n現在は地震伝播と津波を連動して解く事が可能
n大規模な並列化に対応しているアプリケーション n以下の6つの計算部分より構成される
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収計算 e)速度時間積分計算 f) 速度時間積分吸収計算
13
13
Time Step
d)c)
f)e)
b)
a)
2014年5月15日 CMSI計算科学技術 特論B
10
Seism3Dの並列化
13
13
13
3次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
当初の評価アプリ
2014年5月15日 CMSI計算科学技術 特論B
11
1313
1K 2K 4K 8K
10
20
30
40
50
[sec]
60
70
80
90
100
110
10x10x10
20x10x10
20x20x1040x10x10
20x20x2080x10x10
10x10x10
20x10x10
20x20x10
20x20x20
80x10x10
40x10x10
ウィークスケーリング測定(理研RICC)
Seism3Dの並列特性分析
2014年5月15日 CMSI計算科学技術 特論B
12
T_DIFF T_DIFF T_DIFF T_DIFF
T_VX T_VX T_VX T_VX
13 T_SXX13 T_SXX 13 T_SXX 13 T_SXX
I I I I
J J J J
K K K K
Reduction T_COMM_3 Reduction T_COMM_3 Reduction T_COMM_3Reduction T_COMM_3
0
10
20
30
40
50
60
70
80
90
100
10x10x10 20x10x10 20x20x10 20x20x20
(
ReductionT_COMM_3
K
J
I
13
T_SXX
T_VX
T_DIFF
実行時間内訳(平均値) (144144144)メッシュcore
Seism3Dの並列特性分析
ウィークスケーリング測定(理研RICC)
2014年5月15日 CMSI計算科学技術 特論B
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
9
Seism3D
n地震伝播を解くアプリケーション
n有限差分法により数値的に粘弾性方程式を時間発展させる
n現在は地震伝播と津波を連動して解く事が可能
n大規模な並列化に対応しているアプリケーション n以下の6つの計算部分より構成される
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収計算 e)速度時間積分計算 f) 速度時間積分吸収計算
13
13
Time Step
d)c)
f)e)
b)
a)
2014年5月15日 CMSI計算科学技術 特論B
10
Seism3Dの並列化
13
13
13
3次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
当初の評価アプリ
2014年5月15日 CMSI計算科学技術 特論B
11
1313
1K 2K 4K 8K
10
20
30
40
50
[sec]
60
70
80
90
100
110
10x10x10
20x10x10
20x20x1040x10x10
20x20x2080x10x10
10x10x10
20x10x10
20x20x10
20x20x20
80x10x10
40x10x10
ウィークスケーリング測定(理研RICC)
Seism3Dの並列特性分析
2014年5月15日 CMSI計算科学技術 特論B
12
T_DIFF T_DIFF T_DIFF T_DIFF
T_VX T_VX T_VX T_VX
13 T_SXX13 T_SXX 13 T_SXX 13 T_SXX
I I I I
J J J J
K K K K
Reduction T_COMM_3 Reduction T_COMM_3 Reduction T_COMM_3Reduction T_COMM_3
0
10
20
30
40
50
60
70
80
90
100
10x10x10 20x10x10 20x20x10 20x20x20
(
ReductionT_COMM_3
K
J
I
13
T_SXX
T_VX
T_DIFF
実行時間内訳(平均値) (144144144)メッシュcore
Seism3Dの並列特性分析
ウィークスケーリング測定(理研RICC)
2014年5月15日 CMSI計算科学技術 特論B
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
10
Seism3Dの並列化
13
13
13
3次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
当初の評価アプリ
2014年5月15日 CMSI計算科学技術 特論B
11
1313
1K 2K 4K 8K
10
20
30
40
50
[sec]
60
70
80
90
100
110
10x10x10
20x10x10
20x20x1040x10x10
20x20x2080x10x10
10x10x10
20x10x10
20x20x10
20x20x20
80x10x10
40x10x10
ウィークスケーリング測定(理研RICC)
Seism3Dの並列特性分析
2014年5月15日 CMSI計算科学技術 特論B
12
T_DIFF T_DIFF T_DIFF T_DIFF
T_VX T_VX T_VX T_VX
13 T_SXX13 T_SXX 13 T_SXX 13 T_SXX
I I I I
J J J J
K K K K
Reduction T_COMM_3 Reduction T_COMM_3 Reduction T_COMM_3Reduction T_COMM_3
0
10
20
30
40
50
60
70
80
90
100
10x10x10 20x10x10 20x20x10 20x20x20
(
ReductionT_COMM_3
K
J
I
13
T_SXX
T_VX
T_DIFF
実行時間内訳(平均値) (144144144)メッシュcore
Seism3Dの並列特性分析
ウィークスケーリング測定(理研RICC)
2014年5月15日 CMSI計算科学技術 特論B
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
11
1313
1K 2K 4K 8K
10
20
30
40
50
[sec]
60
70
80
90
100
110
10x10x10
20x10x10
20x20x1040x10x10
20x20x2080x10x10
10x10x10
20x10x10
20x20x10
20x20x20
80x10x10
40x10x10
ウィークスケーリング測定(理研RICC)
Seism3Dの並列特性分析
2014年5月15日 CMSI計算科学技術 特論B
12
T_DIFF T_DIFF T_DIFF T_DIFF
T_VX T_VX T_VX T_VX
13 T_SXX13 T_SXX 13 T_SXX 13 T_SXX
I I I I
J J J J
K K K K
Reduction T_COMM_3 Reduction T_COMM_3 Reduction T_COMM_3Reduction T_COMM_3
0
10
20
30
40
50
60
70
80
90
100
10x10x10 20x10x10 20x20x10 20x20x20
(
ReductionT_COMM_3
K
J
I
13
T_SXX
T_VX
T_DIFF
実行時間内訳(平均値) (144144144)メッシュcore
Seism3Dの並列特性分析
ウィークスケーリング測定(理研RICC)
2014年5月15日 CMSI計算科学技術 特論B
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
12
T_DIFF T_DIFF T_DIFF T_DIFF
T_VX T_VX T_VX T_VX
13 T_SXX13 T_SXX 13 T_SXX 13 T_SXX
I I I I
J J J J
K K K K
Reduction T_COMM_3 Reduction T_COMM_3 Reduction T_COMM_3Reduction T_COMM_3
0
10
20
30
40
50
60
70
80
90
100
10x10x10 20x10x10 20x20x10 20x20x20
(
ReductionT_COMM_3
K
J
I
13
T_SXX
T_VX
T_DIFF
実行時間内訳(平均値) (144144144)メッシュcore
Seism3Dの並列特性分析
ウィークスケーリング測定(理研RICC)
2014年5月15日 CMSI計算科学技術 特論B
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
13
a)応力空間微分計算 b)速度空間微分計算 c)応力時間積分計算 d)応力時間積分吸収
計算 e)速度時間積分計算 f) 速度時間積分吸収
計算
Seism3Dの並列特性分析
当初の評価アプリについて
O(N)
演算量
O(N)
O(N)
O(N)
高並列性能完全並列 ウィークスケールしている 隣接通信時間が通信量に比べると大 大域通信が並列数に応じ増大傾向
2014年5月15日 CMSI計算科学技術 特論B
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
14
13
2次元の領域分割
13
13
Time Step
d)c)
f)e)
b)
a)
新しい評価アプリ
Seism3Dの並列化
bull 今後計算体系の上面のみで実行される津波の計算を鑑み2次元分割が計画された
bull 2次元分割での通信時間を評価
bull 通信量は4-5倍になるが通信回数は23になると評価
bull 通信のパッキングは2次元が有利
bull 通信時間は演算時間の数ですむと評価
2014年5月15日 CMSI計算科学技術 特論B
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
15
Seism3Dの単体性能最適化 (性能見積りとチューニング)
Seism3Dは要求BF値が大きいアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
16
空間微分Z方向の計算a)b)(1次元目の差分)
do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R40 amp - (V(k+1IJ)-V(k-2IJ))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0153
要求Byteの算出
1store2loadと考える
4x3 = 12byte
2014年5月15日 CMSI計算科学技術 特論B
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
17
空間微分X方向の計算a)b)(2次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 end do end do end do
要求flop
add 3 mult 2 = 5
要求BF 125 = 24
性能予測 03624 = 015
実測値 0135
要求Byteの算出
P12よりメモリコストだけを考慮する
1sore2loadと考える
4x3 = 12byte
n 第2軸(I軸)が差分
n 1ストリームでその他の3配列列は$L1or$L2に載っており再利利用できる
n 従って1次元目が差分のパターンと同
じ性能になる
n 140に比較すれば135は良良い値
n L2キャッシュ負荷の増大によりメモりバンド幅が下がった可能性(京特有の現象)
n 実測値が135と少し低い
n 実測したメモリバンド幅は429GBsec
n この値で性能予測をすると140となる2014年5月15日 CMSI計算科学技術 特論B
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
18
空間微分Y方向の計算a)b)(3次元目の差分)
do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求Byteの算出
1store5loadより
(5+1) 4byte = 24
emsp
n 第3軸が差分 rarremsp 再利利用性なし
要求flop
add 3 mult 2 = 5要求BF 245 = 48
性能予測 03648= 0075
実測値 0076
2014年5月15日 CMSI計算科学技術 特論B
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
19
空間微分Y方向の計算a)b) (3次元目をcyclicでスレッド並列化)
$OMP DO SCHEDULE(static1)PRIVATE(IJK) do J = 1 NY do I = 1 NX do K = 1 NZ DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 3 mult 2 = 5
n 第3軸をcyclic分割 rarremsp 1ストリームで3配列列がL2に乗る(説明次項)
n 性能が2倍になる
要求BF 125 = 24
性能予測 03624 = 015
実測値 0136
要求Byteの算出
1sore2loadと考える
4x3 = 12byte
キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
20
(cyclic分割スレッド並列の説明)
プログラム例Do j=1jmax do i=1imax do k=1kmax a(kij)=c0v(kij-1)+c1 v(kij)+c2 v(kij+1) end do end do end do
1 kmax
1 kmax
1 kmax
1 kma
1 kmax
1 kmax
i=1 i=2 i=imax
j
j-1
j+1
スレッドn+1で参照するデータスレッドnで参照するデータスレッドnminus1で参照するデータ
スレッドnminus1のCL
キャッシュライン(CL)
スレッドn+1のCL2014年5月15日 CMSI計算科学技術 特論B
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
21
空間微分Y方向の計算a)b) (ZXYループ融合cyclicスレッド並列)
$OMP DO SCHEDULE(static1) do J = 1 NY do I = 1 NX do K = 3 NZ-1 DZV (kIJ) = (V(kIJ) -V(k-1IJ))R42 amp - (V(k+1IJ)-V(k-2IJ))R43 DXV (kIJ) = (V(kIJ) -V(kI-1J))R40amp - (V(kI+1J)-V(kI-2J))R41 DYV (kIJ) = (V(kIJ) -V(kIJ-1))R40 amp - (V(kIJ+1)-V(kIJ-2))R41 end do end do end do
要求flop
add 9 mult 6 = 15
n KIJ軸差分のループを融合することによりV(KIJ)のロードを共通化できプログラムの要求BF比を下げる
要求BF 2815 = 186
性能予測 036186 = 019
実測値 0177
要求Byteの算出
Store 3 +4 load と考えると
(3+4)4 = 28byte
要求BF値を下げる キャッシュに載せる
2014年5月15日 CMSI計算科学技術 特論B
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
22
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
XFILL指示行によるチューニング
bull 下記ループのdzvはストアのみの配列
bull しかし通常はロードとストアが発生するためメモリアクセスは2と計算する
bull 京のコンパイラではXFILL指示行の機能をもつ
bull この指示行を指定することにより余計なロードが発生しなくなる
bull これにより要求BF値は24から16に減少し推定性能が15から225に向上する
bull 実測値は212
2014年5月15日 CMSI計算科学技術 特論B
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
23
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信
Time Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化 井上俊介dagger1 堤重信dagger2 前田拓人dagger3 南一生dagger1 dagger1 理理化学研究所 計算科学研究機構 運用技術部門 dagger2 株式会社富士通九州システムズ dagger3 東京大学地震研究所
1目的 京におけるメモリインテンシブなアプリケーションの高速化を実施すると ともに汎用的な評価手法および高性能化手法の確立を目指す
2ターゲットアプリケーション Seism3D(after Furumura and Chen 2005)は3次元の弾性体運動方程式をスタガード格子差分法を用いて陽的に解く並列計算コードであり 京の開発時期にシステム評価コードとして選定された 演算部は高いBF値を要求し通信部は水平方向の袖領域のみという特徴を持つ
3評価手法 各演算部の特徴である要求BFが高いことストリーム配列が多用されることからStreamBenchmark(httpwwwcsvirginiaedustream)を詳細プロファイラにより測定しその結果を評価指標に設定した
4高速化手法
1E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
1E+08
1E+09
1E+10
1E+00 1E+01 1E+02 1E+03 1E+04 1E+05
MFL
OPS
Number of Processors
5結論
bull メモリスループットが十分でない(~40Gs)演算カーネル
演算カーネルの要求BF値と京のメモリのBF値から実効性能の推定が可能であり高速化の目標値に設定した(南他 2012)
L1Dミス率率率 625
L1Dミスdm率率率 061
L1Dミスhwpf率率率 9938
L1Dミスswpf率率率 000
L2ミス率率率 626
L2スループット 3323GBs
メモリスループット 4433GBs
Peak Ratio 216
do J = 1 NY do I = 1 NX do K = 1 NZ DZV (KIJ) = (V(KIJ) -V(K-1IJ))R40 amp - (V(K+1IJ)-V(K-2IJ))R41 end do end do end do
DZV(KIJ) ストリームアクセスのため メモリからのロードメモリへのストアとしてカウント 2 V(KIJ) ストリームアクセスのため メモリからのロードとしてカウント 1 V(K+NIJ) V(KIJ)と同じライン上に存在するため キャッシュからのロードとしてカウント (メモリからのロードに比べてコストが小さいため無視できる) 和3 積2 rarr 5
要求Byte
要求ByteFlop = (34byte)5 = 24
京のメモリのByteFlopが036 rarr 03624 = 15が推定性能値
要求Flop
微分項計算ループ ((IJK)=(60804000))
キャッシュラインが128byteであるため 倍精度であれば8128=625がストリームのミス率
(単精度は4128=3125)
L1Dミスhwpf率がミス率の中で支配的 rarr プリフェッチ命令が効果的に発行されている
理論64GBsに対し実効46GBsと定義 rarr メモリの実効BF = 036
応力力微分
速度度場更更新 境界条件 速度度場更更新
速度度微分
応力力場更更新 境界条件 応力力場更更新
速度度場 MPI通信
応力力場 MPI通信 Tim
e Step
0
5
10
15
20
25
Peak
ratio
()
Org
Tune
仕 様
CPU性能 128GF(16GFx8コア)
コア数 8個
浮動小数点演算器構成 (コア当り)
積和演算器2times2個(SIMD)拡張 逆数近似演算器2times2個(SIMD)拡張 除算器2個 比較器2個 ビジュアル演算器1個
浮動小数点レジスタ(64ビット)256本 グローバルレジスタ(64ビット)188本
キャッシュ構成 1次命令キャッシュ32KB(2way) 1次データキャッシュ32KB(2way) 2次キャッシュ5MB(10way)コア間共有
メモリバンド幅 64GBs(05BF) 図1 スーパーコンピュータ「京」
表1 CPU仕様
図2 Seism3Dにおけるシミュレーション結果 図3 Seism3D処理慨要
表2 StreamBenchmark Triadの測定結果
境界条件応力力場更更新 Org Tune
L1Dミス率率率 354 271
L1Dミスdm率率率 4993 1183
L1Dミスhwpf率率率 2599 8817
L1Dミスswpf率率率 2408 000
L2ミス率率率 211 197
L2スループット 4232GBs 3579GBs
メモリスループット 3986GBs 4287GBs
Peak Ratio 880 1005
L1Dミス率が基準値(3125)を超えL1Dミスdm率が20を超えるとL1キャッシュ競合の可能性が高いL1キャッシュ競合は最内にストリームが多いケースに発生する確率が高まるためループ分割や配列融合が効果的である
bull メモリスループットが十分な演算カーネル
表3 ループ分割+配列融合によるチューニング結果
差分計算における再利用性や京に備わった機能を検証し要求BFを下げることによる推定性能および実効性能の向上を実施した
do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 dxv (kij) = ( v(kij) - v(ki-1j) ) R40 amp - ( v(ki+1j) - v(ki-2j) ) R41 end do end do end do
1 ループ融合 第1軸と第2軸の差分計算ループを融合することによりロードの共通化がなされる結果要求BFが24から2に下がり推定性能は18となる実測値174
$OMP DO SCHEDULE(static1) do j = 1 NYP do i = 1 NXP do k = 1 NZ dyv (kij) = ( v(kij) - v(kij-1) ) R40y amp - ( v(kij+1) - v(kij-2) ) R41y end do end do end do
2 Cyclic分割 第3軸の差分計算ループは評価サイズではキャッシュにおける再利用性がない従って要求BFは48だがCyclic分割を指定することによりスレッド間で再利用性が発生し要求BFが24に下がり推定性能は75から15に上がる 実測値135
OCL XFILL do j = 1 NYP do i = 1 NXP do k = 3 NZ-1 dzv (kij) = ( v(kij) - v(k-1ij) ) R40 amp - ( v(k+1ij) - v(k-2ij) ) R41 end do end do end do
3 XFILL指示行 京のコンパイラに備わったXFILL指示行によりストアのコストを半減させる要求BFは24から16に下がり推定性能は15から225に上がる実測値212
bull メモリインテンシブなアプリケーションではメモリのBF値とループのBF値から実効性能の推定が可能であり高速化の評価基準となる
bull メモリスループットが十分得られていることが推定性能に達する条件であり阻害要因を取り除くことが重要である
bull 3種類のBF値を下げる手法を提案しより高速な実行を可能とした bull これらの高速化手法を適用した結果82944並列において
21PFLOPS(ピーク比197)を達成
図4 各処理におけるチューニング前後の性能 図5 82944並列までの性能評価結果
オリジナル bull L1Dミス率354(gt3125) bull L1Dミスdm 4993(gt20) rarr L1キャッシュ競合によりメモリスループットが 十分でない
チューニング bull L1Dミス率L1Dミスdm率が基準値を下回る bull ループ分割の結果最内ストリームが減少し
hwpfによるミスが支配的 bull メモリスループットおよび性能が向上
ループ分割 配列列融合
bull 連続アクセスのキャッシュミスの基準値はseism3Dは単精度であるため3125となる(1回32回=1(4B128B))
bull L1D$ミス率が基準値を超えL1D$ミスdm率が20を超えるとL1キャッシュスラッシングの可能性が高い
bull L1キャッシュスラッシングはループ内の配列ストリームアクセスが多い場合に起きる確率が高くなる
bull このような場合はループ分割や配列融合が効果的
キャッシュスラッシングの解消
2014年5月15日 CMSI計算科学技術 特論B
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
24
速度時間積分の計算 e)
要求BF 7252=138
性能予測 036138 = 026実測値 0240
オリジナルコードの結果
2014年5月15日 CMSI計算科学技術 特論B
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
25
0
5
10
15
20
25
13
13
13
Peakra
+o(
)
Org
Tune
d)c)f)e) b)a)
CPU単体性能チューニングの結果
2014年5月15日 CMSI計算科学技術 特論B
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
26
Seism3Dの総合性能()通信を含む性能
n 8万ノードまでの良好なウィークスケーラビリティを得られた n フルノードでトータル性能19Pflopsを達成
2014年5月15日 CMSI計算科学技術 特論B
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
27
FrontFlowblueの性能最適化
Seism3D Earth Science 9 Strong ground motions caused by large earthquakes
are evaluated based on numerical simulation of seismic-wave propagation in heterogeneous structure
9 Solving a coupled model of seismic wave ground deformation and tunamis by the tsunami-coupled equation of motion
9 Calculated by using the finite-difference method(FDM)
9 To reduce the amount of communications and to make the computational load balance two-dimensional domain decomposition is adopted
The K computer provides huge computation resource While focusing on six applications which are expected to achieve distinguished results from various scientific fields such as earth science material science engineering and physics We have improved the performance of these codes in collaboration with researchers
FrontFlowblue Engineering 9 General purpose computational fluid dynamics
code based on the Large Eddy Simulation for incompressible unsteady flow
9 Based on Finite Element Method and having 2nd order accuracy for time and space
9 Able to analysis for turbomachinery acoustics and cavitation
9 Optimized for massively parallel 9 ldquoResearch and Development of Innovative
Simulation Softwarerdquo project in Japan
PHASE Material Science 9 First-principles molecular dynamics simulator for
nanomaterials 9 Analysis of structures and properties of matters
based on the quantum theory of the electron 9 Plane-wave basis set 9 First-principles pseudopotential method 9 The self consistent field loop 9 Orthogonalization diagonalization and FFT in the
convergence calculations of the steepest descent method and conjugate gradient method
NICAM Earth Science 9 XXX
LatticeQCD Physics 9 XXX
RSDFT Material Science 9 Clarifying and predicting the properties of
materials 9 First-principles electronic structure calculation
based on density functional theory 9 Solve an eigenvalue equation called the Kohn-
Sham equation 9 Real space method adopting difference method
for three-dimensional grids 9 Subspace iteration method adopting self-
consistent field calculation
Fig4 Snapshots of seismic wave and tsunami wave propagation simulation Fig6 Wave function of conduction band minimum in silicon nanowire with 40000 atoms
Fig2 Several analysis results of FlontFlowblue Fig1
Fig5
Courtesy of Earthquake Reserach Institute The University of Tokyo
Courtesy of The University of Tokyo
Fig3 The charge distribution around the SiC screw dislocation side view
Courtesy of National Institute for Material Science
2014年5月15日 CMSI計算科学技術 特論B
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
28
n有限要素法を用いた流体計算のプログラム n有限要素法には2つのタイプの計算方法がある
n 全体剛性マトリクスを構築するタイプ n 全体構成マトリクスを構築せずに要素剛性マトリクスのみで計算を進め
るタイプ(エレメントバイエレメント法) nFFBは新バージョンにおいて両方のソルバに対応
FrontFlowblue(FFb)
2014年5月15日 CMSI計算科学技術 特論B
A
314
314
Ax=b 0527-
314-8(9
6X)(amp+A)+( -$amp 60527()(314 15 13amp
疎行列のマトリクス
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
29
FFbのタイムステップループ構造
ddsync
setpro
erchk2
vel3d1
圧力の計算13 (pres3x13 pres3e)
vel3d2
calfbf
calfrx
caluel
nodlex
hokan
caldnr
ddcom2
同期
物性
エラー13 チェック
速度13 予測子
速度13 修正
流体力
物理量の13 平均
セル中心での13 速度
物理量の13 節点への補間
エラーフラグの13 伝達
サンプリング
収束判定用13 ノルム計算
は通信を呼ぶ
主要部
2014年5月15日 CMSI計算科学技術 特論B
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
30
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
pres3x13 pres3e13 (圧力計算)
nodlex13 要素値を節点値へ補間
Nex
t Tim
e
e2pmat13 13 要素毎の行列から全体行列を作る
ddcomx13 13 行列の共有節点に関する成分を隣接通信dgnscl13 13 対角スケーリングddcomx13 13 行列の共有節点に関する成分を隣接通信clrcrs13 13 ディリクレ条件を行列に反映
bcgs2x13 13 uvwの速度予測子をBi-shy‐CGSTB法で求める13
13 calaxc13 13 Axを計算13 ddcomx13 13 隣接通信(Ax)13
13 ddcom213 13 Allreduce13 (r0rk)13
13 ddcom213 13 Allreduce13 (bb)13
13 calaxc13 13 Apkを計算
13 ddcomx13 13 隣接通信(Apk)13
13 ddcom213 Allreduce(r0Apk)13
13 calaxc13 13 Atkを計算
13 ddcomx13 13 隣接通信(Atk)13
13 ddcom213 13 Allreduce13 (AtkTk)13
13 ddcom213 13 Allreduce(AtkAtk)13
ループ
赤字は通信ルーチン
FFbの主要部の構造
2014年5月15日 CMSI計算科学技術 特論B
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
31
FFbの主要部の構造
pres3x13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13
13 13 |13 13 13 +-shy‐-shy‐ddcomx13 右辺ベクトルbの隣接通信 13 13 13 |13 13 13 +-shy‐-shy‐bcfix213 境界条件をAとbに入れる13
13 13 |13 13 13 +-shy‐-shy‐e2pmat13 CRS形式で全体行列を作る13
13 13 |13 13 13 +-shy‐-shy‐bcgs2x13 Ax=bを解いて圧力を求める13
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐calaxc13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 13 内積times213
13 13 |13 13 13 13 |13 13 13 |13 13 13 13 (ループ 要素毎)13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積13
13 13 |13 13 13 13 13 13 calaxc13 13 -shy‐gt13 ddcomx13 13 13 |13 13 13 13 13 13 ddcom2 内積times413
13 13 |13 13 13 +-shy‐-shy‐aveprt13 圧力(on節点)を隣接通信13
13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 +-shy‐-shy‐13 ddcomx
pres3e13 13 13 |13 13 13 +-shy‐-shy‐fild3x13 要素内での速度の発散13 13 13 |13 13 13 +-shy‐-shy‐bcgsxe13 要素毎で圧力を解く13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 |13 13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 |13 13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcom213 内積times213 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 |13 13 13 13 |13 13 13 13 (ループ 要素毎13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐callap13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐ddcomx13 13 13 |13 13 13 13 13 13 13 |13 13 13 13 +-shy‐-shy‐fild3x13 13 13 |13 13 13 13 13 13 13 |13 13 13 |13 13 13 13 13 13 13 +-shy‐-shy‐ddcom2 内積times413 13 13 |13 13 13 +-shy‐-shy‐nodlex13 要素圧力を節点値に補間13 13 13 13 13 13 13 13 |13 13 13 13 13 13 13 13 13 13 +-shy‐-shy‐ddcomx
vel3d113 速度予測子の計算
vel3d213 速度予測子と圧力から13
速度を修正
圧力計算N
ext T
ime
節点圧力モード 要素圧力モード
エレメントバイエレメント全体剛性マトリクス作成
2014年5月15日 CMSI計算科学技術 特論B
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
32
1411$
1304$832$
483$
295$210$
189$
callap_PRL_2_calaxc_fild3x_PRL_1_callap_vel3d1_PRL_16_int3dx_callap_PRL_5_vel3d1_PRL_8_vel3d1_nodlex_
全体4747単位秒
bull 10万個の4面体要素+α13
bull 1411s(30)が4面体要素の勾配計算13
bull 1304s(27)が疎行列ベクトル積13
bull 832s(17)が4面体要素の発散計算
要素圧力モードでの処理時間内訳上位10件
FFbの主要計算
2014年5月15日 CMSI計算科学技術 特論B
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
33
FFbの並列化
3次元の領域分割(非構造格子)
2014年5月15日 CMSI計算科学技術 特論B
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
34
FFbの並列特性分析
基本モデル 基本モデルtimes8 基本モデルtimes64 基本モデルtimes512
メッシュ規模拡大イメージ(メッシュを細かくしただけで評価モデルは同じもの)
領域分割数(コア数)
2 16 128 1024
要素数
評価モデルについて
節点数 60680
53460
456342427680
35356463421440
2782745427371520
要素数コア
節点数コア 30340
26730
2852126730
2762226730
2717526730
規模を拡大しても1コア当たりの計算規模は同等としている
case-1 case-2 case-3 case-4
初期のウィークスケール評価
2014年5月15日 CMSI計算科学技術 特論B
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
35
FFbの並列特性分析
初期のウィークスケール評価
演算通信時間の最大値(秒)
0500100015002000250030003500400045005000
1 2 3 4case
実行時間(秒)
演算通信
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
主要ルーチン実行時間最大値(秒)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
1 2 3 4case
測定時間(秒) POIS3D
FIELD3NFRACT1CALAXBCGSTB
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
通信時間最大値
0
200
400
600
800
1000
1200
1400
1600
1800
1 2 3 4case
測定時間(秒)
DDCOM2DDCOM3
コア13 13 13 13 13 213 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1613 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12813 13 13 13 13 13 13 13 13 13 13 13 13 13 102413
隣接通信
大域通信
bull 演算がウィークスケールしているのかよく分からない
bull 隣接通信も大域通信も増大しているように見える
bull 複雑な問題で測定しているので色々な要素が入ってきている
bull シンプルにアプリの問題だけをあぶり出せていない
2014年5月15日 CMSI計算科学技術 特論B
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
36
FFbの並列特性分析
問題設定を簡素化
bull 下左図のようなキャビティの問題がある
bull その問題を下右図のように横に連結してそれぞれのノードが同じ問題を解く仮想的な問題を作成
bull こうすることにより各ノードは全く同じ問題を計算する完全なウィークスケールの問題となる
bull これでシンプルにアプリケーションの問題のみをあぶり出す事が可能となる
2014年5月15日 CMSI計算科学技術 特論B
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
37
1000Proc 8000Proc
大域通信大域通信
隣接通信
隣接通信
FFbの並列特性分析
bull ここでは1000プロセスと8000プロセスの結果を示す
bull 演算は完全にウィークスケールしておりロードインバランスもない
bull 隣接通信の増大もないが大域通信(スカラ値のallreduce)のみが問題と分かった
2014年5月15日 CMSI計算科学技術 特論B
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
38
FFbの単体性能最適化 (性能見積りとチューニング)
FFbは要求BF値が大きくかつリストアクセスを使用
するアプリケーション
2014年5月15日 CMSI計算科学技術 特論B
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
39
節点圧力カーネル(calaxc相当)の性能見積り
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) ICRS=ICRS+1 IP2=IPCRS(ICRS) BUF=BUF+A(ICRS)S(IP2) 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTUINE
オリジナルコード(疎行列とベクトルの積)
n CRS格納形式の行列ベクトル積 n ベクトルアクセスがリストアクセス
となる n ベクトルの部分がL1キャッシュに
載っていると仮定した場合 n ベクトルのメモリへのアクセスを
全く無視してよい n メモリからのロードは行列とリスト
のみ
行列
リスト
ベクトル
要求flop
add 1 mult 1 = 2
要求BF 82 = 4
性能予測 0364 = 009
要求Byteの算出
単精度度2 load なので
24 = 8byte
(スレッド並列を仮定しピーク性能128Gflopsに対して)
2014年5月15日 CMSI計算科学技術 特論B
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
40
(スレッド並列列なし1コア)n オリジナルコードはスレッド並列されていなかった n この状態の推定性能を前頁と同様な方法で見積もる n メモリバンド幅を1コアで占有する場合のSTREAMベンチマークの結果は
20GB秒 n 1コアの理論ピーク性能は16GFLOPS n 従って理論的なBF値は20GB16GFLOPで125
(スレッド並列なしピーク性能16Gflopsに対して)
要求Byteの算出 2loadより 2 4byte = 8要求flop 1(add)+1(mult) = 2
要求BF 82 = 4
性能予測 1254= 0313
実測値 0059(六六面体)
0024(四面体)
n ベクトルがリストアクセス n 連続アクセスでないためプリフェッチが
効きにくい n メモリアクセスのレイテンシが見える n 最悪1キャッシュラインのうち1要素しか
使用できない事による大きなペナルティが発生
n 著しい性能低下が発生 n L2オンキャッシュでも同様のペナルティ
が発生
節点圧力カーネル(calaxc相当)の実測性能
2014年5月15日 CMSI計算科学技術 特論B
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
41
チューニング1 フルアンロール
ICRS=0 DO 110 IP=1NP BUF=00E0 DO 100 K=1NPP(IP) MAX_NZ=27 BUF=BUF+A(ICRS+ 1)S(IPCRS(ICRS+ 1)) amp +A(ICRS+ 2)S(IPCRS(ICRS+ 2)) amp +A(ICRS+ 3)S(IPCRS(ICRS+ 3)) amp +A(ICRS+ 4)S(IPCRS(ICRS+ 4)) (省略) amp +A(ICRS+24)S(IPCRS(ICRS+24)) amp +A(ICRS+25)S(IPCRS(ICRS+25)) amp +A(ICRS+26)S(IPCRS(ICRS+26)) amp +A(ICRS+27)S(IPCRS(ICRS+27)) ICRS=ICRS+27 100 CONTINUE AS(IP)=AS(IP)+BUF 110 CONTINUE
狙い n スケジューリングの改善(演算待ちの削減)
変更点 n 行列要素の配列に0を代入 nベクトルインデックスの配列に0を代入 n余分な配列同士は00の演算を実施
hellip
A IPCRS S
helliphellip
hellip
固定数
NP
2014年5月15日 CMSI計算科学技術 特論B
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
42
チューニング2 リオーダリング(14)
狙い nベクトルデータ(S)のブロック化によるL1L2キャッシュミスの削減 オリジナルデータの特徴 n6面体(総回転数 約2700万)
n 最初の1M回のSへの広範囲なランダムアクセス
n それ以降は二極化するが局所的アクセス n4面体(総回転数約270万)
n 全アクセスとも広範囲なランダムアクセス
n 4面体 オリジナルデータ
n 6面体 オリジナルデータ
2014年5月15日 CMSI計算科学技術 特論B
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
43
節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング
X
Z
Y
ひとつのブロックを内と外に分け内側(A)のナンバリング後外側(B)のナンバリングを実施(内外の比 82)
1 2 36
910 11A
チューニング2 リオーダリング(24)
2014年5月15日 CMSI計算科学技術 特論B
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
44
n 4面体 リオーダリング結果 n 6面体 リオーダリング結果
ICRS=1~5M
n 物理的に近い節点が配列の並びとしても近い位置に配置される事を期待 n 一要素を構成する節点の番号が近くなる n 一箱の大きさを調整することによりベクトルのリストアクセスの多くに対しL1
オンキャシュのデータを利用できる
チューニング2 リオーダリング(34)
2014年5月15日 CMSI計算科学技術 特論B
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
45
リオーダリング前 nマスタースレッドが担当する範囲にランダムアクセスが集中しメモリアクセスコストが増大 nスレーブスレッドが担当する範囲は局所アクセスが多く結果としてバリア同期待ちのコストが支配的
リオーダリング後 n全てのスレッドが均一的に局所アクセス化 nメモリアクセスバランスの改善と同期コストの大幅な削減
13
バリア同期待ち
13
13
13
13
13
13
13
13
13
チューニング2 リオーダリング(44)
2014年5月15日 CMSI計算科学技術 特論B
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
46
L1 オンキャッシュである時の理論性能値である9に近い性能値を実現
節点圧力カーネル(calaxc相当)チューニング結果
2014年5月15日 CMSI計算科学技術 特論B
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
47
節点圧力カーネル(callap)のチューニング
カーネル概要 12
DO IE=1NE IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO
型 配列名とサイズ 内容INTEGER4 NODE(9NE) 節点リストREAL4 S(NE) 圧力
REAL4DNX(9NE) DNY(9NE) DNZ(9NE) 形状関数の導関数
REAL4 FX(NP) FY(NP) FZ(NP) 圧力勾配ベクトルNEは要素数NPは節点数13
単精度だが工学上問題はない
四面体要素についてnablapの有限要素近似 を計算する
1
100
Elem113
Elem
1 2
3 2
3
10 51S(1)timesDNX(21)
S(2)timesDNX(32)
FXFYFZ
DNXDNYD
データ依存が生じる
sum= part
partcong
part
part=nabla
1je
i
j
i
pxN
xp
p
2014年5月15日 CMSI計算科学技術 特論B
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
48
節点圧力カーネル(callap)のチューニング
カーネル概要 22
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
DO ICOLOR=1NCOLOR(1) IES=LLOOP(ICOLOR 1)+1 IEE=LLOOP(ICOLOR+11) DO IE=IESIEEここで並列 IP1=NODE(1IE) IP2=NODE(2IE) IP3=NODE(3IE) IP4=NODE(4IE) SWRK=S(IE) FX(IP1)=FX(IP1)-SWRKDNX(1IE) FX(IP2)=FX(IP2)-SWRKDNX(2IE) FX(IP3)=FX(IP3)-SWRKDNX(3IE) FX(IP4)=FX(IP4)-SWRKDNX(4IE) FY(IP1)=FY(IP1)-SWRKDNY(1IE) FY(IP2)=FY(IP2)-SWRKDNY(2IE) FY(IP3)=FY(IP3)-SWRKDNY(3IE) FY(IP4)=FY(IP4)-SWRKDNY(4IE) FZ(IP1)=FZ(IP1)-SWRKDNZ(1IE) FZ(IP2)=FZ(IP2)-SWRKDNZ(2IE) FZ(IP3)=FZ(IP3)-SWRKDNZ(3IE) FZ(IP4)=FZ(IP4)-SWRKDNZ(4IE) ENDDO ENDDO
カラーリングによりデータ依存が生ずる要素を別のグループ(カラー)に分ける
1 5 2 6
9 13 10 14
3 7 4 8
11 15 12 16
要素(メッシュ)
11 1512 169 1310 14
1 52 63 74 8
配列 LLOOPNODEDNX~Z
カラー1 カラー2
カラー3 カラー4
メモリ上配置
2014年5月15日 CMSI計算科学技術 特論B
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
49
節点圧力カーネル(callap)の性能見積り
bull 要求バイト16要素times4Btimes(94)+1要素times4B=148B
bull 浮動小数点演算数24FLOP
bull 要求BF値は14824=617
bull STREAMベンチマークによる「京」の実効メモリバンド幅は466GBs
bull 「京」の実効BF値は466128=036
bull メモリバンド幅がネックとなり実効上の性能上限は128GFLOPSの036617=583
2014年5月15日 CMSI計算科学技術 特論B
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
50
節点圧力カーネル(callap)の性能
bullカラーリングのみを実施しスレッド並列した時点で16のピーク性能比 bullcalaxcと同様の節点のオーダリングを行う事でピーク性能比378を達成 bullさらに配列融合を実施し441まで向上
パターンNo ピーク性能比
L1Dキャッシュミス率
メモリスループットGBs
1 395 398 35702 405 369 35914 405 369 35885 441 337 3880
パターンNo1234
DNX DNY DNZをDNXYZに融合FX FY FZをFXYZに融合パターン2+演算淳子変更パターン3+パターン1
内容
bull加えてブロック間の要素数のバランスを改善することによりピーク性能比458メモリスループット4122GBsecまで到達
2014年5月15日 CMSI計算科学技術 特論B
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
51
13
+
-)$amp(
FFbのウィークスケール性能(Ver5)
2014年5月15日 CMSI計算科学技術 特論B
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
52
13
amp
( $
FFbの総合性能(Ver7)
現状の総合性能は80000ノードでピーク性能比316
2014年5月15日 CMSI計算科学技術 特論B
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
53
NPB MG(講義第2回で紹介) のチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
54
プロファイラーによるコスト分析
Procedures13 profile13 13 13 13 13 13 13 13 13 13 13 13 Application13 -13 procedures13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Cost13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 Barrier13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 MPI13 13 13 13 13 13 13 13 13 13 13 13 13 13 Start13 13 13 13 13 13 End13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 136713 13 13 100000013 13 13 13 13 13 13 13 13 13 13 13 13 13 113 13 13 13 13 0073213 13 13 13 13 13 13 13 13 13 13 13 13 13 813 13 13 13 13 0585213 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 Application13 13 13 13 ------------------------------------------------------------------------------------------------13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 62013 13 13 13 45354813 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 73613 13 13 13 13 13 75813 13 13 resid_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 27713 13 13 13 20263313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 66413 13 13 13 13 13 68613 13 13 psinv_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14013 13 13 13 10241413 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 82613 13 13 13 13 13 85813 13 13 rprj3_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13113 13 13 13 13 9583013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 91313 13 13 13 13 13 94813 13 13 interp_OMP_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8013 13 13 13 13 5852213 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 124113 13 13 13 13 124313 13 13 ready_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 2013 13 13 13 13 1463113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 213 13 13 13 10000013 13 13 13 13 139813 13 13 13 13 149313 13 13 take3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1913 13 13 13 13 1389913 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 613 13 13 13 31578913 13 13 13 13 126313 13 13 13 13 139313 13 13 give3_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1713 13 13 13 13 1243613 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 229013 13 13 13 13 229613 13 13 zran3_PRL_1_13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1513 13 13 13 13 1097313 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 --13 13 13 13 13 13 13 --13 13 13 __jwe_etbf13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1413 13 13 13 13 1024113 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 13 13 13 13 13 13 13 13 13 013 13 13 13 13 0000013 13 13 13 13 211513 13 13 13 13 231013 13 13 zran3_
ある程度チューニングされている rprj3(102)を分析しさらに高速化を目指す
2014年5月15日 CMSI計算科学技術 特論B
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
55
ループのBFから推定性能を算出する
性能の目安 BF = 6424= 267 メモリ律速と仮定すると期待される性能値は 036257 = 135
2014年5月15日 CMSI計算科学技術 特論B
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
56
ループrprj3の分析(1)
メモリスループット
BFが高いループであるがメモリスループットが低い
MemoryCache
メモリスループット(GBsec)
L2エンジンスループット
(GBsec)
L2 スループット(GBsec)
メモリビジー率 L2エンジンビジー率 L1エンジンビジー率
337 1576 1117
58 70
44
334 1571 1118 44
334 1572 1116 44
335 1569 1114 44
335 1566 1109 44
333 1572 1118 44
337 1580 1122 44
335 1573 1117 44
2678 12570 8923 44
最大値 46Gsメモリビジー率 メモリスループットの最大値(46Gs)に 対する割合
ピーク性能比 494
2014年5月15日 CMSI計算科学技術 特論B
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
57
ループrprj3の分析(2)
Cache
L1I ミス率
(有効総命令数)
L1D ミス率(ロードス
トア数)ロードスト
ア数L1D ミス数
L1D ミス dm率
(L1D ミス数)
L1D ミス hwpf 率
(L1D ミス数)
L1D ミス swpf 率
(L1D ミス数)
L2 ミス率(ロードス
トア数) L2 ミス数
L2 ミス dm 率
(L2 ミス数)
L2 ミス pf 率
(L2 ミス数)
μDTLB ミス率
(ロードストア数)
mDTLB ミス率
(ロードストア数)
Thread 0 003 1252 299E+08 375E+07 4147 5853 000 343 103E+07 962 9038 000599 000017
Thread 1 003 1258 299E+08 376E+07 4152 5848 000 340 102E+07 857 9143 000449 000010
Thread 2 003 1257 299E+08 376E+07 4181 5819 000 342 102E+07 804 9196 000431 000005
Thread 3 003 1253 299E+08 375E+07 4136 5864 000 341 102E+07 905 9095 000417 000004
Thread 4 003 1248 299E+08 373E+07 4178 5822 000 343 103E+07 920 9080 000414 000003
Thread 5 003 1259 299E+08 377E+07 4166 5833 000 341 102E+07 831 9169 000430 000006
Thread 6 003 1263 299E+08 378E+07 4184 5816 000 344 103E+07 797 9203 000415 000004
Thread 7 003 1257 299E+08 376E+07 4156 5844 000 343 103E+07 896 9104 000494 000004
Process 003 1256 239E+09 301E+08 4162 5837 000 342 819E+07 871 9129 000456 000007
キャッシュ状況L1DL2ミス率 倍精度であれば625が基準値 それを上回りL1Dミスdm率が20を超えている場合は L1キャッシュスラッシングが発生していると考える
L1キャッシュスラッシングが発生していると判定
2014年5月15日 CMSI計算科学技術 特論B
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
58
ループrprj3の分析結果
bull L1キャッシュスラッシングが発生している bull 演算系はSIMD化率が低い rArr 本ループは演算の比率が低い(BFが高い)ため まずはスラッシングを回避する処置が必要と判断する
スラッシングの回避策 bull使用する配列数を減らす ループ分割配列融合スカラ化
bull使用する配列のアドレスをずらす パディング Common化
2014年5月15日 CMSI計算科学技術 特論B
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
59
ループrprj3のチューニング(1)
テンポラリ配列xyの利用をやめることにより配列数を少なくするのと同時に ループ融合を実施し無駄なロードを発生させないチューニングを採用する
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
$OMP PARALLEL DO PRIVATE(xy1y2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
60
ループrprj3のチューニング(2)
配列rをpaddingすることによりアドレスを明にずらす (rは1次元配列を3次元配列の引数で受け取るため様々なルーチンに手が入る)
do j3=2m3j-1 i3 = 2j3-d3 C i3 = 2j3-1 do j2=2m2j-1 i2 = 2j2-d2 C i2 = 2j2-1 do j1=2m1j i1 = 2j1-d1 C i1 = 2j1-1 x1(i1-1) = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) y1(i1-1) = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) enddo do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( x1(i1-1) + x1(i1+1) + y2) gt + 00625D0 ( y1(i1-1) + y1(i1+1) ) enddo enddo enddo
double precision r(m1k+F_PADm2km3k) s(m1j+F_PADm2jm3j) $OMP PARALLEL DO PRIVATE(xy11mxy11pxy12mxy12py2x2i3i2i1) do j3=2m3j-1 i3 = 2j3-d3 do j2=2m2j-1 i2 = 2j2-d2 do j1=2m1j-1 i1 = 2j1-d1 C i1 = 2j1-1 xy11m = r(i1-1i2-1i3 ) + r(i1-1i2+1i3 ) gt + r(i1-1i2 i3-1) + r(i1-1i2 i3+1) xy11p = r(i1+1i2-1i3 ) + r(i1+1i2+1i3 ) gt + r(i1+1i2 i3-1) + r(i1+1i2 i3+1) xy12m = r(i1-1i2-1i3-1) + r(i1-1i2-1i3+1) gt + r(i1-1i2+1i3-1) + r(i1-1i2+1i3+1) xy12p = r(i1+1i2-1i3-1) + r(i1+1i2-1i3+1) gt + r(i1+1i2+1i3-1) + r(i1+1i2+1i3+1) y2 = r(i1 i2-1i3-1) + r(i1 i2-1i3+1) gt + r(i1 i2+1i3-1) + r(i1 i2+1i3+1) x2 = r(i1 i2-1i3 ) + r(i1 i2+1i3 ) gt + r(i1 i2 i3-1) + r(i1 i2 i3+1) s(j1j2j3) = gt 05D0 r(i1i2i3) gt + 025D0 ( r(i1-1i2i3) + r(i1+1i2i3) + x2) gt + 0125D0 ( xy11m + xy11p + y2) gt + 00625D0 ( xy12m + xy12p ) enddo enddo enddo
2014年5月15日 CMSI計算科学技術 特論B
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
61
ループrprj3のチューニング(3)
Before After
L1Dミス率 1256 645
L1Dミスdm率 4162 1544
メモリスループット 2678Gs 4133Gs
Peak性能 494 1096
倍精度の連続ミス率基準値(625)に近くなり 性能メモリスループットが改善
ピーク性能についてはまだ改善の余地はあると思われる
2014年5月15日 CMSI計算科学技術 特論B
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)
まとめ
62
bull理研で進めた性能最適化 bullSeism3Dの性能最適化 bullFrontFlowblueの性能最適化 bullNPB MGのチューニング事例
2014年5月15日 CMSI計算科学技術 特論B
南13 一生井上13 俊介堤13 重信前田13 拓人長谷川13 幸弘黒田13 明義寺井13 優晃横川13 三津夫「京」コンピュータにおける疎行列とベクトル積の性能チューニングと性能評価ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp23-3113 (2012)
Hasegawa Y Iwata JI Tsuji M Takahashi D Oshiyama AMinami K Boku T Shoji F Uno A Kurokawa M Inoue HMiyoshi I Yokokawa M
ldquoFirst-principles calculations of electron states of a silicon nanowire with 100000 atoms on the K computerrdquoProceedings of 2011 International Conference for High Performance Computing Networking Storage and Analysis pp 11ndash111 SC rsquo11 ACM New York NY USA (2011)黒田13 明義13 長谷川13 幸弘13 寺井13 優晃13 井上13 俊介13 市川13 真一13 小松13 秀実13 大井13 憲行13 安藤13 琢也13 山崎13 隆浩13 大野13 隆央13 南13 一生13 ナノ材料第一原理分子動力学プログラムPHASE13 の京速コンピュータ「京」上の計算性能最適化ハイパフォーマンスコンピューティングと計算科学シンポジウム論文集13 pp144-15213 (2012)
Kiyoshi Kumahata Shunsuke Inoue Kazuo Minami Kernel performance improvement for the FEM-based fluid analysis code on the K computerProcedia Computer ScienceVolume 18 2013 Pages 2496ndash24992013 International Conference on Computational Science井上俊介 堤重信前田拓人南一生スーパーコンピュータ「京」におけるメモリインテンシブな アプリケーションの評価および高性能化先進的計算基盤システムシンポジウム SACSIS2013論文集pp123(2013)
Masaaki Terai Eiji Tomiyama Hitoshi Murai Kazuo Minami and Mitsuo Yokokawa K-scope a Java-based Fortran Source Code Analyzer with Graphical User Interface for Performance Improvement Third International Workshop on Parallel Software Tools and Tool Infrastructures (PSTI2012)