Download - 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法
大規模並列システムの性能評価を
目的としたプログラムコード抽象化技法
松本 幸 † 1 †2 本田宏明 † 3 稲富雄一 † 3
薄田竜太郎 † 4 柴村英智 † 2 井上弘士 † 5
青柳 睦† 5 村上和彰† 5 †1 九州大学大学院システム情報科学府 †2 ( 財 ) 九州システム情報技術研究所 †3 九州大学情報基盤研究開発センター †4 福岡県産業・科学技術振興財団 †5 九州大学大学院システム情報科学研究院2007/08/01 1SWoPP'07
発表手順
• 背景・目的• 性能評価環境 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();
inst. Block
MPI_recv();・・・
・・・ts=132.045 送信開始ts=132.053 送信完了
ts=137.285 受信開始ts=137.290 受信完了・・・
実行するプログラム 出力されるログ
実行時間5.232sec を測定
2007/08/01 6SWoPP'07
本発表の目的と結果
• 手段– 「演算部分」を「見積り実行時間」に置換え→
抽象化• 結果( FT ):– 通信プロファイル取得時間削減率: 86%– 抽象化による実行時間予測誤差: 12%
• 結果( ERI ):– 通信プロファイル取得時間削減率: 97%– 抽象化による実行時間予測誤差: 0.7%2007/08/01 SWoPP'07 7
プログラムコードの抽象化技法の提案実アプリケーションを用いた速度 / 精度の評
価
発表手順
• 背景・目的• 性能評価環境 PSI-SIM• コード抽象化• コード抽象化の例• 検証実験• おわりに
2007/08/01 SWoPP'07 8
性能評価環境 PSI-SIM• 本研究の対象
• BSIM-Logger– 通信プロファイルの生成– 通信プロファイルはゼロ
通信遅延– アプリケーションを実機
上で実行
• NSIM– ネットワークシミュレー
ション
9
プログラムコード抽象化(BSIM-Parser)
通信プロファイル生成(BSIM-Logger)
インターコネクトシミュレーション
(NSIM)
スケルトンコード
通信プロファイル(ゼロ通信遅延)
通信プロファイル(通信遅延有)
予測実行時間ネットワーク性能
インターコネクトコンフィグレーション( NDLファイル)
モデル化
評価インターコネクト構成
評価アプリケーション
(実機実行:可能)
評価アプリケーション
(実機実行:不可能)
PSI-SIM の詳細は 8 月 3 日に発表( HPC-16 ( 46 ))
発表手順
• 背景・目的• 性能評価環境 PSI-SIM• コード抽象化• コード抽象化の例• 検証実験• おわりに
2007/08/01 SWoPP'07 10
コード抽象化とは?
11
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)}
オリジナルコード スケルトンコード
スケルトンコード実行による通信プロファイル生成
• 通信プロファイル生成ツール: BSIM-Logger–スケルトンコード実行時に各プロセスは仮想
タイマーを持つ– BSIM_add_time を呼ぶことでのみ仮想タイ
マーの時刻を加算
12
・・・MPI_send();/*inst. Block*/BSIM_add_time(5.232)MPI_recv();・・・
・・・ts=132.053 送信開始ts=132.053 送信完了
ts=137.285 受信開始ts=137.285 受信完了・・・
見積もり実行時間
5.232sec を仮想タイマー
に渡す
BSIM-Logger
スケルトンコード 出力される通信ログ
12
コード抽象化のレベル区分レベル if
(分岐)while/for
( loop )
関数呼び出し
MPI 関数呼び出し
通信プロファイル取得時間
5 ○ ○ ○ ○ 短
長
4 ○ ○ ○ ×
3 ○ ○ × ×
2 ○ × × ×
1 × × × ×○ :抽象化を許す
× :許さない 13
スケルトンコード生成フロー
2007/08/01 SWoPP'07 14
•抽象化部分の決定
•BSIM_add_time の挿入+
•コメントアウト
•見積り時間の決定実測値に基づくモデル式の構築
発表手順
• 背景・目的• 性能評価環境 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 )の作成
2007/08/01 SWoPP'07 17
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,
%edxadd 0xffffffd4(%ebp),%edxmov 0xffffffcc(%ebp),%eax
…
IC と CCT と事前に測定した CPI より
T=IC*CPI*CCT
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 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
BSIM_add_time(2.274d-8*d(1)*fftblock)
BSIM_add_time(2.274d-8*d(1)*fftblock)
実測値に基づく性能モデル式の構
築
時間測定
時間測定
見積り実行時間
FT スケルトンコード(レベル 3 )の作成
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 Intel Xeon 3.0GHzRAM 4GB
ノード数 8(2CPUs/node)OS RedHat Linux 8
(Linux kernel 2.4.21)+ SCore 5.8
コンパイラ gcc 3.2.3MPI ライブラ
リMPICH-2.0.4p1
2007/08/01 SWoPP'07 21
予測実行時間 (FT)
2007/08/01 SWoPP'07 22
誤差 -11.6%
誤差 -11.3%
通信プロファイル時間 (FT)
2007/08/01 SWoPP'07 23
86% 削減
19% 削減
予測実行時間( ERI )
2007/08/01 SWoPP'07 24
誤差 -0.2%
誤差 1.5%
誤差 -0.6%
通信プロファイル生成時間( ERI )
2007/08/01 SWoPP'07 25
91% 削減
96% 削減
97% 削減
考察
• 通信プロファイル生成時間はレベルに依存– 大規模なアプリケーションを想定した場合:
• 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
2007/08/01 SWoPP'07 31
PSI-SIM のワークフロー1.1. BSIM-ParserBSIM-Parser
評価アプリケーションのプログラムコード抽象化(通信プロファイルの高速生成を目的)
2.2. BSIM-LoggerBSIM-Logger通信プロファイルの生成(中規模システムによる大規模システムの通信プロファイル生成を目的)
3.3. NSIMNSIMネットワークシミュレーション(ゼロ通信遅延プロファイルへの実遅延時間付加が目的)
4.4. ANAANAアプリケーションの可視化/解析(アプリケーションの評価や開発支援が目的)
プログラムコード抽象化(BSIM-Parser)
通信プロファイル生成(BSIM-Logger)
インターコネクトシミュレーション
(NSIM)
スケルトンコード
通信プロファイル(ゼロ通信遅延)
通信プロファイル(通信遅延有)
可視化/解析( ANA)
予測実行時間ネットワーク性能
インターコネクトコンフィグレーション( NDLファイル)
モデル化
プロセッサ情報データベース
評価インターコネクト構成
通信トラフィックの可視化プログラム最適化の指針提供
評価アプリケーション
(実機実行:可能)
評価アプリケーション
(実機実行:不可能)
BSIM_add_time の実行回数
• FT–レベル 1 : 842601774 –レベル 3 : 64514
• ERI–基底関数の数 394 : 48623361–基底関数の数 679 : 308163882 –基底関数の数 1009 : 791348657
2007/08/01 SWoPP'07 32
関数 FFT内部
2007/08/01 SWoPP'07 33
stockham アルゴリズムによる 1次元 FFT
stockham アルゴリズムによる 1次元 FFT
MPI_alltoall による通信のみ
MPI_alltoall による通信のみ
ERI のレベル 4 スケルトンコード
2007/08/01 SWoPP'07 34
for (ijcs=0; ijcs<ncs_pair; ijcs++) { カットオフのための準備(外側) for (klcs=0; klcs<=ijcs; klcs++) { カットオフのための準備(内側) if (カットオフ処理で生き残ったら ) { ERI 計算(抽象化) Fock 行列への加算(抽象化) } }}
FT の実行フロー
• セットアップ部• FFT 実行部• 逆 FFT 実行部–逆 FFT の実行–展開部
2007/08/01 SWoPP'07 35