「京」における 高速化ワークショップ · プログラムの理 解 簡易計測...
TRANSCRIPT
「京」における高速化ワークショップ
性能分析・チューニングの手順について
登録施設利用促進機関
一般財団法人 高度情報科学技術研究機構 富山 栄治
性能分析・チューニング手順プログラムの理
解
簡易計測
詳細計測
ロードバランス
スケーラビリティ
キャッシュ有効利用
ホットスポット
2013/12/18
データ構造
並列化構造
処理フロー
命令スケジューリング
目標設定
• どの程度の並列数が実現可能か把握する• インバランスの懸念があるか把握する• タイムステップループ、I/O処理など注目すべき箇所を把握する
• 並列数、並列化率などの目標を設定し、チューニング時の指針とする
• 全体性能を確認し、ホットスポットを特定する
• ロードバランス、スケーラビリティについて性能阻害要因を
特定し、 単体 、 並列 チューニングを実施する
• ホットスポットについてハードウェアモニタ情報などから性能阻害要因を特定し、チューニングを実施する
単体 並列
一般財団法人 高度情報科学技術研究機構 2
プログラムの理解プログラムの理
解
2013/12/18
• (ナノ粒子など)単一粒子系に特化したRMCプログラム• 「京」などのmega-coresクラスを想定• 基本的なチューニングは実施済• 予測値/修正値アルゴリズムを実装し、通信回数を削減• MPI/OpenMPのハイブリッド並列に対応
例)
一般財団法人 高度情報科学技術研究機構 3
並列化構造・処理フロープログラムの理
解
2013/12/18
データ構造
並列化構造
処理フロー
• 計算負荷が小さいため通信削減を重視したアルゴリズム• MPI通信はAllreduceで行っている
一般財団法人 高度情報科学技術研究機構 4
K-scopeプログラムの理
解
2013/12/18
データ構造
並列化構造
処理フロー
プログラム構造解析支援ツールhttp://www.kcomputer.jp/ungi/soft/kscope/
• F90,F77• 静的構造解析• 「京」プロファイルデータ対応• ツリーによる論理構造可視化• 分析機能
• 検索• 変数特性一覧• 演算カウント• 宣言、定義、参照• 変数有効域• 変数トレース• 変数アクセス先設定• 要求B/F算出
ループ、分岐、プロシージャ呼び出しに代表される論理構造の可視化コード・リーディングにかかる時間と労力の削減
一般財団法人 高度情報科学技術研究機構 5
目標設定
2013/12/18
プログラムの理解
データ構造
並列化構造
処理フロー
目標設定
1億粒子の問題を1時間で解きたい
• 1億 粒子• 10,000 並列• 10,000 step• 100 TFLOPS
プログラムの理解に基づきユーザー目標の妥当性を検討
研究目標:
実行目標:
• 実行目標の性能特性と大きく違わないか• 1ノードの計算規模は妥当か• 分析にて使用可能な計算資源量か
分析用設定:
• 1,000万粒子• 1,000 並列• 100 step
一般財団法人 高度情報科学技術研究機構 6
簡易計測(fipp)
2013/12/18
実行コマンド:fipp -C -d dir -i10 mpiexec ./a.out出力:GUI,テキスト(fipppx)
プログラムの理解
簡易計測
データ構造
並列化構造
処理フロー
目標設定
---------------------------------------------------------------------------------------------Fujitsu Instant Profiler Version 1.2.0
Measured time : Thu Oct 31 11:54:44 2013CPU frequency : Process 0 - 127 2000 (MHz)Type of program : MPI & Thread (OpenMP & AUTO)Average at sampling interval : 10.0 (ms)Measured range : All rangesVirtual coordinate : (128, 0, 0)
---------------------------------------------------------------------------------------------_____________________________________________________________________________________________Procedures profile
*************************************************************************************Application - procedures
*************************************************************************************
Cost % Barrier % MPI % Start End------------------------------------------------------------------------------------------------
83493896 100.0000 1173244 1.4052 9982798 11.9563 -- -- Application------------------------------------------------------------------------------------------------
73485368 88.0129 1172574 1.5957 0 0.0000 373 439 simplermc._OMP_2_9983123 11.9567 80 0.0008 9982798 99.9967 1 1514 MAIN__10879 0.0130 524 4.8166 0 0.0000 830 923 simplermc._OMP_3_6134 0.0073 0 0.0000 0 0.0000 -- -- __jwe_etbf698 0.0008 0 0.0000 0 0.0000 467 473 simplermc._PRL_4_694 0.0008 0 0.0000 0 0.0000 972 974 simplermc._PRL_11_
...
サンプリング計測によってコスト情報が確認出来る
一般財団法人 高度情報科学技術研究機構 7
ホットスポット特定・全体性能
2013/12/18
• 負荷の殆どをひとつのループが占めている事がわかる
プログラムの理解
簡易計測
ホットスポット
データ構造
並列化構造
処理フロー
目標設定
• ホットスポットには大きなインバランスがある
• Main program部分の大部分はMPIコスト
一般財団法人 高度情報科学技術研究機構 8
ロードインバランス
2013/12/18
• ランク0が他に比べて非常に時間がかかっている• ランク0の大部分はスレッドバリア待ち
• ランク0以外はMPI_barrier待ち
fipp:Application View:Profile:Cost Stacked Chart:Procedureプログラムの理解
簡易計測
ロードバランス
ホットスポット
データ構造
並列化構造
処理フロー
目標設定
一般財団法人 高度情報科学技術研究機構 9
ランク0のスレッド間インバランス
2013/12/18
fipp:Rank View:Rank 0:Profile:Bar Chart:Loop
スレッド番号に比例して処理が増加し、インバランスが生じている
プログラムの理解
簡易計測
ロードバランス
ホットスポット
データ構造
並列化構造
処理フロー
目標設定
MPI_barrier
rank 0 1 2thread 0 1 2 3 4 5 6 7
excel
一般財団法人 高度情報科学技術研究機構 10
インバランス解消
2013/12/18
プログラムの理解
簡易計測
ロードバランス
ホットスポット
データ構造
並列化構造
処理フロー
目標設定
スレッドバリア待ちがほぼ解消され、実行時間が54%に減少した
スレッド間の処理量が均等になるようにスケジューリングした
Cos
t
threads
excel
単体チューニング
一般財団法人 高度情報科学技術研究機構 11
全体スケーラビリティ(プロセス)
2013/12/18
全体
演算と通信の分離計測
演算
通信
• weak scalingで計測• 256並列で実行時間が増加• 計測するとwaitallが増加している
通信に問題あり…?
演算時間のみ増加していた
演算部分に原因がある!
プログラムの理解
簡易計測
ロードバランス
スケーラビリティ
ホットスポット
データ構造
並列化構造
処理フロー
目標設定
excel
一般財団法人 高度情報科学技術研究機構 12
全体スケーラビリティ(プロセス)
2013/12/18
■の演算時間が長いため他のプロセスが待っている
各プロセスの演算時間のインバランスを確認した
上記情報を基に調査した結果、本来均等になるはずの粒子が特定のプロセスに偏る不具合があり、演算インバランスが生じていた事がわかった
プログラムの理解
簡易計測
ロードバランス
スケーラビリティ
ホットスポット
データ構造
並列化構造
処理フロー
目標設定
不具合を修正し、性能劣化を解消した
fipp
並列チューニング
一般財団法人 高度情報科学技術研究機構 13
区間スケーラビリティ(スレッド)
2013/12/18
プログラムの理解
簡易計測
ロードバランス
スケーラビリティ
ホットスポット
データ構造
並列化構造
処理フロー
目標設定
• 1スレッドと8スレッド実行での全体の加速率は約2.5• 区間毎にみると区間Dの実行時間が大きく、かつスケーラビリ
ティが悪いように見える
実行スレッド数
excel
一般財団法人 高度情報科学技術研究機構 14
区間スケーラビリティ(スレッド)
2013/12/18
加速率が1.1と非常に低い区間Dについて調査した結果、スレッド非並列部があることを確認した
プログラムの理解
簡易計測
ロードバランス
スケーラビリティ
ホットスポット
データ構造
並列化構造
処理フロー
目標設定
OpenMPによりスレッド並列化し、全体の20%高速化した
excel
単体チューニング
区間ごとのスケーラビリティ評価が重要!
一般財団法人 高度情報科学技術研究機構 15
詳細計測(fapp)
2013/12/18
実行コマンド:fapp -C -d dir -Ihwm -Hevent=Statistics mpiexec ./a.out出力:GUI,fapppx
プログラムの理解
簡易計測
詳細計測
ロードバランス
スケーラビリティ
ホットスポット
データ構造
並列化構造
処理フロー
目標設定
_____________________________________________________________________________________________MPI profile
*************************************************************************************Application
*************************************************************************************
Kind Elapsed(s) Wait(s) Byte Call ( 0-4K 4K-64K 64K-1024K 1024KByte-)-----------------------------------------------------------------------------------------------------------------------------------------
99465.7109 175.5413 ---- 180224 158464 256 10752 10752 all 0-----------------------------------------------------------------------------------------------------------------------------------------
AVG 0.0000 0.0000 0.0000 1.0000 1.0000 0.0000 0.0000 0.0000 mpi_comm_rank_MAX 0.0000 0.0000 0.0000 1 1 0 0 0MIN 0.0000 0.0000 0.0000 1 1 0 0 0--------------------------------------------------------------------------------------------------------------------------------------AVG 0.0000 0.0000 0.0000 1.0000 1.0000 0.0000 0.0000 0.0000 mpi_comm_size_MAX 0.0000 0.0000 0.0000 1 1 0 0 0MIN 0.0000 0.0000 0.0000 1 1 0 0 0--------------------------------------------------------------------------------------------------------------------------------------AVG 0.0026 0.0000 0.0000 1.0000 1.0000 0.0000 0.0000 0.0000 mpi_finalize_MAX 0.0048 0.0000 0.0000 1 1 0 0 0MIN 0.0020 0.0000 0.0000 1 1 0 0 0--------------------------------------------------------------------------------------------------------------------------------------AVG 0.1028 0.0000 0.0000 1.0000 1.0000 0.0000 0.0000 0.0000 mpi_init_MAX 0.2130 0.0000 0.0000 1 1 0 0 0MIN 0.0282 0.0000 0.0000 1 1 0 0 0--------------------------------------------------------------------------------------------------------------------------------------AVG 0.3974 0.0398 575452.6215 251.0000 83.0000 1.0000 84.0000 83.0000 mpi_allreduce_MAX 0.4022 0.0865 575452.6215 251 83 1 84 83MIN 0.3920 0.0124 575452.6215 251 83 1 84 83--------------------------------------------------------------------------------------------------------------------------------------AVG 773.8598 0.0000 0.0000 678.0000 678.0000 0.0000 0.0000 0.0000 mpi_barrier_MAX 806.0170 0.0000 0.0000 678 678 0 0 0MIN 1.7829 0.0000 0.0000 678 678 0 0 0--------------------------------------------------------------------------------------------------------------------------------------AVG 2.7142 1.3316 213681.6087 475.0000 473.0000 1.0000 0.0000 1.0000 mpi_bcast_MAX 2.7159 2.6805 424050.3242 475 473 1 0 1MIN 2.7074 0.0037 212025.1621 475 473 1 0 1--------------------------------------------------------------------------------------------------------------------------------------
様々なハードウェアモニタ情報が確認出来る
一般財団法人 高度情報科学技術研究機構 16
詳細計測(精密PA可視化機能)
2013/12/18
プログラムの理解
簡易計測
詳細計測
ロードバランス
スケーラビリティ
キャッシュ有効利用
ホットスポット
データ構造
並列化構造
処理フロー
命令スケジューリング
目標設定
精密PAによって詳細な性能情報を把握できる
do i=1,Nx = px(0)*t(i)&
&+px(1)*(t_omp(ifdx(1,i),id)+t_omp(ifdx(-1,i),id))&&+px(2)*(t_omp(ifdx(2,i),id)+t_omp(ifdx(-2,i),id))
y = py(0)*t(i)&&+py(1)*(t_omp(ifdy(1,i),id)+t_omp(ifdy(-1,i),id))&&+py(2)*(t_omp(ifdy(2,i),id)+t_omp(ifdy(-2,i),id))
z = pz(0)*t(i)&&+pz(1)*(t_omp(ifdz(1,i),id)+t_omp(ifdz(-1,i),id))&&+pz(2)*(t_omp(ifdz(2,i),id)+t_omp(ifdz(-2,i),id))
tt_omp(i,id)=p0_2*t_omp(i,id)-0.5d0*(x+y+z)enddo
• パフォーマンス情報• メモリ・キャッシュ情報• SIMD情報• CPU時間情報• 命令情報• バランス情報
一般財団法人 高度情報科学技術研究機構 17
詳細計測(精密PA)
2013/12/18
精密PAから、キャッシュアクセス待ちが多く発生していたためリストアクセスパターンを調査したところ、xのみキャッシュに収まらないアクセスパターンであり、同一ループのためそれがy,zの計算にまで悪影響を及ぼしていると推察された。
プログラムの理解
簡易計測
詳細計測
ロードバランス
スケーラビリティ
キャッシュ有効利用
ホットスポット
データ構造
並列化構造
処理フロー
命令スケジューリング
目標設定
ループ分割したところ、実行性能が1.7倍に向上した
do i=1,Ny = py(0)*t(i)&
&+py(1)*(t_omp(ifdy(1,i),id)+t_omp(ifdy(-1,i),id))&&+py(2)*(t_omp(ifdy(2,i),id)+t_omp(ifdy(-2,i),id))
z = pz(0)*t(i)&&+pz(1)*(t_omp(ifdz(1,i),id)+t_omp(ifdz(-1,i),id))&&+pz(2)*(t_omp(ifdz(2,i),id)+t_omp(ifdz(-2,i),id))
tt_omp(i,id)=p0_2*t_omp(i,id)-0.5d0*(y+z)enddodo i=1,Nx = px(0)*t(i)&
&+px(1)*(t_omp(ifdx(1,i),id)+t_omp(ifdx(-1,i),id))&&+px(2)*(t_omp(ifdx(2,i),id)+t_omp(ifdx(-2,i),id))
tt_omp(i,id)=tt_omp(i,id)-0.5d0*xenddo
y,z
x
単体チューニング
一般財団法人 高度情報科学技術研究機構 18
通信時間の隠蔽
2013/12/18
プログラムの理解
簡易計測
詳細計測
ロードバランス
スケーラビリティ
キャッシュ有効利用
ホットスポット
データ構造
並列化構造
処理フロー
命令スケジューリング
目標設定
通信に依存しない演算によって通信時間を隠蔽する
call mpi_isendcall mpi_irecv
call mpi_wait(通信処理)
do i=1,n
通信時間の隠蔽
do i=1,n
call mpi_isendcall mpi_irecv
call mpi_wait
do i=1,n
do i=1,n
通信処理
上右図のように通信時間の隠蔽を図っているプログラムの場合、一旦左のように演算と通信を分離したコードに修正して計測する
隠蔽が効果的に働いていない!
分離しても処理時間に変化ない
一般財団法人 高度情報科学技術研究機構 19
通信特性調査
2013/12/18
プログラムの理解
簡易計測
詳細計測
ロードバランス
スケーラビリティ
キャッシュ有効利用
ホットスポット
データ構造
並列化構造
処理フロー
命令スケジューリング
目標設定
mpiexec -mca mpi_print stats 1 ./a.out===================================================================/****************** MPI Statistical Information ******************/===================================================================
------------------------- MPI Information -------------------------...------------------- Per-peer Communication Count ------------------
MAX MIN AVEIn_Node 46 [ 0] 24 [ 35] 35.2Neighbor 178609 [ 32] 133921 [ 1] 175783.6Not_Neighbor 4405 [ 124] 4060 [ 109] 4280.2Total_Count 182954 [ 34] 138152 [ 0] 180099.0Connection 127 [ 0] 127 [ 0] 127.0Max_Hop 18 [ 0] 11 [ 28] 14.5Average_Hop 9.07 [ 0] 5.54 [ 28] 6.87
----------------- Per-protocol Communication Count ----------------MAX MIN AVE
Eager 1368 [ 100] 963 [ 27] 1110.8Rendezvous 181971 [ 27] 136987 [ 2] 178988.2Hasty_Rendezvous 0 [ 0] 0 [ 0] 0.0Unexpected_Message 3 [ 12] 1 [ 0] 1.1
Rendezvous通信の場合、そのままでは隠蔽されない
call mpi_isendcall mpi_irecv
call mpi_wait
do i=1,n
do i=1,n
通信処理
通信処理通信処理
*京ポータルドキュメント チュートリアル2.2参照
期待した通信開始
実際の通信開始
一般財団法人 高度情報科学技術研究機構 20
MPI_testの挿入
2013/12/18
プログラムの理解
簡易計測
詳細計測
ロードバランス
スケーラビリティ
キャッシュ有効利用
ホットスポット
データ構造
並列化構造
処理フロー
命令スケジューリング
目標設定
Rendezvous通信の場合、MPI_testを挿入することで通信処理を促し、通信時間の隠蔽を有効にする
call mpi_isendcall mpi_irecv
call mpi_wait
do i=1,n
do i=1,n通信処理
call mpi_testcall mpi_test
0
waitのMaxは66%短縮Minはほぼ0秒に
MPI_testにより通信隠蔽が実現
excel
並列チューニング
一般財団法人 高度情報科学技術研究機構 21
まとめ
• 性能分析は以下の流れで行う
• プログラムの理解
• 目標設定
• 簡易計測
• 詳細計測
• 簡易計測では、
• ホットスポットの特定や区間ごとのスケーラビリティを分析し、性能阻害要因を特定する
• 目標とする並列数などを踏まえ、どのホットスポットを詳細分析するか、スケーラビリティが許容出来るかどうか、を判断する
• 詳細計測では、
• ホットスポットに対して詳細に分析し、性能阻害要因を特定、チューニングを実施する。ただし、その分析コストや効果について注意が必要
2013/12/18 一般財団法人 高度情報科学技術研究機構 22