SS研 科学計算技術分科会 2016年度会合 講演資料

富士通の性能解析ツールのご紹介
2016年10月27日
富士通株式会社
次世代テクニカルコンピューティング開発本部
言語開発統括部 第一開発部
0

志田 直之
Copyright 2016 FUJITSU LIMITEDAgenda 本講演の内容
 「京」で開発した性能解析ツールのご紹介をします 「京」からPRIMEHPC FX100まで同じフレームワークで性能解析ツールを提供していますが、本講演では「京」の仕様をご紹介します 目次
 「京」の性能解析ツール
 [fipp] 基本プロファイラ
 [fapp] 詳細プロファイラ
 [精密] 精密PA可視化機能
 チューニング事例のご紹介

1

Copyright 2016 FUJITSU LIMITED

「京」の性能解析ツール

2

Copyright 2016 FUJITSU LIMITED

「京」のシステムソフトウェア構成
User/ISV Applications
HPC Portal / System Management Portal
System operations management
 System configuration management
 System control
 System monitoring
 System installation & operation

Job operations management
 Job manager
 Job scheduler Resource management
 Parallel execution environment

High-performance file system
 Lustre-based distributed file system
 High scalability
 IO bandwidth guarantee
 High reliability & availability

VISIMPACT TM
 Shared L2 cache on a chip Hardware intra-processor
synchronization

File system, operations management

Compilers
 Hybrid parallel programming Sector cache support
 SIMD / Register file extensions

MPI Library Scalability of High-Func.
 Barrier Comm.

Support Tools

 IDE
 Profiler & Tuning tools
 Interactive debugger

Application development environment

Linux-based enhanced Operating System Enhanced hardware support
 System noise reduction
 Error detection / Low power

K computer

3

Copyright 2016 FUJITSU LIMITED

「京」の性能解析ツールの開発コンセプト
 大規模アプリケーションへの対応
 数万プロセスでも動作することを目標に開発

 標準インターフェースの活用 CPUカウンタ情報を取得するインターフェースに、PAPIを採用
 トレーサ機能として、VampirTraceを活用

 GUI機能の強化
 Adobe社のAIRを採⽤し、クライアントでの軽量動作を実現
 プロセスの参照に、Tofu特有のトポロジビューを採用

4

Copyright 2016 FUJITSU LIMITED

性能解析ツールの継続的な改良
 計算科学研究機構(AICS)様と議論しながら、改版を重ね、機能改良を実施
 基本プロファイラの積上げグラフの改良
 コストの集計方法の改善（共有ライブラリ内コストの表示）
 精密PA可視化機能

 評判
…

5

Copyright 2016 FUJITSU LIMITED

性能解析ツールによるチューニングフロー

Job
Statistics

Profiler

Tofu-PA

Vampir-trace

mpiP

RMATT

MPI Tuning
Overall
TuningExecution
CPU Tuning
Profiler
PAPI

Vampir-trace

今回のご紹介範囲

京に提供しているツール

Open Source

6

Copyright 2016 FUJITSU LIMITEDご提供している性能解析ツールの機能
CPU Tuning

MPI Tuning[fipp] 基本プロファイラ
アプリケーション全体（一部も可能）のホットスポットの確認

トレーサ
MPI関数やglibcの時系列
情報の採取[fapp] 詳細プロファイラ
区間指定による性能情報の詳細化
Tofu PA[精密] 精密PA可視化機能

TofuインタコネクトのPA表示機能

7回連続実⾏による、精密な性能情
報を採取

RMATT
通信プロファイラによる自動ランクマッピング作成

今回のご紹介範囲
7

Copyright 2016 FUJITSU LIMITED

“ツール”以外のチューニング情報 富士通コンパイラのリスティング情報（-Nlstオプション）
 コンパイラがどのような最適化を⾏ったかを表⽰します。
468
469

1
1

470
471
472
473
474
475
476
477
478
479
480
481
482
483

2
2
2
2
2
2
2
2
2
2
2
3
3
3

do

s
p
p

fs
fs
fs

p

fs

k = lt,1,-1
dead(k) = .false.
<<< Loop-information Start >>><<< [PARALLELIZATION]<<<
Standard iteration count: 220<<< [OPTIMIZATION]<<<UNSWITCHING<<<
FULL UNROLLING<<< Loop-information End >>>do ax = 1,3
take_ex(ax,k) = .false.
give_ex(ax,k) = .false.

>
>
p

fs
>
>

p
p
p

fs
fs
fs

mi(ax,k) = 2 +((idi(ax)+1)*ng(ax,k))/pi(ax) ((idi(ax)+0)*ng(ax,k))/pi(ax)mip(ax,k) = 2 +((next(ax)+idi(ax)+1)*ng(ax,k))/pi(ax) ((next(ax)+idi(ax)+0)*ng(ax,k))/pi(ax)if(mip(ax,k).eq.2.or.mi(ax,k).eq.2)thennext(ax) = 2*next(ax)endif
8Copyright 2016 FUJITSU LIMITED

[fipp] 基本プロファイラ

9

Copyright 2016 FUJITSU LIMITED

[fipp] 基本プロファイラの機能概要
 サンプリング方式による性能分析
10ミリ秒〜3,600,000ミリ秒（オプションで指定）
t

処理A

処理B

処理C

 ホットスポット（上位のコスト部分）の確認

 リコンパイルなしでアプリケーション全体のコスト分析が可能
 区間指定方式（要リコンパイル）もサポート ⼿続き、ループ、⾏レベルでコストを表⽰可能 PAカウンタを⽤いた全体の命令実⾏効率とメモリアクセス効率を表⽰可
能10Copyright 2016 FUJITSU LIMITED

[fipp] 基本プロファイラ情報取得の手順

1
ソースコード実⾏ファイル
コンパイル

3

2
fipp

fipppx

基本プロファイリング
データ

基本プロファイラ
情報（テキスト）

GUIプロファイラ

1.
1 ソースコードをコンパイルして実⾏ファイルを作成

基本プロファイラ
情報（GUI）

2.
2 fippコマンドを用いて、基本プロファイリングデータを作成
3.
3 fipppxコマンドまたはGUIプロファイラを用いて、基本プロファイラ情報を表示

11

Copyright 2016 FUJITSU LIMITED

[fipp] 基本プロファイリングデータの採取
 アプリケーションの作成
 リンク時に“-Ntl_notrt”をつけないこと「だけ」$ mpifrtpx test.f -Kfast -o ./a.out

 基本プロファイリングデータの採取 通常の実⾏⼿順に、fippコマンドとfippのオプションを先頭に加えます#PJM ......
fipp -C -Ihwm,call –d data mpiexec -n 16 ./a.out

12

Copyright 2016 FUJITSU LIMITED

[fipp] 基本プロファイリングデータの可視化 テキスト形式での表示$ fipppx -A -Ihwm,call -d data GUIでの表示 ※[fapp] 詳細プロファイラも同じ手順

アイコンをクリック

プロファイラ情報が含まれるディレクトリを選択
13

Copyright 2016 FUJITSU LIMITED

[fipp] サマリビュー

Summary サマリ情報で、ホットスポットを確認

最小値
平均値
最大値

スレッド間

手続き単位

コスト バリアのコスト MPIのコスト

Procedure

ループ単位
Loop

⾏単位
Line

14

Copyright 2016 FUJITSU LIMITED

[fipp] ソースビュー

Source View

 ソース情報で、コスト上位の⾏やブロックを確認●でホットスポットを確認

上位コスト部分は赤字で表示

15

Copyright 2016 FUJITSU LIMITED

[fipp] ハードウェアモニタ情報
 命令効率・メモリアクセス情報のボトルネックを確認
Performance monitor event*************************************************************************************
Application - performance monitors*************************************************************************************
Elapsed(s)MFLOPS MFLOPS/PEAK(%)
MIPSMIPS/PEAK(%)-----------------------------------------------------------------------32.4926
24305.4456
9.494332189.7685
25.1483
Application-----------------------------------------------------------------------32.4926
1520.4417
9.50282010.8128
25.1352
Process
32.49171518.0921
9.48812012.9685
25.1621
Process
32.47821518.7125
9.49202019.5806
25.2448
Process
32.4769
1518.9294
9.49332020.3444
25.2543
Process(略)
Mem throughput
Mem throughput
Elapsed(s)_chip(GB/S)/PEAK(%)
SIMD(%)--------------------------------------------------------32.4926
19.0096
1.856411.0996
Application--------------------------------------------------------32.4926
1.20771.8871
11.1149
Process
4
32.4917
1.1493
1.795811.0850
Process
032.4782
1.1704
1.828811.0529
Process2
32.4769
1.1747
1.835511.0495
Process
7
(略)

16

4
0
2
7

Copyright 2016 FUJITSU LIMITED

[fipp] コールグラフ表示

Thread View

Call Graph コールグラフ（手続きの呼び出し構造）を表示可能

fipppxコマンドでの表示
Process0--------------------+
|
|
|
|
|
|
|
|
|
|
|
#|
|
|
|
#|
|

17

0%
0%
0%
0%
1%
0%
0%
0%
2%
0%
0%
6%
1%
0%
0%
9%
0%

<0> main [0 / 3250]<1> __jwe_xint [0 / 1]
<2> __jwe_ifss [1]<1> MAIN__ [1 / 3249]<2> setup_mpi_ [24]<2> exact_solution_ [4]<2> exact_rhs_ [1]<2> adi_ [1 / 3216]<3> copy_faces_ [78 / 283]
<4> compute_rhs_ [0 / 205]
<5> __jwe_ppfj [0 / 205]
<6> compute_rhs._PRL_1_ [205]<3> x_solve_ [23 / 855]
<4> x_solve_cell_ [13 / 316]
<5> __jwe_ppfj [0 / 302]
<6> x_solve_cell._PRL_1_ [302]<5> x_solve_cell._PRL_1_ [1]Copyright 2016 FUJITSU LIMITED

[fipp] プロセス間ロードバランス

Procedure Stacked Chart 粒度の異なる情報表⽰（プロセス間⽐較）
手続き単位

ループ単位

各プロセスの情報

⾏単位

各プロセスの情報

コスト上位の手続き名

各プロセスの情報

コスト上位のループ
コスト

コスト上位の⾏
コスト

18

コスト

Copyright 2016 FUJITSU LIMITED

[fipp] 基本プロファイラ機能のまとめ リコンパイルなしで実⾏可能なため、⼿軽に情報の採取が可能
 ホットスポットの場所を確認することが目的
 ⼿続き、ループ、⾏情報まで細分化して確認することができる ハードウェアモニタ情報は、実⾏するアプリケーションの命令実⾏効率やメモリアクセス
効率が事前に把握できているときに役に⽴ちます→ 原因調査は、「詳細プロファイラ」以降のフェーズで実施します プロセス間のロードバランスを確認可能

19

Copyright 2016 FUJITSU LIMITED

[fapp] 詳細プロファイラ

20

Copyright 2016 FUJITSU LIMITED

[fapp] 詳細プロファイラの機能概要
 区間挟み込みによる詳細な情報を採取
fapp_start関数
を実⾏

fapp_stop関数
を実⾏
t

処理A

処理B

処理C

 後に説明する「精密PA可視化機能」に対し、1回実⾏かつ表示機能がテキスト形式とGUIに対応していて、手軽に採取可能
 プリセットされたハードウェア情報を表示（5種類）21

Copyright 2016 FUJITSU LIMITED

[fapp] 詳細プロファイラ情報取得の手順
1
2
ソースコード実⾏ファイルcall fapp_startcall fapp_stop

4

3

コンパイル

fapp

fapppx

詳細プロファイリング
データ

詳細プロファイラ
情報（テキスト）

GUIプロファイラ

1.
1 測定したい区間に、fapp_start()とfapp_stop()を追加する

詳細プロファイラ
情報（GUI）

2.
2 コンパイルしてa.outを作成
3.
3 fappコマンドを用いて、詳細プロファイリングデータを作成
4 fapppxコマンドまたはGUIプロファイラを用いて、詳細プロファイラ情報を表示
4.

22

Copyright 2016 FUJITSU LIMITED

[fapp] 詳細プロファイリングデータの採取
 ソースコードの修正 ホットスポットに、区間指定のAPIを挿入します。
...

call fapp_start(“region1”, 1, 0)!omp parallel
do i=1,N...
enddo

call fapp_stop(“region1”, 1, 0)...

 コンパイル 通常の作成方法でアプリケーションを作成します 詳細プロファイリングデータの採取 通常の実⾏⼿順に、fappコマンドとfappのオプションを先頭に加えます#PJM ......
fapp -C -Ihwm,mpi –d data mpiexec -n 16 ./a.out
23

Copyright 2016 FUJITSU LIMITED

[fapp] 詳細プロファイリングデータの可視化 テキスト形式での表示$ fapppx -A –Ihwm,mpi -d data GUIでの表示 ※[fipp] 基本プロファイラも同じ手順

アイコンをクリック

プロファイラ情報が含まれるディレクトリを選択
24

Copyright 2016 FUJITSU LIMITED

[fapp]プリセットされた5種類のCPU情報
測定イベント内容
キャッシュミス率 (Cache)

メモリ・キャッシュについての情報である、ロードストア命令、
キャッシュミスなどの項目から構成されています。

実⾏命令詳細 (Instructions)

各種命令の割合や、実⾏性能についての項目から構成されています。

メモリアクセス状況 (MEM_access)

メモリアクセスについて、命令割合や仕事量についての項目から構成されています。

命令実⾏効率 (Performance)

演算時間や待ち時間の項目から構成されています。

CPU core動作状況 (Statistics)[default]

性能指標として一般的に用いられるMIPS、MFLOPSなどの項目から構成されています。

#PJM ......
fapp -C -Ihwm –Hevent=Performance ...

25

Copyright 2016 FUJITSU LIMITED

[fapp] 基本情報
 基本情報 → すべての詳細プロファイラ情報に含まれます 区間全体の 各区間ごとの プロセスごとの経過時間・ユーザー時間・システム時間を表示*************************************************************************************
Application*************************************************************************************
Kind
Elapsed(s)User(s)System(s)Call---------------------------------------------------------AVG
142.8483
953.2244
177.3281
1.0000
all 0
MAX
142.8946
978.3800
195.7800
1MIN
142.8164934.7700
152.1400
1
Kind
Elapsed(s)User(s)System(s)Call---------------------------------------------------------AVG
0.67095.36560.0025202.0000
MAX
0.70715.62000.0200202
MIN
0.63014.97000.0000202

compute_rhs 1*************************************************************************************
Process 0*************************************************************************************
Elapsed(s)User(s)System(s)Call---------------------------------------------------------142.2071
988.1500
136.810010.66475.50000.0000202
2.943519.8400
0.64005020982.830817.8200
0.58005020982.975246.8000
0.6200502902
6.714555.2700
0.50005020982.783512.1800
0.220050290226

all 0
compute_rhs 1
x_solve_cell_1 1
x_solve_cell_2 1
y_solve_cell_1 1
x_solve_cell_3 1
y_solve_cell_2 1
Copyright 2016 FUJITSU LIMITED

[fapp] MPI情報
 MPI情報（fapp –Impi 指定時）
 MPIの呼び出し回数とメッセージ⻑を表⽰
KindElapsed(s)Wait(s)
Byte
Call (
0-4K
4K-64K
64K-1024K
1024KByte-)---------------------------------------------------------------------------------------------------------------------------------149.3989
0.0981---273872
119312
57888
96672
0
all 0
---------------------------------------------------------------------------------------------------------------------------------AVG
0.00040.00000.00002.00002.00000.00000.00000.0000mpi_comm_dup_
MAX
0.00040.00000.0000
2
2
0
0
0
MIN
0.00040.00000.000022000------------------------------------------------------------------------------------------------------------------------------AVG
0.00000.00000.00001.00001.00000.00000.00000.0000mpi_comm_rank_
MAX
0.00000.00000.0000
1
1
0
0
0
MIN
0.00000.00000.000011
000*************************************************************************************
Process 0*************************************************************************************
Elapsed(s)Wait(s)
Byte
Call (
0-4K
4K-64K
64K-1024K
1024KByte-)----------------------------------------------------------------------------------------------------------------------------------5.2105
0.0040---17117
7457
3618
6042
0
all 0
----------------------------------------------------------------------------------------------------------------------------------0.0004
0.00000.000022000
mpi_comm_dup_
0.00000.00000.000011
000
mpi_comm_rank_
0.00010.00000.000022000
mpi_comm_size_
0.00040.00000.000011
000
mpi_comm_split_
0.00810.0000 109715.9752
4830
0
1809
3021
0
mpi_irecv_
0.02340.0000 109715.9752
4830
0
1809
3021
0
mpi_isend_
0.00360.00000.000011
0
00
mpi_finalize_
0.05290.00000.000011000mpi_init_
0.38850.00000.0000
202
202
0
0
0
mpi_waitall_
4.72100.00000.0000
7236
7236
0
0
0
mpi_wait_
0.00400.003980.000022000
mpi_allreduce_
0.00780.00000.000022000
mpi_barrier_
0.00020.0001
12.0000660
00
mpi_bcast_
0.00000.000016.0000
1
1
0
00
mpi_reduce_

27

Copyright 2016 FUJITSU LIMITED

[fapp] Statistics
 プログラムの実⾏性能に関する情報
Performance monitor : Statistics*************************************************************************************MIPS
MFLOPS
Application
MIPS
MFLOPS ピーク性能比
ピーク性能比*************************************************************************************
Kind
Elapsed(s)MFLOPS MFLOPS/PEAK(%)
MIPSMIPS/PEAK(%)--------------------------------------------------------------------------------AVG
141.2547
345.7805
0.27013227.8120
5.0435
MAX
141.2767
346.4917
0.27073268.7127
5.1074MIN
141.2254
345.4660
0.26993162.4312
4.9413

all 0

Kind
Elapsed(s)MFLOPS MFLOPS/PEAK(%)
MIPSMIPS/PEAK(%)--------------------------------------------------------------------------------AVG
0.67408626.7163
6.73968106.1498
12.6659
MAX
0.71019197.4459
7.18558639.1055
13.4986MIN
0.63318174.3007
6.38627683.0576
12.0048compute_rhs 1

Mem throughput Mem throughput
Kind
Elapsed(s)_chip(GB/S)/PEAK(%)
SIMD(%)-----------------------------------------------------------------AVG
141.2547
0.35470.5543
1.3985
MAX
141.2767
0.36170.5652
1.4289MIN
141.2254
0.3446
0.53851.3812
Mem throughput Mem throughput
Kind
Elapsed(s)_chip(GB/S)/PEAK(%)
SIMD(%)-----------------------------------------------------------------AVG
0.674023.001335.9395
40.5924MAX
0.710124.9770
39.0266
40.6107MIN
0.6331
21.573133.7079
40.5800

all 0

compute_rhs 1

SIMD命令率
メモリアクセス メモリアクセス
スループット スループットピーク性能比28

Copyright 2016 FUJITSU LIMITED

[fapp] Cache キャッシュミスの発生状況
Performance monitor : Cache*************************************************************************************
ロードストア命令率 ロードストア命令率
Application
命令数(SIMD命令率) (NOSIMD命令率) プリフェッチ命令数*************************************************************************************
Kind
Elapsed(s)Inst LS_SIMD-or(%)
LS-or(%)
Prefetch-----------------------------------------------------------------------------AVG
141.4890 455968751567
0.105832.41191416582365
MAX
141.4967 464207933873
0.108432.7032
1417979740
MIN
141.4826 445494049329
0.104032.13741416079807

all 0

Kind
Elapsed(s)Inst LS_SIMD-or(%)
LS-or(%)
Prefetch-----------------------------------------------------------------------------AVG
0.67425458549621
8.368142.5538112145322
MAX
0.71095469280569
8.371342.5600
112480901
MIN
0.63325454171652
8.365042.5494
111994364

compute_rhs 1

Kind
Elapsed(s) L1-op miss(%) L2 miss(%) L2 dm miss(%) L2 pf miss(%)
mTLB-op(%)---------------------------------------------------------------------------------------------AVG
141.4890
4.22800.177325.3046
74.69540.0141
MAX
141.4967
4.41030.182925.8165
75.75480.0543MIN
141.4826
4.06920.173224.2452
74.18350.0001

all 0

Kind
Elapsed(s) L1-op miss(%) L2 miss(%) L2 dm miss(%) L2 pf miss(%)
mTLB-op(%)---------------------------------------------------------------------------------------------AVG
0.6742
4.62742.70155.094094.9060
0.0001MAX
0.71094.63492.74905.255995.08070.0002MIN
0.63324.61902.66914.919394.74410.0000compute_rhs 1

L1データキャッシュ
ミス率

L2ミス率 デマンドミス率 プリフェッチミス率 データメイン
TLBミス率29

Copyright 2016 FUJITSU LIMITED

[fapp] Instructions
 浮動⼩数点データを処理する命令の実⾏状況
Performance monitor : Instructions*************************************************************************************MFLOPS
Application
MFLOPS ピーク性能比
命令数*************************************************************************************
Kind
Elapsed(s)Inst
MFLOPS MFLOPS/PEAK(%)----------------------------------------------------------------AVG
140.5660 435111508658
347.4747
0.2715MAX
140.5796 440149480813
348.2358
0.2721
MIN
140.5567 425307079021
347.1550
0.2712

all 0

Kind
Elapsed(s)Inst
MFLOPS MFLOPS/PEAK(%)----------------------------------------------------------------AVG
0.67425458016639
8624.0414
6.7375
MAX
0.71155468893895
9198.2596
7.1861MIN
0.63305453638366
8157.8835
6.3733compute_rhs 1

SIMD命令率

Kind
Elapsed(s) LS_SIMD-or(%) Float_SIMD-or(%) Fma_SIMD-or(%)
SIMD(%)----------------------------------------------------------------------------------AVG
140.5660
0.11090.78710.56751.4655MAX
140.5796
0.11330.80420.57981.4973MIN
140.5567
0.10970.77790.56091.4484

all 0

Kind
Elapsed(s) LS_SIMD-or(%) Float_SIMD-or(%) Fma_SIMD-or(%)
SIMD(%)----------------------------------------------------------------------------------AVG
0.67428.368914.280917.9469
40.5968
MAX
0.71158.371914.2882
17.9534
40.6136MIN
0.63308.365714.2761
17.941340.5831

compute_rhs 1

ロードストア命令率 浮動小数点演算
浮動小数点積和演算(SIMD命令率) 命令率(SIMD命令率) 命令率(SIMD命令率)30

Copyright 2016 FUJITSU LIMITED

[fapp] MEM_access データ転送効率およびメモリにアクセスしている命令の実⾏状況
Performance monitor : MEM_access*************************************************************************************
ロードストア命令率
メモリアクセス
Application(NOSIMD命令率) L2ミス率 スループット(コア単位)*************************************************************************************
Mem throughput
Kind
Elapsed(s)Prefetch LS_SIMD-or(%)
LS-or(%)
L2 miss(%) _core(GB/S)------------------------------------------------------------------------------------------AVG
139.24501416595400
0.106332.4650
0.17770.3594MAX
139.2621
1417985392
0.106832.54410.18110.3663MIN
139.2371
1416083038
0.105232.27620.17140.3493
Mem throughput
Kind
Elapsed(s)Prefetch LS_SIMD-or(%)
LS-or(%)
L2 miss(%) _core(GB/S)------------------------------------------------------------------------------------------AVG
0.6742112145785
8.367742.55302.700923.0088
MAX
0.7111112479982
8.371442.56012.746124.9705MIN
0.6330111994422
8.361142.53832.668221.5358

all 0

compute_rhs 1

プリフェッチ命令数 ロードストア命令率(SIMD命令率)

31

Copyright 2016 FUJITSU LIMITED

[fapp] Performance 命令と実⾏待ちしている時間の割合
Performance monitor : Performance*************************************************************************************
演算待ち キャッシュアクセス
2-4命令 1命令
Application
コミット時間 コミット時間 時間
待ち時間*************************************************************************************
Kind
Elapsed(s) 2-4icmit(S)1i_cmit(S)op_wait(S) cache_wait(S)-----------------------------------------------------------------------------AVG
141.8249
66.3784
59.9958
3.5189162.4642
MAX
141.8475
66.9971
60.4285
3.5302
169.2363
MIN
141.8062
64.512058.63223.4986155.8855

all 0

Kind
Elapsed(s) 2-4icmit(S)1i_cmit(S)op_wait(S) cache_wait(S)-----------------------------------------------------------------------------AVG
0.67400.76350.26350.13610.9046
MAX
0.71290.76530.26450.13660.9085MIN
0.63290.76270.26300.13560.9001compute_rhs 1

Kind
Elapsed(s) Mem_wait(S) fetch_wait(S) other_wait(S)------------------------------------------------------------------AVG
141.8249
7.0782768.681850.1882
MAX
141.8475
7.2253777.251250.8218MIN
141.8062
6.8757761.2832
49.3773

all 0

Kind
Elapsed(s) Mem_wait(S) fetch_wait(S) other_wait(S)------------------------------------------------------------------AVG
0.67400.37272.94850.0162
MAX
0.71290.37853.25100.0167MIN
0.63290.36592.61850.0157compute_rhs 1

メモリアクセス 命令フェッチ その他の待ち時間
待ち時間
待ち
32

Copyright 2016 FUJITSU LIMITED

[fapp] 詳細プロファイラ機能のまとめ
 区間を指定することで、ホットスポットの詳細な情報を表示します。
 プリセットされた5種類のCPU情報により、一回の実⾏で⼿軽に性能情報を取得できます。

33

Copyright 2016 FUJITSU LIMITED[精密] 精密PA可視化機能

34

Copyright 2016 FUJITSU LIMITED[精密] 精密PA可視化機能の概要
 区間挟み込みによる詳細な情報を採取
start_collection関数
を実⾏

stop_collection関数
を実⾏
t

処理A

処理B

処理C

 7連続実⾏（「京」は7回、各システムにごとに回数が異なる）により、⼤量のCPU PAカウンタ情報を加工して可視化
 Microsoft Excelで可視化し、結果をA3用紙2枚に印刷可能

35

Copyright 2016 FUJITSU LIMITED[精密] 精密PA可視化機能の可視化手順
1
3

2
ソースコード実⾏ファイルcall start_collection
call stop_collection

4

コンパイル

fapp
7回実⾏

詳細プロファイラ情報(CSV)

fapppx

詳細プロファイリング
データ

5

excelで読み込み

1.
1 測定したい区間に、start_collection()とstop_collection()を追加する
2.
2 コンパイルしてa.outを作成
3.
3 fappコマンドを用いて、7回分の詳細プロファイリングデータを作成
4 fapppxコマンドを用いて、CSVファイルに変換
4.
5 Excelで可視化
5.
36

Copyright 2016 FUJITSU LIMITED[精密] 精密PA可視化機能データの採取 詳細プロファイリングデータの採取#PJM .....
fapp -C -d pa1 -Hpa=1 mpiexec -n 8 ./a.out
fapp -C -d pa2 -Hpa=2 mpiexec -n 8 ./a.out
fapp -C -d pa3 -Hpa=3 mpiexec -n 8 ./a.out
fapp -C -d pa4 -Hpa=4 mpiexec -n 8 ./a.out
fapp -C -d pa5 -Hpa=5 mpiexec -n 8 ./a.out
fapp -C -d pa6 -Hpa=6 mpiexec -n 8 ./a.out
fapp -C -d pa7 -Hpa=7 mpiexec -n 8 ./a.out

測定ノードが変わらない
ように、連続実⾏を推奨

 詳細プロファイリングデータのCSV化$ fapppx -A -d pa1 -o output_prof_1.csv -tcsv -Hpa
$ fapppx -A -d pa2 -o output_prof_2.csv -tcsv -Hpa
$ fapppx -A -d pa3 -o output_prof_3.csv -tcsv -Hpa
$ fapppx -A -d pa4 -o output_prof_4.csv -tcsv -Hpa
$ fapppx -A -d pa5 -o output_prof_5.csv -tcsv -Hpa
$ fapppx -A -d pa6 -o output_prof_6.csv -tcsv -Hpa
$ fapppx -A -d pa7 -o output_prof_7.csv -tcsv -Hpa
37

Copyright 2016 FUJITSU LIMITED[精密] Excelシートの印刷イメージ（一枚目）
 加工したCPU PA情報を中心に表示

38

Copyright 2016 FUJITSU LIMITED[精密] Excelシートの印刷イメージ（二枚目） 時間情報を表示

39

Copyright 2016 FUJITSU LIMITED[精密] 性能情報
 実⾏時間と効率を表⽰します。
Performance

Thread 0
Thread 1
Thread 2
Thread 3
Thread 4
Thread 5
Thread 6
Thread 7
Process

実行時間 (sec)浮動小数点演算
ピーク比

8.42
8.35
8.33
8.30
8.36
8.32
8.35
8.35
8.42

6.84%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.85%

MFLOPS

1094
0
0
0
0
0
0
0
1094

40

浮動小数点
演算数

MIPS

1762
244
245
246
245
246
246
246
3463

9.22E+09
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
9.22E+09

Copyright 2016 FUJITSU LIMITED[精密] メモリ・キャッシュ情報
 メモリの利⽤効率を表⽰します。
・ CacheMemory・
メモリスループット(GB/sec)

L2エンジン
スループット(GB/sec)

0.24
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.24

L2 スループット(GB/sec)

1.95
0.18
0.22
0.16
0.27
0.25
0.23
0.23
3.46

メモリビジー率

1.73
0.18
0.22
0.16
0.27
0.25
0.23
0.23
3.25

L2エンジンビジー率 L1エンジンビジー率

1%

46%
4%
4%
4%
4%
4%
4%
4%
46%

2%

メモリ・キャッシュエンジン ビジー率
メモリビジー率

0%

10%

20%

L2エンジンビジー率

30%

40%

50%

L1エンジンビジー率

60%

70%

80%

90%

100%

Process

41

Copyright 2016 FUJITSU LIMITED[精密] キャッシュ情報
 キャッシュの利⽤効率を⽰します。
Cache
L1D ミス率L1I ミス率(/有効総命令数) (/ロード・ストア数)
Thread 0
Thread 1
Thread 2
Thread 3
Thread 4
Thread 5
Thread 6
Thread 7
Process

0.70%
1.08%
1.08%
1.08%
1.08%
1.07%
1.07%
1.08%
0.88%

L1D ミス swpf 率
L2 ミス率(/L1D ミス数)(/ロード・ストア数)
0.64%
4.59%
3.68%
0.02%
2.86%
2.97%
0.00%
0.00%
1.28%

0.14%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.09%

L1D ミス dm率(/L1D ミス数)

L1D ミス数

ロード・ストア数

1.71%
2.10%
2.47%
1.77%
3.10%
2.77%
2.57%
2.57%
2.00%

6.67E+09
5.71E+08
5.72E+08
5.73E+08
5.74E+08
5.75E+08
5.76E+08
5.77E+08
1.07E+10

1.14E+08
1.20E+07
1.42E+07
1.02E+07
1.78E+07
1.59E+07
1.48E+07
1.48E+07
2.14E+08

L2 ミス数L2 ミス dm 率(/L2 ミス数)

L2 ミス pf 率(/L2 ミス数)

9.45E+06
1.32E+04
1.34E+04
1.24E+04
8.81E+03
1.20E+04
1.04E+04
8.65E+03
9.53E+06

1.46%
49.03%
66.39%
62.42%
55.88%
58.25%
41.47%
62.47%
1.92%

42

98.54%
50.97%
33.61%
37.58%
44.12%
41.75%
58.53%
37.53%
98.08%

L1D ミス hwpf 率(/L1D ミス数)

52.36%
94.96%
95.69%
99.93%
92.90%
95.39%
97.43%
99.84%
72.97%

47.00%
0.46%
0.63%
0.05%
4.24%
1.64%
2.57%
0.16%
25.75%μDTLB ミス率
mDTLB ミス率(/ロード・ストア数) (/ロード・ストア数)
0.57658%
4.31364%4.21790%
4.29846%4.29373%
4.28399%
4.27602%4.26843%1.96815%0.00001%
0.00003%0.00000%
0.00002%0.00033%
0.00000%
0.00000%
0.00001%
0.00003%

Copyright 2016 FUJITSU LIMITED[精密] キャッシュ情報 (グラフ) キャッシュの利⽤効率をグラフで表⽰します。
キャッシュミス率（/ロード・ストア数）
キャッシュミス率（ ロード・ストア数）
L1D ミス率…
0%

1%

L2 ミス率…
2%

3%

4%

5%

6%

7%

8%

9%

10%

Process

L1Dキャッシュミス内訳（
キャッシュミス内訳（/L1Dキャッシュミス数）
キャッシュミス数）
キャッシュミス内訳（
L1D ミス dm率…
0%

10%

20%

L1D ミス hwpf 率…
30%

L1D ミス swpf 率…

40%

50%

60%

70%

80%

90%

100%

50%

60%

70%

80%

90%

100%

Process

L２キャッシュミス内訳（
２キャッシュミス内訳（/Ｌ２キャッシュミス数）
２キャッシュミス内訳（ Ｌ２キャッシュミス数）
L2 ミス dm 率…
0%

10%

20%

L2 ミス pf 率…
30%

40%

Process

43

Copyright 2016 FUJITSU LIMITED[精密] SIMD情報 SIMD命令率を表⽰します。
SIMD

Thread 0
Thread 1
Thread 2
Thread 3
Thread 4
Thread 5
Thread 6
Thread 7
Process

SIMD命令率(/有効総命令数)

SIMD命令率(/SIMD対象命令数）

50.77%
61.91%
63.23%
63.23%
63.23%
63.23%
63.23%
63.23%
61.19%

97.43%
97.43%
99.29%
99.29%
99.29%
99.29%
99.29%
99.29%
98.82%

SIMD演算命令率 SIMDロード命令率 SIMDストア命令率(/SIMD対象演算命 (/SIMD対象ロード (/SIMD対象ストア命
令数)
命令数)
令数)
97.56%
97.56%
99.17%
99.17%
99.17%
99.17%
99.17%
99.17%
98.76%

97.23%
97.23%
99.23%
99.23%
99.23%
99.23%
99.23%
99.23%
98.72%

97.78%
97.78%
100.00%100.00%100.00%100.00%100.00%100.00%99.44%SIMD命令率
命令率

SIMD命令率(/有効総命令数)0%

10%

SIMD命令率(/SIMD対象命令数）

20%

30%

SIMD演算命令率(/SIMD対象演算命令数)

40%

50%

SIMDロード命令率(/SIMD対象ロード命令数)

60%

70%

SIMDストア命令率(/SIMD対象ストア命令数)

80%

90%

100%

Process

44

Copyright 2016 FUJITSU LIMITED[精密] CPU時間情報
 CPUの動作状況を表示します。
CPU time
4命令コミット率

Thread 0
Thread 1
Thread 2
Thread 3
Thread 4
Thread 5
Thread 6
Thread 7

2/3命令コミット率

整数レジスタ書き込
み制約率

15%
2%
2%
2%
2%
2%
2%
2%

2%
1%
1%
1%
1%
1%
1%
1%

7%
1%
0%
0%
0%
0%
0%
0%
命令フェッチ待ち率

13%
8%
8%
8%
8%
8%
8%
8%

演算待ち率

13%
1%
1%
1%
1%
1%
1%
1%

1命令コミット率

バリア同期待ち率

18%
4%
4%
4%
4%
4%
4%
4%

1%
73%
74%
74%
72%
72%
73%
72%

浮動小数点アクセス
整数アクセス待ち率
待ち率

その他の待ち率

15%
1%
1%
1%
1%
1%
1%
1%

45

11%
7%
7%
7%
8%
8%
8%
9%

4%
2%
2%
3%
3%
3%
3%
3%

Copyright 2016 FUJITSU LIMITED[精密] CPU時間情報 [グラフ] CPUの動作状況をグラフで表示します。
実行時間内訳 (概略
概略)
概略

0%

4命令コミット率

2/3命令コミット率

整数レジスタ書き込み制約率

1命令コミット率

バリア同期待ち率

命令フェッチ待ち率

演算待ち率

浮動小数点アクセス待ち率

整数アクセス待ち率

その他の待ち率

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

Thread 0

4命令コミット率

2/3命令コミット率

整数レジスタ書き込み制約率

1命令コミット率

バリア同期待ち率

浮動⼩数点アクセス待ち率

演算待ち率

整数アクセス待ち率

その他の待ち率46

Copyright 2016 FUJITSU LIMITED[精密] 命令情報（割合） 命令を種別ごとに分類した割合を表⽰します。
Instruction
ロード・ストア命令率
36.65%

Process
浮動小数点
ロード命令率SIMD浮動小数点
ロード命令率Thread 0
Thread 1
Thread 2
Thread 3
Thread 4
Thread 5
Thread 6
Thread 7
Process

0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%

浮動小数点
ストア命令率SIMD浮動小数点
ストア命令率20.10%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
10.23%

0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%

浮動小数点演算命令率

0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%

浮動小数点
演算命令率

3.36%
16.68%
16.71%
16.74%
16.77%
16.80%
16.83%
16.86%
9.95%

1.86%
11.31%
11.29%
11.28%
11.27%
11.25%
11.24%
11.23%
6.48%

プリフェッチ命令率

分岐命令率

その他 命令率0.23%

14.98%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
7.62%

SIMD浮動小数点
積和演算命令率
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%

整数
ストア命令率19.63%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
9.99%

19.61%SIMD浮動小数点
演算命令率

整数
ロード命令率

浮動小数点
積和演算命令率

プリフェッチ命令率

23.57%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
0.00%
11.99%

0.06%
0.42%
0.42%
0.42%
0.42%
0.42%
0.42%
0.42%
0.23%
47

9.79%
分岐命令率
3.89%
15.80%
15.83%
15.86%
15.89%
15.92%
15.95%
15.98%
9.79%

33.72%
その他 命令率12.54%
55.79%
55.75%
55.70%
55.66%
55.61%
55.57%
55.52%
33.72%

有効総命令率
100.00%
有効総命令率
100.00%100.00%100.00%100.00%100.00%100.00%100.00%100.00%100.00%

Copyright 2016 FUJITSU LIMITED[精密] 命令情報（割合のグラフ）
 命令を種別ごとに分類した割合をグラフで表⽰します。
命令内訳 (/有効総命令数
有効総命令数)
有効総命令数0%SIMD浮動小数点
ロード命令率

浮動小数点
ロード命令率SIMD浮動小数点
ストア命令率

浮動小数点
ストア命令率整数
ロード命令率整数
ストア命令率SIMD浮動小数点
演算命令率

浮動小数点
演算命令率

SIMD浮動小数点
積和演算命令率

浮動小数点
積和演算命令率

プリフェッチ命令率

分岐命令率

その他 命令率

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

Process

SIMD浮動小数点
ロード命令率
浮動小数点
ストア命令率SIMD浮動小数点
演算命令率
浮動小数点
積和演算命令率

浮動小数点
ロード命令率SIMD浮動⼩数点ストア命令率

整数ロード命令率

整数ストア命令率

浮動小数点
演算命令率

SIMD浮動小数点
積和演算命令率

プリフェッチ命令率

分岐命令率

48

その他命令率Copyright 2016 FUJITSU LIMITED[精密] 命令情報（実⾏数） 命令を種別ごとに分類した実⾏数を表⽰します。
ロード・ストア命令数
1.07E+10

Process
浮動小数点
ロード命令数SIMD浮動小数点
ロード命令数
Thread 0
Thread 1
Thread 2
Thread 3
Thread 4
Thread 5
Thread 6
Thread 7
Process

0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00

SIMD浮動小数点
ストア命令数

2.98E+09
4.76E+02
5.10E+02
5.78E+02
1.36E+02
2.04E+02
2.72E+02
3.06E+02
2.98E+09

浮動小数点
ストア命令数

0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00

2.91E+09
4.34E+02
4.65E+02
5.27E+02
1.26E+02
1.86E+02
2.50E+02
2.79E+02
2.91E+09

浮動小数点演算命令数

プリフェッチ命令数

5.72E+09
SIMD浮動小数点
演算命令数
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00

浮動小数点
演算命令数
2.22E+09
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
2.22E+09

整数
ロード命令数

6.83E+07

SIMD浮動小数点
積和演算命令数0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00

浮動小数点
積和演算命令数

プリフェッチ命令数

3.50E+09
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
0.00E+00
3.50E+09

8.54E+06
8.54E+06
8.54E+06
8.54E+06
8.54E+06
8.54E+06
8.54E+06
8.54E+06
6.83E+07

49

整数
ストア命令数

4.99E+08
3.40E+08
3.41E+08
3.42E+08
3.43E+08
3.44E+08
3.45E+08
3.46E+08
2.90E+09

2.76E+08
2.31E+08
2.31E+08
2.31E+08
2.31E+08
2.31E+08
2.31E+08
2.31E+08
1.89E+09

分岐命令数

その他 命令数2.85E+09
分岐命令数
5.78E+08
3.22E+08
3.23E+08
3.24E+08
3.25E+08
3.26E+08
3.27E+08
3.28E+08
2.85E+09

9.84E+09
その他 命令数
1.86E+09
1.14E+09
1.14E+09
1.14E+09
1.14E+09
1.14E+09
1.14E+09
1.14E+09
9.84E+09

有効総命令数
2.92E+10
有効総命令数
1.48E+10
2.04E+09
2.04E+09
2.04E+09
2.05E+09
2.05E+09
2.05E+09
2.05E+09
2.92E+10

Copyright 2016 FUJITSU LIMITED[精密] バランス情報
 スレッド間のロードバランスを表示します。
Balance

ロードバランス
Thread 0
Thread 1
Thread 2
Thread 3
Thread 4
Thread 5
Thread 6
Thread 7

命令バランス

99%
27%
26%
26%
28%
27%
27%
28%

100%
14%
14%
14%
14%
14%
14%
14%

ロードバランス

0%

命令バランス

20%

40%

60%

80%

100%

0%

Thread 0

Thread 0

Thread 1

Thread 1

Thread 2

Thread 2

Thread 3

Thread 3

Thread 4

Thread 4

Thread 5

Thread 5

Thread 6

Thread 6

Thread 7

Thread 7

50

20%

40%

60%

80%

100%

Copyright 2016 FUJITSU LIMITED[精密] 実⾏時間内訳
 実⾏時間内訳の積上げグラフを表⽰します。
[秒]
6.0E+01

整数ロードメモリアクセス待ち
浮動小数点演算待ち
1命令コミット

浮動小数点ロードメモリアクセス待ち
分岐命令待ち整数レジスタ書き込み制約

ストア待ち
命令フェッチ待ち
2/3命令コミット

Thread 2

Thread 3

整数ロードキャッシュアクセス待ちバリア同期待ち
4命令コミット

浮動小数点ロードキャッシュアクセス待ち 整数演算待ち
uOPコミット
その他の待ち5.0E+01

4.0E+01

3.0E+01

2.0E+01

1.0E+01

0.0E+00
Thread 0

Thread 1

Thread 4

Thread 5

Thread 6

Thread 7

整数ロード
メモリアクセス待ち
浮動小数点ロードキャッシュアクセス待ち

浮動小数点
ロードメモリアクセス待ち

ストア待ち

整数ロード
キャッシュアクセス待ち

整数演算待ち

浮動小数点
演算待ち

分岐命令待ち命令フェッチ待ちバリア同期待ちuOPコミット

その他の待ち1命令コミット

整数レジスタ
書き込み制約2/3命令コミット

4命令コミット

51

Copyright 2016 FUJITSU LIMITED[精密] 精密PA可視化機能のまとめ
 CPU PA情報からアプリケーションのチューニング情報を可視化します。
 複数回の実⾏（「京」では7回）により、多くの情報を⼀度に可視化することができます。

52

Copyright 2016 FUJITSU LIMITEDチューニング事例のご紹介

53

Copyright 2016 FUJITSU LIMITEDチューニング作業の流れ チューニング作業とプロファイラの活用 アプリケーションをチューニングするには、チューニング情報の収集、アプリケーションの改善方法検討、アプリケーションの修正と性能測定などの一連の作業を実施します。
 一般に、アプリケーションの中で、多くの実⾏時間が費やされている箇所を⾒つけ出して、その部分を⾼速化すると、大きなチューニング効果を得ることができます。プロファイラ
を使⽤すると、実⾏時間の分布などのチューニング情報を得ることができます。チューニング作業の始めには、まずプロファイラを使ってアプリケーションの分析をしてみることをお勧めします。

チューニング開始
チューニング
情報収集
着眼点選定
改善方法検討
ソースコード変更
オプションの選択
性能測定
No

性能に満足
Yes

チューニング完了
54

Copyright 2016 FUJITSU LIMITED想定するチューニング情報採取手順
 [fipp] 基本プロファイラによる情報採取
 プロセス間・スレッド間のロードインバランスの確認
 高コスト箇所の抽出 性能傾向の把握 [fapp] 詳細プロファイラによる情報採取
 高コスト箇所を、fapp_start, fapp_stopで挟み込み ハードウェアモニタ情報による全体性能値の収集(FLOPS値、論理演算ピーク⽐、浮動小数点演算比)
 MPI情報の収集

 [精密] 精密PA可視化機能による情報採取
 高コスト箇所を、start_collection, stop_collectionで挟み込み 高コスト部の精密PAを収集

55

Copyright 2016 FUJITSU LIMITEDアプリの概要・測定環境
 NAS Parallel Benchmarks (NPB) MG 簡略化されたマルチグリッド⽅を⽤いた3次元ポアソン方程式の解法

 測定規模 NPB3.3.1-MPI MG class D 16node / 16process 8thread 測定環境 MP10 2.0GHz 16node

 翻訳オプション frtpx –Kfast,parallel

56

Copyright 2016 FUJITSU LIMITED

[fipp] ⾼コスト箇所の抽出 コスト上位の関数を抽出 resid, psinv, rprj3, interpの⾃動並列区間(注)がチューニング対象候補•MPIは使われていない•スレッド間のバリアコストが大きい(注) PRL: ⾃動並列
OMP: OpenMPのパラレルリージョン

Procedures profile (Total thread cost basis)*************************************************************************************
Application - procedures
Application and Process outputs the total value of the cost of each thread.
Procedure outputs the total value of the procedure cost of each thread.
*************************************************************************************

上位4関数で全体の93%

バリアコストが大きい

MPIは使われていない

Cost%
Barrier
%
MPI
%
Start
End
-----------------------------------------------------------------------------------------------1073579
100.0000
134916
12.5669
2366
0.2204-------------------------------------------------------------------------------------------------531578
49.514657959
10.903200.0000766
783
30307728.230532330
10.667300.0000
684
701
91991
8.56867490
8.142100.0000
871
892
76275
7.10477039
9.228400.0000
959
970
19480
1.814500.000000.0000
1282
1284
16307
1.518915317
93.929000.0000731
808
8060
0.75087528
93.3995
00.0000649
726
4332
0.403500.00001694
39.1043
1304
1434
3666
0.34153547
96.754000.0000
922
1086
3351
0.3121998
29.782200.0000
1471
1474
(省略)
57

Application
resid._PRL_1_
psinv._PRL_1_
rprj3._PRL_1_
interp._PRL_1_
ready._PRL_1_
resid_
psinv_
give3_
interp_take3._PRL_1_

Copyright 2016 FUJITSU LIMITED

[fipp] プロセス間ロードバランスの確認
⼿続き単位で⾒たときに、プロセス間に大きなロードインバランスは確認できない58

Copyright 2016 FUJITSU LIMITED

[fipp] スレッド間ロードバランスの確認
スレッド間のロードバランスは正常なレベル
Procedures profile (Total thread cost basis)
(略)
__
__
__ Parallel balance of cost __resid._PRL_1_
766 783+-------------------------+-------------------------+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+-------------------------+-------------------------+

+
+
+
+
+
+
+
+
+

0 %
0 %
0 %
1 %
0 %
0 %
0 %
0 %
0 %
0 %
0 %
1 %
0 %
0 %
0 %
0 %

33359
33289
33196
32985
33185
33253
33096
33256
33216
33154
33250
33392
33091
33226
33299
33331

Process
Process
Process
Process
Process
Process
Process
Process
Process
Process
Process
Process
Process
Process
Process
Process

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Procedures profile - parallel balance
59

Copyright 2016 FUJITSU LIMITED

[fipp] 性能傾向の把握
 問題点の可能性を把握 浮動⼩数点演算効率
 メモリアクセススループットに着目
浮動⼩数点演算効率が低い?

Performance monitor event*************************************************************************************
Application - performance monitors*************************************************************************************
Elapsed(s)MFLOPS MFLOPS/PEAK(%)
MIPSMIPS/PEAK(%)-----------------------------------------------------------------------101.4475
32391.6990
1.581655473.5383
5.4173-----------------------------------------------------------------------101.4475
2024.4812
1.5816
3470.7959
5.4231101.4448
2024.5354
1.58173471.0204
5.4235101.4443
2024.5450
1.58173467.4565
5.4179101.4437
2024.5570
1.58173471.7601
5.4246(略)

メモリスループットが低い?

Mem throughput
Mem throughput
Elapsed(s)_chip(GB/S)/PEAK(%)
SIMD(%)--------------------------------------------------------101.4475
116.8567
11.411851.3656--------------------------------------------------------101.4475
7.3246
11.4447
51.3300
101.4448
7.324311.444251.3280
101.4443
7.282911.379651.3427101.4437
7.3265
11.447751.3177(略)60

Application
Process
Process
Process
Process

13
15
10
6

SIMD化率は50%を超えているので今回は問題としない

Application
Process
Process
Process
Process

13
15
10
6

Copyright 2016 FUJITSU LIMITED

[fapp] 詳細プロファイラの実⾏準備
 resid内の高コスト箇所を、fapp_start, fapp_stop で挟み込み（今回の例では、最もコストの⾼いresidの並列区間をチューニング対象とします）(略)

call fapp_start(“resid_1“,1,0)
if (timeron) call timer_start(t_resid)
do i3=2,n3-1
do i2=2,n2-1
do i1=1,n1
u1(i1) = u(i1,i2-1,i3) + u(i1,i2+1,i3)>+ u(i1,i2,i3-1) + u(i1,i2,i3+1)
u2(i1) = u(i1,i2-1,i3-1) + u(i1,i2+1,i3-1)>+ u(i1,i2-1,i3+1) + u(i1,i2+1,i3+1)
enddo
do i1=2,n1-1r(i1,i2,i3) = v(i1,i2,i3)>- a(0) * u(i1,i2,i3)c--------------------------------------------------------------------c Assume a(1) = 0(Enable 2 lines below if a(1) not= 0)c--------------------------------------------------------------------c>- a(1) * ( u(i1-1,i2,i3) + u(i1+1,i2,i3)c>+ u1(i1) )c-------------------------------------------------------------------->- a(2) * ( u2(i1) + u1(i1-1) + u1(i1+1) )>- a(3) * ( u2(i1-1) + u2(i1+1) )
enddo
enddo
enddo
if (timeron) call timer_stop(t_resid)

call fapp_stop(“resid_1“,1,0)(略)
61

Copyright 2016 FUJITSU LIMITED

[fapp] 詳細プロファイラの結果
 -Ihwm -Hevent=performanceの結果___________________________________________________________________________________
Performance monitor : Performance*************************************************************************************
Application*************************************************************************************
Kind
Elapsed(s) 2-4icmit(S)1i_cmit(S)op_wait(S) cache_wait(S)-----------------------------------------------------------------------------AVG
49.0151
23.9343
12.7875
8.3028200.0541
resid_1 1MAX
49.1085
23.9384
12.7957
8.3036200.3488
MIN
48.8662
23.921912.76128.2998199.4185
Kind
Elapsed(s) Mem_wait(S) fetch_wait(S) other_wait(S)------------------------------------------------------------------AVG
49.0151
53.6186
83.2557
10.1831MAX
49.108553.7299
83.799410.2028MIN
48.866253.4675
82.6700
10.1475

resid_1 1

Application (Performance data)

待ち時間が多い
チューニング前
default
mem_wait(s)cache_wait(s)op_wait(s)fetch_wait(s)62other_wait(s)1i_cmit(s)2-4icmit(s)Copyright 2016 FUJITSU LIMITED[精密] 精密PA可視化機能の実⾏準備
 resid内の高コスト箇所を、start_collection, stop_collection で挟
み込み(略)

call start_collection (“resid_1",1,0)
if (timeron) call timer_start(t_resid)
do i3=2,n3-1
do i2=2,n2-1
do i1=1,n1
u1(i1) = u(i1,i2-1,i3) + u(i1,i2+1,i3)>+ u(i1,i2,i3-1) + u(i1,i2,i3+1)
u2(i1) = u(i1,i2-1,i3-1) + u(i1,i2+1,i3-1)>+ u(i1,i2-1,i3+1) + u(i1,i2+1,i3+1)
enddo
do i1=2,n1-1r(i1,i2,i3) = v(i1,i2,i3)>- a(0) * u(i1,i2,i3)c--------------------------------------------------------------------c Assume a(1) = 0(Enable 2 lines below if a(1) not= 0)c--------------------------------------------------------------------c>- a(1) * ( u(i1-1,i2,i3) + u(i1+1,i2,i3)c>+ u1(i1) )c-------------------------------------------------------------------->- a(2) * ( u2(i1) + u1(i1-1) + u1(i1+1) )>- a(3) * ( u2(i1-1) + u2(i1+1) )
enddo
enddo
enddo
if (timeron) call timer_stop(t_resid)

call stop_collection("resid_1",1,0)(略)
63

Copyright 2016 FUJITSU LIMITED[精密] 精密PA可視化機能情報の採取
 最も高コストであるresidのループの精密PA情報を採取
 L1Dミス率11%からキャッシュスラッシング発生の可能性•L1Dミスdm率90.91%、L2Dミスdm率55.29%から、キャッシュ・メモリアクセスに改善余地
L1Dミス率9.99 %

L1ミスdm率90.91 %

L2ミスdm率55.29 %

バリア同期待ちキャッシュ・メモリアクセス待ち系

64

Copyright 2016 FUJITSU LIMITEDresidのチューニング
 高コスト1位のresidの分析
 Barrierコストが高い（fipp結果より）
 スレッド間ロードバランスは正常範囲（fipp parallel balanceより）
 メモリアクセスに改善の余地（精密PA結果より）→ ソースをチェック
 最内DOループで並列化（コンパイラのリスティング情報）!$omp parallel do private(u1,u2)
764
765

1
2

8

OMP指示文を用いて最外ループで並列化
766
767
768
769
770
771

3
3
3
3
3
3

pp
p

4v
4v

p

4v

p

4v

783
784
785

3
2
1

p

6v
8

do i3=2,n3-1
do i2=2,n2-1<<< Loop-information Start >>>最内ループの最適化情報<<< [PARALLELIZATION]<<<
Standard iteration count: 373<<< [OPTIMIZATION]
<<<
SIMD
<<<
SOFTWARE PIPELINING<<< Loop-information End >>>do i1=1,n1
u1(i1) = u(i1,i2-1,i3) + u(i1,i2+1,i3)>+ u(i1,i2,i3-1) + u(i1,i2,i3+1)
u2(i1) = u(i1,i2-1,i3-1) + u(i1,i2+1,i3-1)>+ u(i1,i2-1,i3+1) + u(i1,i2+1,i3+1)
enddo

（略）
enddo
enddo
enddo
65

Copyright 2016 FUJITSU LIMITED

[fipp] チューニング効果の確認
 基本プロファイラのProcedure情報で確認
Cost

チューニング前

531578Barrier
10.9032 %resid._PRL_1

Cost%
Barrier
%
MPI
%
Start
End
-----------------------------------------------------------------------------------------------1073579
100.0000
134916
12.5669
2366
0.2204-------------------------------------------------------------------------------------------------531578
49.514657959
10.903200.0000766
783
30307728.230532330
10.667300.0000
684
701
91991
8.56867490
8.142100.0000
871
892
76275
7.10477039
9.228400.0000959
970

Application
resid._PRL_1_
psinv._PRL_1_
rprj3._PRL_1_
interp._PRL_1_

Barrierコストが減少

チューニング後Cost%
Barrier
%
MPI
%
Start
End
-----------------------------------------------------------------------------------------------764828
100.0000
63540
8.30781809
0.2365-------------------------------------------------------------------------------------------------311203
40.689334923
11.221900.0000684
701
23311630.4795
00.000000.0000
764
786
91848
12.00907688
8.370400.0000
872
893
76449
9.99566717
8.786300.0000966
977

2331160.0000 %Application
psinv._PRL_1_
resid._OMP_1_
rprj3._PRL_1_
interp._PRL_1_

resid._OMP_1

resid._PRL_1_が外側ループを含めて2.28倍の性能改善
66

Copyright 2016 FUJITSU LIMITED

[fapp] チューニング効果の確認
 詳細プロファイラのPerformance情報の変化___________________________________________________________________________________
Performance monitor : Performance*************************************************************************************
Application*************************************************************************************
Kind
Elapsed(s) 2-4icmit(S)1i_cmit(S)op_wait(S) cache_wait(S)-----------------------------------------------------------------------------AVG
18.231515.7277
6.13454.900896.9846
resid_1 1MAX
18.234115.72816.13514.901797.0023MIN
18.2291
15.7274
6.13424.900396.9754
Kind
Elapsed(s) Mem_wait(S) fetch_wait(S) other_wait(S)------------------------------------------------------------------AVG
18.23150.895317.85223.3743
MAX
18.23410.900217.8685
3.3750MIN
18.22910.890017.8360
3.3739resid_1 1

Application (Performance data)

チューニング前
mem_wait(s)cache_wait(s)op_wait(s)チューニング後
fetch_wait(s)67other_wait(s)1i_cmit(s)2-4icmit(s)Copyright 2016 FUJITSU LIMITED[精密] チューニング効果の確認
チューニング前

10.0%

L1ミスdm率L1Dミス率L2ミスdm率

90.9%

55.3%

63.9%

1.4%

チューニング後

11.2%

チューニング前バリア同期待ち チューニング後
メモリアクセス待ち系⇒ L2Dミスdm率が改善(プリフェッチが有効)し、キャッシュ・メモリ系コストが削減
68

Copyright 2016 FUJITSU LIMITEDアプリケーションによるチューニング効果の確認
 NPB MGの結果出⼒で確認
チューニング前チューニング後

MG Benchmark Completed.
Class
=
Size
=
Iterations=
Time in seconds =Total processes =Compiled procs =Mop/s total
Mop/s/process
Operation type
Verification
VersionCompile date

=
=
=
=
=

=

MG Benchmark Completed.
Class
=
Size
=
Iterations=
Time in seconds =Total processes =Compiled procs =D
1024x1024x1024
50
95.36
16
16

32654.49

Mop/s total

2040.91
floating point
SUCCESSFUL
3.3.1
28 Sep 2016

Mop/s/process
Operation type
Verification
VersionCompile date

=
=
=
=
=

=

D
1024x1024x1024
50
65.81
16
16

47318.68
2957.42
floating point
SUCCESSFUL
3.3.1
29 Sep 2016

⇒ Mop/s total が 1.45倍 に向上

69

Copyright 2016 FUJITSU LIMITED

まとめ 富⼠通のノード内チューニングを⾏うツールについてご紹介しました サンプリングベースの基本プロファイラ
 挟み込みによる詳細プロファイラ
 複数回実⾏による精密PA可視化機能

 「京」のチューニングツールを用いて、Nas Parallel BenchmarksのMGのチューニング例を示しました。

70

Copyright 2016 FUJITSU LIMITED