SUIF Explorer: An Interactive and Interprocedural Parallelizer

Download Report

Transcript SUIF Explorer: An Interactive and Interprocedural Parallelizer

SUIF Explorer:
An Interactive and
Interprocedural Parallelizer
S.-W. Liao, A. Diwan, R. P. Bosch Jr.,
A Ghuloum, M. S. Lam
Agenda
1.
2.
3.
4.
5.
6.
7.
SUIF Compiler
Introduction
The SUIF Explorer System
Program Slicing
A Case Study
Experimental Results
Conclusion
Agenda
1.
2.
3.
4.
5.
6.
7.
SUIF Compiler
Introduction
The SUIF Explorer System
Program Slicing
A Case Study
Experimental Results
Conclusion
The SUIF Compiler
 Stanford 大学で開発中の自動並列化コンパイラ
SUIF1 1994年~ ・ SUIF2 1999年~
 「コンパイラの研究者のために、共通のインフラを 提供しよう」との理念で発足
http://suif.Stanford.EDU にて公開
 Stanford University Intermediate Format に
変換し、並列化・最適化
様々な言語に対応可
The SUIF System
PGI Fortran EDG C
EDG C++
Java
OSUIF
Interprocedural
Analysis
Parallelization
Locality Opt
C
SUIF2
*
MachSUIF
Alpha
* C++ OSUIF to SUIF is incomplete
Scalar opt
Inst. Scheduling
Register Allocation
x86
Agenda
1.
2.
3.
4.
5.
6.
7.
SUIF Compiler
Introduction
The SUIF Explorer System
Program Slicing
A Case Study
Experimental Results
Conclusion
Introduction(1/2)

自動並列化
 並列化手法を適用しても、プログラムが持つ逐次の意味
に縛られる ⇒アプリケーションに特化した知識が必要

手動並列化
 既存プログラムの並列化には、全コードの理解が必要
 ループの並列実行だけでなく、データ構造の変更も必要
なことがある ⇒競合が起こりやすい

自動並列化と手動並列化の利点を合わせる
Introduction(2/2)

対話的並列化システム
 深いプログラム解析

配列のプライベート化解析、実行性能解析
 パフォーマンス向上の手引き

Parallelization Guru が重要なループを見つけ出し、
その並列化を手引きする
 スライスを用いたユーザ補助

注目している値に影響するプログラム部分を抜き出し、
ユーザの負担を軽減する
Agenda
1.
2.
3.
4.
5.
6.
7.
SUIF Compiler
Introduction
The SUIF Explorer System
Program Slicing
A Case Study
Experimental Results
Conclusion
The SUIF Explorer System

SUIF Explorer の動作
 Parallelizing
Compiler で自動
並列化
 Execution Analyzer で実行時
情報を収集
 Parallelization Guru が最もパ
フォーマンスを向上させるルー
プを特定
 Visualizer を通してプログラマと
やりとりを行う
Sequential
Program
Parallelizing
Compiler
Execution
Analyzers
Parallelization
Guru
Rivet
Visualizer
Programmer
Automatic Parallelization

各種解析
 シンボル解析(ループ不変式、定数伝播、帰納変数
 依存解析
 プライベート化可能性の検出
 リダクション操作の検出



最外ループに適用
多くの変数をプライベート化
手続き間解析
 多くの偽のデータ依存関係を解消
等)
Execution Analysis (1/2)

多くの実行時間は数%のコードで費やされる

loop profile analyzer
 注目すべきループを見つける
 総実行時間(実行時間を支配するループの発見)、
1回あたりの平均計算時間(ループの各実行にお
ける計算時間がばらつきを検出)を計測
 実行時間に対するオーバーヘッドは小さい
Execution Analysis (2/2)

dynamic dependence analyzer
 実行時の依存関係を検出する
 全ての
read/write を検知し、各メモリ領域におけ
る最後のwriteを追跡
 帰納変数と帰納操作を無視、逆依存を無視
 データのプライベート化が必要になる並列性も見
つける
 遅いが非常に有効
The Parallelization Guru (1/2)

2つの評価基準で手引き
 Coverage
 並列部分の占める実行時間の割合
 アムダールの法則:
スピードアップは最大 (逐次部分の実行時間)^-1
 Granularity
 同期の間の平均実行時間
 細粒度では、同期・データ送受信のオーバーヘッドで、
パフォーマンスが悪化することも

自動並列化後に上記の値を提示
ループが新たに並列化される毎に情報更新
The Parallelization Guru (2/2)

並列化ループのリストを提示
 I/Oを持たず、他のループにネストされていない物
 実行時間の多い順にソートして提示
 静的に見つかった依存関係数と、実行時に見つかった
ループ繰越依存の有無の情報を付加

ユーザインタラクション
 上から順に並列化できるかをプログラマに質問
 必要なら、静的依存を探し出し、スライスを表示
 プログラマは、無視できる依存関係やプライベート化でき
る配列を探せばよい
Visualization

Rivet visualization environment
 Hyperbolic

graph browser
call graph 等で、着目している部分を大きく、その他を
小さく表示
 Line-oriented
program statistics
プログラムの鳥瞰図を表示
 ループ深さや実行時間といった情報を付加

 Source

code viewer
色、フォント、文字によって付加情報を表示
Hyperbolic graph browser
Line-oriented program statistics
Source code viewer
Agenda
1.
2.
3.
4.
5.
6.
7.
SUIF Compiler
Introduction
The SUIF Explorer System
Program Slicing
A Case Study
Experimental Results
Conclusion
Program Slicing
プログラマはループ内外の関係あるコードを
調べる必要がある
⇒見るべきコードを少なくするべき
 プログラムスライスは、参照の値に貢献する
操作の集合

Program Slicing

スライスの使用法
 配列のあるインデックスに関するスライスを見る
 交差していない、読まれた要素は同じループでしか書か
れていないならループ繰越依存なし
 読まれた要素が同じイテレーションで先に書かれた値な
らばプライベート化して並列化できる

スライスのコード量も大きい場合
 配列、ループ外コードへのアクセスを無視する
Program slicing
Program Slicing

エイリアス情報
 同じデータを指す可能性のある変数は、
同じエイリアス変数を指すと考える
 エイリアス変数への代入は、その変数を集合に加えるこ
とで表現
main( ) {
a = 10;
b = 20;
p = &a;
p = &b;
*p = 30;
print (a);
}
main( ) {
av1 = Φ(10, av1);
av1 = Φ(20, av1);
av2 = &av1;
av2 = &av1;
av1 = Φ(30, av1);
print (av1);
}
Agenda
1.
2.
3.
4.
5.
6.
7.
SUIF Compiler
Introduction
The SUIF Explorer System
Program Slicing
A Case Study
Experimental Results
Conclusion
A Case Study

MDG benchmark
 水分子

343 個の相互作用を計算
並列化の流れ
 自動並列化
 動的解析結果
 ユーザのプログラム解析
 ユーザの補助を取り入れた結果
Agenda
1.
2.
3.
4.
5.
6.
7.
SUIF Compiler
Introduction
The SUIF Explorer System
Program Slicing
A Case Study
Experimental Results
Conclusion
Experimental Results (1/2)
MDG
 NASA’s Arc3d program
 LANL’s Hydro program
の3つのプログラムで計測

Experimental Results (2/2)
表1:自動並列化のみのプログラム情報
 表2:手動並列化でないとできない部分
 表3:スライスの効果
 表4:コンパイラのユーザ作業削減効果
 表5:ユーザインタラクションの効果

Agenda
1.
2.
3.
4.
5.
6.
7.
SUIF Compiler
Introduction
The SUIF Explorer System
Program Slicing
A Case Study
Experimental Results
Conclusion
Conclusion

SUIF Explorer のデザインを示した
 プログラマが効率的に粗粒度並列性を得られる
 手続間並列性解析、実行解析、プログラムスライ
スにより、手動並列化時に見るべきコードを削減

効率を3つのプログラムにおいて示した
 プログラマは全429のループの内12個を調べる
だけでよい
 依存解析のために見るべきコードは全体の10%
 パフォーマンスも向上