350 likes | 395 Vues
大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法. 松本 幸 †1 †2 本田宏明 †3 稲富雄一 †3 薄田竜太郎 †4 柴村英智 †2 井上弘士 †5 青柳 睦 †5 村上和彰 †5. †1 九州大学大学院システム情報科学府 †2 ( 財 ) 九州システム情報技術研究所 †3 九州大学情報基盤研究開発センター †4 福岡県産業・科学技術振興財団 †5 九州大学大学院システム情報科学研究院. 発表手順. 背景・目的 性能評価環境 PSI-SIM コード抽象化 コード抽象化の例 検証実験 おわりに. 発表手順.
E N D
大規模並列システムの性能評価を目的としたプログラムコード抽象化技法大規模並列システムの性能評価を目的としたプログラムコード抽象化技法 松本 幸†1 †2 本田宏明 †3 稲富雄一 †3 薄田竜太郎 †4 柴村英智 †2 井上弘士 †5 青柳 睦†5 村上和彰†5 †1 九州大学大学院システム情報科学府 †2(財)九州システム情報技術研究所 †3九州大学情報基盤研究開発センター †4福岡県産業・科学技術振興財団 †5九州大学大学院システム情報科学研究院 SWoPP'07
発表手順 • 背景・目的 • 性能評価環境PSI-SIM • コード抽象化 • コード抽象化の例 • 検証実験 • おわりに SWoPP'07
発表手順 • 背景・目的 • 性能評価環境PSI-SIM • コード抽象化 • コード抽象化の例 • 検証実験 • おわりに SWoPP'07
大規模並列計算機の開発における性能評価 • 大規模並列計算機の性能予測が重要 • 大規模並列計算機において • 数万ノードで構成 • ノード数増加によるインターコネクトの複雑化 • インターコネクトの性能評価がより重要 • インターコネクトの設計空間探索のため SWoPP'07
インターコネクトシミュレーションの高速化に向けた課題インターコネクトシミュレーションの高速化に向けた課題 • 課題1:通信プロファイル取得の高速化 • 従来は評価対象アプリケーションをそのまま実行 • 大規模システムの性能を評価するには多くの時間が必要 • 課題2:インターコネクトシミュレーションの高速化 SWoPP'07
通信プロファイル生成における問題点 ・・・ ts=132.045 送信開始 ts=132.053 送信完了 ts=137.285 受信開始 ts=137.290 受信完了 ・・・ ・・・ MPI_send(); inst. Block MPI_recv(); ・・・ 実行時間 5.232secを測定 • 通信プロファイル生成時間 =プログラム実行時間+通信ログ生成時間 • 大規模アプリを想定した場合は非現実的 SWoPP'07 実行するプログラム 出力されるログ
本発表の目的と結果 プログラムコードの抽象化技法の提案 実アプリケーションを用いた速度/精度の評価 • 手段 • 「演算部分」を「見積り実行時間」に置換え→抽象化 • 結果(FT): • 通信プロファイル取得時間削減率:86% • 抽象化による実行時間予測誤差:12% • 結果(ERI): • 通信プロファイル取得時間削減率:97% • 抽象化による実行時間予測誤差:0.7% SWoPP'07
発表手順 • 背景・目的 • 性能評価環境PSI-SIM • コード抽象化 • コード抽象化の例 • 検証実験 • おわりに SWoPP'07
性能評価環境PSI-SIM 評価アプリケーション (実機実行:可能) 評価アプリケーション (実機実行:不可能) • 本研究の対象 • BSIM-Logger • 通信プロファイルの生成 • 通信プロファイルはゼロ通信遅延 • アプリケーションを実機上で実行 • NSIM • ネットワークシミュレーション プログラムコード抽象化 (BSIM-Parser) スケルトンコード 通信プロファイル生成 (BSIM-Logger) 評価インターコネクト構成 モデル化 通信プロファイル (ゼロ通信遅延) インターコネクトシミュレーション (NSIM) インターコネクトコンフィグレーション (NDLファイル) PSI-SIMの詳細は8月3日に発表 (HPC-16(46)) • 予測実行時間 • ネットワーク性能 通信プロファイル (通信遅延有)
発表手順 • 背景・目的 • 性能評価環境PSI-SIM • コード抽象化 • コード抽象化の例 • 検証実験 • おわりに SWoPP'07
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) } コード抽象化とは? 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 } オリジナルコード スケルトンコード
スケルトンコード実行による通信プロファイル生成スケルトンコード実行による通信プロファイル生成 スケルトンコード 出力される通信ログ ・・・ MPI_send(); /*inst. Block*/ BSIM_add_time(5.232) MPI_recv(); ・・・ ・・・ ts=132.053 送信開始 ts=132.053 送信完了 ts=137.285 受信開始 ts=137.285 受信完了 ・・・ BSIM-Logger 見積もり 実行時間 5.232secを 仮想タイマーに渡す • 通信プロファイル生成ツール:BSIM-Logger • スケルトンコード実行時に各プロセスは仮想タイマーを持つ • BSIM_add_timeを呼ぶことでのみ仮想タイマーの時刻を加算 12
コード抽象化のレベル区分 ○:抽象化を許す ×:許さない
スケルトンコード生成フロー • 抽象化部分の決定 • BSIM_add_timeの挿入 • + • コメントアウト • 見積り時間の決定 • 実測値に基づくモデル式の構築 SWoPP'07
発表手順 • 背景・目的 • 性能評価環境PSI-SIM • コード抽象化 • コード抽象化の例 • 検証実験 • おわりに SWoPP'07
抽象化対象アプリケーション • FT(NAS Parallel Benchmark) • 偏微分方程式を3次元の高速フーリエ変換で解くプログラム • プログラムの演算時間の大半はFFT →FFTのみを対象として抽象化 • レベル1,3 • ERI • 量子力学の二電子積分計算 • レベル4 SWoPP'07
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 ) ・・・ FTスケルトンコード(レベル1)の作成 アセンブリ言語 プログラム … mov %eax,%edx add 0xffffffd4(%ebp),%edx mov 0xffffffcc(%ebp),%eax … ICとCCTと 事前に測定したCPIより T=IC*CPI*CCT SWoPP'07
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 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) 時間 測定
発表手順 • 背景・目的 • 性能評価環境PSI-SIM • コード抽象化 • コード抽象化の例 • 検証実験 • おわりに SWoPP'07
実験方法 • 評価項目 • 予測実行時間の精度 • 通信ログ生成時のBSIM-Logger実行時間 • mpiexecの実行時間とした • 各プログラムで入力は以下の通り • FT:クラスC(512*512*512) • ERI:基底関数の数(394,679,1009) SWoPP'07
実験環境(RIKEN Super Combined Cluster) SWoPP'07
予測実行時間(FT) 誤差 -11.3% 誤差 -11.6% SWoPP'07
通信プロファイル時間(FT) 19%削減 86%削減 SWoPP'07
予測実行時間(ERI) 誤差 -0.6% 誤差 1.5% 誤差 -0.2% SWoPP'07
通信プロファイル生成時間(ERI) 97%削減 96%削減 91%削減 SWoPP'07
考察 • 通信プロファイル生成時間はレベルに依存 • 大規模なアプリケーションを想定した場合: • FT:レベル1は19%削減,レベル3では86%削減→不十分 • ERI:レベル4で97%削減 • レベル4以上の抽象化が必要 • 精度のよい高レベル抽象化が可能 • ERI:レベル4で誤差が0.7% • FT:レベル3で誤差が12% • さらなる精度向上の余地あり SWoPP'07
発表手順 • 背景・目的 • 性能評価環境PSI-SIM • コード抽象化 • コード抽象化の例 • 検証実験 • おわりに SWoPP'07
おわりに • まとめ • 通信プロファイルを高速に取得するためのコード抽象化技法を提案 • 実アプリケーションを用いた定量的評価 • 今後の課題 • 誤差発生の原因解析 • 同じレベルについてアプリケーション同士の比較 • Petaスケールの問題を意識した評価実験 SWoPP'07
ご静聴ありがとうございました SWoPP'07
参考スライド SWoPP'07
評価アプリケーション (実機実行:可能) 評価アプリケーション (実機実行:不可能) プログラムコード抽象化 (BSIM-Parser) プロセッサ情報データベース スケルトンコード 通信プロファイル生成 (BSIM-Logger) 評価インターコネクト構成 モデル化 通信プロファイル (ゼロ通信遅延) インターコネクトシミュレーション (NSIM) インターコネクトコンフィグレーション (NDLファイル) • 予測実行時間 • ネットワーク性能 通信プロファイル (通信遅延有) 可視化/解析 (ANA) • 通信トラフィックの可視化 • プログラム最適化の指針提供 PSI-SIMのワークフロー • BSIM-Parser • 評価アプリケーションのプログラムコード抽象化(通信プロファイルの高速生成を目的) • BSIM-Logger • 通信プロファイルの生成(中規模システムによる大規模システムの通信プロファイル生成を目的) • NSIM • ネットワークシミュレーション(ゼロ通信遅延プロファイルへの実遅延時間付加が目的) • ANA • アプリケーションの可視化/解析(アプリケーションの評価や開発支援が目的) SWoPP'07
BSIM_add_timeの実行回数 • FT • レベル1:842601774 • レベル3:64514 • ERI • 基底関数の数394:48623361 • 基底関数の数679:308163882 • 基底関数の数1009: 791348657 SWoPP'07
関数FFT内部 stockhamアルゴリズムによる1次元FFT MPI_alltoallによる 通信のみ SWoPP'07
ERIのレベル4スケルトンコード for (ijcs=0; ijcs<ncs_pair; ijcs++) { カットオフのための準備(外側) for (klcs=0; klcs<=ijcs; klcs++) { カットオフのための準備(内側) if (カットオフ処理で生き残ったら) { ERI計算(抽象化) Fock行列への加算(抽象化) } } } SWoPP'07
FTの実行フロー • セットアップ部 • FFT実行部 • 逆FFT実行部 • 逆FFTの実行 • 展開部 SWoPP'07