CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

62
RIKEN ADVANCED INSTITUTE FOR COMPUTATIONAL SCIENCE 第5回 アプリケーションの性能最適化の実例2 2014年5月15日 独立行政法人理化学研究所 計算科学研究機構 運用技術部門 ソフトウェア技術チーム チームヘッド 南 一生 [email protected] CMSI 計算科学技術 特論B

Transcript of CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

Page 1: 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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 2: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

講義の概要

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 3: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

内容

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 4: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 5: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 6: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 7: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 8: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 9: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 10: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 11: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 12: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 13: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 14: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 15: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 16: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 17: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 18: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 19: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 20: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 21: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 22: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 23: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 24: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 25: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 26: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 27: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 28: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 29: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 30: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 31: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 32: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 33: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 34: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 35: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 36: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 37: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 38: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 39: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 40: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 41: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 42: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 43: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

43

節点番号のリオーダリング nオリジナルデータを各軸分割しブロックを作成 n各ブロックを外と内に分割し物理座標に基づき内側外側の順にナンバリング

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)

Page 44: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 45: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 46: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 47: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 48: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 49: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 50: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 51: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 52: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 53: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 54: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 55: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 56: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 57: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 58: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 59: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 60: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 61: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

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)

Page 62: CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2

まとめ

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)