35
大大大大大大大大大大大大大大大 大大大大大 大大大大大大大大大大大大大 大大 †1 †2 大大大大 † 3 大大大†3 大大大大大 † 4 大大大大 † 2 大大大大 † 5 大大 大† 5 大大大大† 5 †1 大大大大大大大大大大大大大大大大 †2 ( 大 ) 大大大大大大大大大大大大大 †3 大大大大大大大大大大大大大大大大 †4 大大大大大 大大大大大大大大 †5 大大大大大大大大大大大大大大大大大大 2007/08/01 1 SWoPP'07

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

Embed Size (px)

DESCRIPTION

大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法. 松本 幸 †1 †2  本田宏明 †3  稲富雄一 †3 薄田竜太郎 †4  柴村英智 †2  井上弘士 †5 青柳 睦 †5  村上和彰 †5. †1 九州大学大学院システム情報科学府 †2 ( 財 ) 九州システム情報技術研究所 †3 九州大学情報基盤研究開発センター †4 福岡県産業・科学技術振興財団 †5 九州大学大学院システム情報科学研究院. 発表手順. 背景・目的 性能評価環境 PSI-SIM コード抽象化 コード抽象化の例 検証実験 おわりに. 発表手順. - PowerPoint PPT Presentation

Citation preview

Page 1: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

大規模並列システムの性能評価を

目的としたプログラムコード抽象化技法

松本 幸 † 1 †2  本田宏明 † 3  稲富雄一 † 3

薄田竜太郎 † 4  柴村英智 † 2  井上弘士 † 5

青柳 睦† 5  村上和彰† 5 †1 九州大学大学院システム情報科学府 †2 ( 財 ) 九州システム情報技術研究所 †3 九州大学情報基盤研究開発センター †4 福岡県産業・科学技術振興財団 †5 九州大学大学院システム情報科学研究院2007/08/01 1SWoPP'07

Page 2: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

発表手順

• 背景・目的• 性能評価環境 PSI-SIM• コード抽象化• コード抽象化の例• 検証実験• おわりに

2007/08/01 SWoPP'07 2

Page 3: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

発表手順

• 背景・目的• 性能評価環境 PSI-SIM• コード抽象化• コード抽象化の例• 検証実験• おわりに

2007/08/01 SWoPP'07 3

Page 4: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

大規模並列計算機の開発における性能評価

2007/08/01 SWoPP'07 4

Page 5: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

インターコネクトシミュレーションの

高速化に向けた課題• 課題 1 :通信プロファイル取得の高速化–従来は評価対象アプリケーションをそのまま実行–大規模システムの性能を評価するには多くの時間

が必要• 課題 2 :インターコネクトシミュレーション

の高速化

2007/08/01 SWoPP'07 5

Page 6: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

通信プロファイル生成における問題点

• 通信プロファイル生成時間=プログラム実行時間+通信ログ生成時間

• 大規模アプリを想定した場合は非現実的

・・・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

Page 7: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

本発表の目的と結果

• 手段– 「演算部分」を「見積り実行時間」に置換え→

抽象化• 結果( FT ):– 通信プロファイル取得時間削減率: 86%– 抽象化による実行時間予測誤差: 12%

• 結果( ERI ):– 通信プロファイル取得時間削減率: 97%– 抽象化による実行時間予測誤差: 0.7%2007/08/01 SWoPP'07 7

プログラムコードの抽象化技法の提案実アプリケーションを用いた速度 / 精度の評

Page 8: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

発表手順

• 背景・目的• 性能評価環境 PSI-SIM• コード抽象化• コード抽象化の例• 検証実験• おわりに

2007/08/01 SWoPP'07 8

Page 9: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

性能評価環境 PSI-SIM• 本研究の対象

• BSIM-Logger– 通信プロファイルの生成– 通信プロファイルはゼロ

通信遅延– アプリケーションを実機

上で実行

• NSIM– ネットワークシミュレー

ション

9

プログラムコード抽象化(BSIM-Parser)

通信プロファイル生成(BSIM-Logger)

インターコネクトシミュレーション

(NSIM)

スケルトンコード

通信プロファイル(ゼロ通信遅延)

通信プロファイル(通信遅延有)

予測実行時間ネットワーク性能

インターコネクトコンフィグレーション( NDLファイル)

モデル化

評価インターコネクト構成

評価アプリケーション

(実機実行:可能)

評価アプリケーション

(実機実行:不可能)

PSI-SIM の詳細は 8 月 3 日に発表( HPC-16 ( 46 ))

Page 10: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

発表手順

• 背景・目的• 性能評価環境 PSI-SIM• コード抽象化• コード抽象化の例• 検証実験• おわりに

2007/08/01 SWoPP'07 10

Page 11: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

コード抽象化とは?

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)}

オリジナルコード スケルトンコード

Page 12: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

スケルトンコード実行による通信プロファイル生成

• 通信プロファイル生成ツール: 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

Page 13: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

コード抽象化のレベル区分レベル if

(分岐)while/for

( loop )

関数呼び出し

MPI 関数呼び出し

通信プロファイル取得時間

5 ○ ○ ○ ○ 短

4 ○ ○ ○ ×

3 ○ ○ × ×

2 ○ × × ×

1 × × × ×○ :抽象化を許す

× :許さない 13

Page 14: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

スケルトンコード生成フロー

2007/08/01 SWoPP'07 14

•抽象化部分の決定

•BSIM_add_time の挿入+

•コメントアウト

•見積り時間の決定実測値に基づくモデル式の構築

Page 15: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

発表手順

• 背景・目的• 性能評価環境 PSI-SIM• コード抽象化• コード抽象化の例• 検証実験• おわりに

2007/08/01 SWoPP'07 15

Page 16: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

抽象化対象アプリケーション

• FT(NAS Parallel Benchmark)– 偏微分方程式を 3次元の高速フーリエ変換で解くプログラム

– プログラムの演算時間の大半は FFT→FFT のみを対象として抽象化– レベル 1, 3

• ERI– 量子力学の二電子積分計算– レベル 4

2007/08/01 SWoPP'07 16

Page 17: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

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

Page 18: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

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

見積り実行時間

Page 19: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

発表手順

• 背景・目的• 性能評価環境 PSI-SIM• コード抽象化• コード抽象化の例• 検証実験• おわりに

2007/08/01 SWoPP'07 19

Page 20: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

実験方法

• 評価項目–予測実行時間の精度–通信ログ生成時の BSIM-Logger 実行時間• mpiexec の実行時間とした

• 各プログラムで入力は以下の通り– FT :クラス C ( 512*512*512 )– ERI :基底関数の数( 394, 679, 1009 )

2007/08/01 SWoPP'07 20

Page 21: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

実験環境(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

Page 22: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

予測実行時間 (FT)

2007/08/01 SWoPP'07 22

誤差 -11.6%

誤差 -11.3%

Page 23: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

通信プロファイル時間 (FT)

2007/08/01 SWoPP'07 23

86% 削減

19% 削減

Page 24: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

予測実行時間( ERI )

2007/08/01 SWoPP'07 24

誤差 -0.2%

誤差 1.5%

誤差 -0.6%

Page 25: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

通信プロファイル生成時間( ERI )

2007/08/01 SWoPP'07 25

91% 削減

96% 削減

97% 削減

Page 26: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

考察

• 通信プロファイル生成時間はレベルに依存– 大規模なアプリケーションを想定した場合:

• FT :レベル 1 は 19% 削減,レベル 3 では 86% 削減→不十分

• ERI: レベル 4 で 97% 削減• レベル 4以上の抽象化が必要

• 精度のよい高レベル抽象化が可能– ERI :レベル 4 で誤差が 0.7%– FT :レベル 3 で誤差が 12%

• さらなる精度向上の余地あり

2007/08/01 SWoPP'07 26

Page 27: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

発表手順

• 背景・目的• 性能評価環境 PSI-SIM• コード抽象化• コード抽象化の例• 検証実験• おわりに

2007/08/01 SWoPP'07 27

Page 28: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

おわりに

• まとめ–通信プロファイルを高速に取得するための

コード抽象化技法を提案–実アプリケーションを用いた定量的評価

• 今後の課題–誤差発生の原因解析–同じレベルについてアプリケーション同士の比較

– Peta スケールの問題を意識した評価実験2007/08/01 SWoPP'07 28

Page 29: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

ご静聴ありがとうございました

2007/08/01 SWoPP'07 29

Page 30: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

参考スライド

2007/08/01 SWoPP'07 30

Page 31: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

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ファイル)

モデル化

プロセッサ情報データベース

評価インターコネクト構成

通信トラフィックの可視化プログラム最適化の指針提供

評価アプリケーション

(実機実行:可能)

評価アプリケーション

(実機実行:不可能)

Page 32: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

BSIM_add_time の実行回数

• FT–レベル 1 : 842601774 –レベル 3 : 64514

• ERI–基底関数の数 394 : 48623361–基底関数の数 679 : 308163882 –基底関数の数 1009 : 791348657

2007/08/01 SWoPP'07 32

Page 33: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

関数 FFT内部

2007/08/01 SWoPP'07 33

stockham アルゴリズムによる 1次元 FFT

stockham アルゴリズムによる 1次元 FFT

MPI_alltoall による通信のみ

MPI_alltoall による通信のみ

Page 34: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

ERI のレベル 4 スケルトンコード

2007/08/01 SWoPP'07 34

for (ijcs=0; ijcs<ncs_pair; ijcs++) { カットオフのための準備(外側) for (klcs=0; klcs<=ijcs; klcs++) { カットオフのための準備(内側) if (カットオフ処理で生き残ったら ) { ERI 計算(抽象化) Fock 行列への加算(抽象化) } }}

Page 35: 大規模並列システムの性能評価を 目的とした プログラムコード抽象化技法

FT の実行フロー

• セットアップ部• FFT 実行部• 逆 FFT 実行部–逆 FFT の実行–展開部

2007/08/01 SWoPP'07 35