大規模並列システムの性能評価を目的としたプログラムコード

Download Report

Transcript 大規模並列システムの性能評価を目的としたプログラムコード

大規模並列システムの性能評価を
目的とした
プログラムコード抽象化技法
松本 幸 †1 †2 本田宏明 †3 稲富雄一 †3
薄田竜太郎 †4 柴村英智 †2 井上弘士 †5
青柳 睦†5 村上和彰†5
2007/08/01
SWoPP'07
†1 九州大学大学院システム情報科学府
†2 (財)九州システム情報技術研究所
†3九州大学情報基盤研究開発センター
†4福岡県産業・科学技術振興財団
1
†5九州大学大学院システム情報科学研究院
発表手順
•
•
•
•
•
•
背景・目的
性能評価環境PSI-SIM
コード抽象化
コード抽象化の例
検証実験
おわりに
2007/08/01
SWoPP'07
2
発表手順
•
•
•
•
•
•
背景・目的
性能評価環境PSI-SIM
コード抽象化
コード抽象化の例
検証実験
おわりに
2007/08/01
SWoPP'07
3
大規模並列計算機の開発における
性能評価
• 大規模並列計算機の性能予測が重要
• 大規模並列計算機において
– 数万ノードで構成
– ノード数増加によるインターコネクトの複雑化
• インターコネクトの性能評価がより重要
– インターコネクトの設計空間探索のため
2007/08/01
SWoPP'07
4
インターコネクトシミュレーションの
高速化に向けた課題
• 課題1:通信プロファイル取得の高速化
– 従来は評価対象アプリケーションをそのまま実行
– 大規模システムの性能を評価するには多くの時間が
必要
• 課題2:インターコネクトシミュレーションの高速化
2007/08/01
SWoPP'07
5
通信プロファイル生成における問題点
• 通信プロファイル生成時間
=プログラム実行時間+通信ログ生成時間
• 大規模アプリを想定した場合は非現実的
・・・
・・・
MPI_send();
ts=132.045 送信開始
ts=132.053 送信完了
inst. Block
実行時間
5.232secを測定
MPI_recv();
・・・
2007/08/01
実行するプログラム
ts=137.285 受信開始
ts=137.290 受信完了
・・・
SWoPP'07
出力されるログ
6
本発表の目的と結果
プログラムコードの抽象化技法の提案
実アプリケーションを用いた速度/精度の評価
• 手段
– 「演算部分」を「見積り実行時間」に置換え→抽象化
• 結果(FT):
– 通信プロファイル取得時間削減率:86%
– 抽象化による実行時間予測誤差:12%
• 結果(ERI):
– 通信プロファイル取得時間削減率:97%
– 抽象化による実行時間予測誤差:0.7%
2007/08/01
SWoPP'07
7
発表手順
•
•
•
•
•
•
背景・目的
性能評価環境PSI-SIM
コード抽象化
コード抽象化の例
検証実験
おわりに
2007/08/01
SWoPP'07
8
性能評価環境PSI-SIM
評価アプリ
ケーション
(実機実行:可能)
評価アプリ
ケーション
(実機実行:不可能)
• 本研究の対象
プログラムコード抽象化
(BSIM-Parser)
• BSIM-Logger
スケルトン
コード
通信プロファイル生成
(BSIM-Logger)
通信プロファイル
(ゼロ通信遅延)
インターコネクト
シミュレーション
(NSIM)
予測実行時間
ネットワーク性能
通信プロファイル
(通信遅延有)
評価インター
コネクト構成
モデル化
インターコネクト
コンフィグレーション
(NDLファイル)
– 通信プロファイルの生成
– 通信プロファイルはゼロ通
信遅延
– アプリケーションを実機上で
実行
• NSIM
– ネットワークシミュレーション
PSI-SIMの詳細は8月3日に発表
(HPC-16(46))
9
発表手順
•
•
•
•
•
•
背景・目的
性能評価環境PSI-SIM
コード抽象化
コード抽象化の例
検証実験
おわりに
2007/08/01
SWoPP'07
10
コード抽象化とは?
オリジナルコード
foo(){
Inst. Block A
for( i = 0; i < n; i++){
Inst. Block B
if (hoge){
Inst. Block C
}else{
Inst. Block D
}
Inst. Block E
}
MPI_Comm
Inst. Block F
}
foo(){ スケルトンコード
/* Inst. Block A
for( i = 0; i < n; i++){
Inst. Block B
if (hoge){
Inst. Block C
}else{
Inst. Block D
}
Inst. Block E
}*/
BSIM_add_time(10ms)
MPI_Comm
/* Inst. Block F */
BSIM_add_time(1ms)
}
11
スケルトンコード実行による
通信プロファイル生成
• 通信プロファイル生成ツール:BSIM-Logger
– スケルトンコード実行時に各プロセスは仮想タイ
マーを持つ
– BSIM_add_timeを呼ぶことでのみ仮想タイマーの
時刻を加算
スケルトンコード
・・・
MPI_send();
/*inst. Block*/
BSIM_add_time(5.232)
MPI_recv();
・・・
出力される通信ログ
BSIM-Logger
見積もり
実行時間
5.232secを
仮想タイマー
に渡す
12
・・・
ts=132.053 送信開始
ts=132.053 送信完了
ts=137.285 受信開始
ts=137.285 受信完了
・・・
12
コード抽象化のレベル区分
レベル
if
(分岐)
while/for
(loop)
関数
呼び出し
MPI関数
呼び出し
通信プロ
ファイル
取得時間
5
○
○
○
○
短
4
○
○
○
×
3
○
○
×
×
2
○
×
×
×
1
×
×
×
×
○:抽象化を許す
×:許さない
長
13
スケルトンコード生成フロー
•BSIM_add_timeの挿入
+
•コメントアウト
•抽象化部分の決定
•見積り時間の決定
実測値に基づくモデル式の構築
2007/08/01
SWoPP'07
14
発表手順
•
•
•
•
•
•
背景・目的
性能評価環境PSI-SIM
コード抽象化
コード抽象化の例
検証実験
おわりに
2007/08/01
SWoPP'07
15
抽象化対象アプリケーション
• FT(NAS Parallel Benchmark)
– 偏微分方程式を3次元の高速フーリエ変換で解く
プログラム
– プログラムの演算時間の大半はFFT
→FFTのみを対象として抽象化
– レベル1,3
• ERI
– 量子力学の二電子積分計算
– レベル4
2007/08/01
SWoPP'07
16
FTスケルトンコード(レベル1)の作成
…
y(j,i,1) = x(i,j+jj,k)
CC CALC ORIG -- y(j,i,1) = x(i,j+jj,k)
CC CALC -- mov 0x18(%ebp),%esi
・・・
CC INST -- total = 31 :cpi ( imul ) * 3 + cpi ( shl )
* 2 + cpi ( mov ) * 16 + cpi ( add ) * 5 + cpi
( lea ) * 2 + cpi ( dec ) * 3
c--------ここではCPI=1.41,IC =31,
c--------CCT=1/(3.0*10^9)より計算
アセンブリ言語
プログラム
call BSIM_add_time ( 1.50027600d-08 )
・・・
…
mov
%eax,%edx
add 0xffffffd4(%ebp),%edx
mov 0xffffffcc(%ebp),%eax
ICとCCTと
事前に測定したCPIより
T=IC*CPI*CCT
…
2007/08/01
SWoPP'07
17
FTスケルトンコード(レベル3)の作成
do k = 1, d(3)
do jj = 0, d(2) - fftblock, fftblock
時間
測定
>
時間
測定
do j = 1, fftblock
do i = 1, d(1)
y(j,i,1) = x(i,j+jj,k)
enddo
enddo
call cfftz (is, logd(1),
d(1), y, y(1,1,2))
do j = 1, fftblock
do i = 1, d(1)
xout(i,j+jj,k) = y(j,i,1)
enddo
enddo
enddo
enddo
do k = 1, d(3)
do jj = 0, d(2) - fftblock, fftblock
見積り
実行
時間
>
見積り
実行
時間
do j = 1, fftblock
do iBSIM_add_time
= 1, d(1)
(2.274d-8*d(1)*fftblock)
y(j,i,1) = x(i,j+jj,k)
enddo
実測値に基づく
enddo
性能モデル式の構築
call cfftz (is, logd(1),
d(1), y, y(1,1,2))
do j = 1, fftblock
do i = 1, d(1)
xout(i,j+jj,k) = y(j,i,1)
BSIM_add_time
enddo
(2.274d-8*d(1)*fftblock)
enddo
enddo
enddo
18
発表手順
•
•
•
•
•
•
背景・目的
性能評価環境PSI-SIM
コード抽象化
コード抽象化の例
検証実験
おわりに
2007/08/01
SWoPP'07
19
実験方法
• 評価項目
– 予測実行時間の精度
– 通信ログ生成時のBSIM-Logger実行時間
• mpiexecの実行時間とした
• 各プログラムで入力は以下の通り
– FT:クラスC(512*512*512)
– ERI:基底関数の数(394,679,1009)
2007/08/01
SWoPP'07
20
実験環境
(RIKEN Super Combined Cluster)
CPU
RAM
ノード数
OS
コンパイラ
MPIライブラリ
2007/08/01
Intel Xeon 3.0GHz
4GB
8(2CPUs/node)
RedHat Linux 8
(Linux kernel 2.4.21)
+ SCore 5.8
gcc 3.2.3
MPICH-2.0.4p1
SWoPP'07
21
予測実行時間(FT)
8
7
誤差 -11.3%
誤差 -11.6%
FT-L1C
FT-L3C
予測実行時間(sec)
6
5
4
3
2
1
0
オリジナル
2007/08/01
SWoPP'07
22
通信プロファイル時間(FT)
14
19%削減
通信プロファイル生成時間(sec)
12
10
8
6
86%削減
4
2
0
オリジナル
2007/08/01
L1
SWoPP'07
L3
23
予測実行時間(ERI)
オリジナル
スケルトン
400
誤差 -0.6%
350
予測実行時間(sec)
300
250
誤差 1.5%
200
150
100
50
誤差 -0.2%
0
2007/08/01
ERI394
ERI679
SWoPP'07
ERI1009
24
通信プロファイル生成時間(ERI)
オリジナル
スケルトン
97%削減
400
通信プロファイル生成時間(sec)
350
300
250
96%削減
200
150
100
91%削減
50
0
2007/08/01
ERI394
ERI679
SWoPP'07
ERI1009
25
考察
• 通信プロファイル生成時間はレベルに依存
– 大規模なアプリケーションを想定した場合:
• FT:レベル1は19%削減,レベル3では86%削減→不十分
• ERI:レベル4で97%削減
• レベル4以上の抽象化が必要
• 精度のよい高レベル抽象化が可能
– ERI:レベル4で誤差が0.7%
– FT:レベル3で誤差が12%
• さらなる精度向上の余地あり
2007/08/01
SWoPP'07
26
発表手順
•
•
•
•
•
•
背景・目的
性能評価環境PSI-SIM
コード抽象化
コード抽象化の例
検証実験
おわりに
2007/08/01
SWoPP'07
27
おわりに
• まとめ
– 通信プロファイルを高速に取得するためのコード
抽象化技法を提案
– 実アプリケーションを用いた定量的評価
• 今後の課題
– 誤差発生の原因解析
– 同じレベルについてアプリケーション同士の比較
– Petaスケールの問題を意識した評価実験
2007/08/01
SWoPP'07
28
ご静聴ありがとうございました
2007/08/01
SWoPP'07
29
参考スライド
2007/08/01
SWoPP'07
30
PSI-SIMのワークフロー
評価アプリ
ケーション
(実機実行:可能)
1. BSIM-Parser
評価アプリ
ケーション
(実機実行:不可能)
プログラムコード抽象化
(BSIM-Parser)
評価アプリケーションのプ
ログラムコード抽象化(通
信プロファイルの高速生成
を目的)
プロセッサ情報
データベース
スケルトン
コード
通信プロファイル生成
(BSIM-Logger)
予測実行時間
ネットワーク性能
2. BSIM-Logger
通信プロファイルの生成
(中規模システムによる大
規模システムの通信プロ
ファイル生成を目的)
評価イン
ターコネク
ト構成
通信プロファイル
(ゼロ通信遅延)
モデル化
インターコネクト
シミュレーション
(NSIM)
インターコネクト
コンフィグレーション
(NDLファイル)
3. NSIM
ネットワークシミュレーショ
ン(ゼロ通信遅延プロファイ
ルへの実遅延時間付加が
目的)
通信プロファイル
(通信遅延有)
可視化/解析
(ANA)
4. ANA
通信トラフィックの可視化
プログラム最適化の指針提供
2007/08/01
SWoPP'07
アプリケーションの可視化
/解析(アプリケーションの
評価や開発支援が目的)
31
BSIM_add_timeの実行回数
• FT
– レベル1:842601774
– レベル3:64514
• ERI
– 基底関数の数394:48623361
– 基底関数の数679:308163882
– 基底関数の数1009: 791348657
2007/08/01
SWoPP'07
32
関数FFT内部
fft
cffts
cfftz
fftz2
2007/08/01
transpose
local
global
stockhamアルゴリズム
による1次元FFT
SWoPP'07
finish
MPI_alltoallによる
通信のみ
33
ERIのレベル4スケルトンコード
for (ijcs=0; ijcs<ncs_pair; ijcs++) {
カットオフのための準備(外側)
for (klcs=0; klcs<=ijcs; klcs++) {
カットオフのための準備(内側)
if (カットオフ処理で生き残ったら) {
ERI計算(抽象化)
Fock行列への加算(抽象化)
}
}
}
2007/08/01
SWoPP'07
34
FTの実行フロー
• セットアップ部
• FFT実行部
• 逆FFT実行部
– 逆FFTの実行
– 展開部
2007/08/01
SWoPP'07
35