A profiling tool for visualizing implicit behavior

PGAS 言語X10 の暗黙的な挙動を可視
化するプロファイリングツールの開発
板橋 晟星
千葉研究室, M2
千葉研究室 板橋晟星
1
HPCにおける分散並列技術
• 分散並列プログラム
– 並列スレッドの同期が難しい
– 分散ノード上のメモリアクセスが難しい
• 主な分散並列技術
– MPI (OpenMPI, MPICH)
• メッセージパッシングスタイル
• 明示的にデータの送受信(send/receive) コードを記述
– PGAS言語 (X10, UPC, CAF, Chapelなど)
• 分散配列、遠隔参照など
千葉研究室 板橋晟星
2
X10とは?
• PGAS型のメモリ(Partitioned Global Address Space)
– メモリ空間がプレースと呼ばれる単位で区切られている
アクティビティ
(≒スレッド)
• ハイパフォーマンス
– 区切られたメモリ空間を意識して、データ局所性を高められる
• 高い生産性
– 高度に抽象化された構文を提供
• データ送受信を明示的にコードに書く必要がない(暗黙的な送受信)
• アクティビティ(≒スレッド)生成や同期制御が容易
千葉研究室 板橋晟星
3
動機と目的:暗黙的な挙動を可視化
X10をはじめ、プログラミング言語では
ローレベルな処理を抽象化する方向に向かっている
挙動が暗黙的となり、より一層見えなくなっている
チューニングや性能デバッグが困難
千葉研究室 板橋晟星
6
1. 暗黙的なデータ送受信
 変数aはどのタイミングでプレース2に送信されるのか?
 どのくらいの量のデータが送信されるのか?
 変数aはどのルートで送信されるのか?
←10要素の配列を1で初期化
←プレース1へ移動
←プレース2へ移動
atはプレース(メモリ空間)
←最初の要素のみ参照
を移動する構文
• パフォーマンスチューニングのために、これらの情
報を容易に知りたい
•  しかし、これらの情報をすぐに得るのは非常に難しい
– コードが複雑になればさらに難しくなる
千葉研究室 板橋晟星
8
2. 同期制御でのCPU資源浪費
バリア同期開始
バリア同期
finish {
async { S1; }
async { S2; }
async { S3; }
}
Activity A
B
S1
C
S2
S3
ブロッキング(同期待ち)時間が
CPU資源を浪費している可能性
アクティビティ(スレッド)生成構文
バリア同期終了
• 同期制御やアクティビティ生成が容易
– finish構文、async構文で容易に記述可
– 無駄な同期や無駄な同期待ちが発生しやすい
千葉研究室 板橋晟星
9
3. 同期制御内のコードが散在する場合
finishによる同期制御
他ファイルに行ってrunメソッド
の定義を探す必要性
asyncが何回呼ばれる?(=何個のアクティビティが生成される?)
→ 変数numとtaskSetの値を追跡する必要性
10
X-Eye:X10用のプロファイラ
とビジュアライザ (1/2)
• atやfinishなどの並列分散構文によるX10固有の
イベントの情報をruntimeに取得するプロファイラ
– With 送受信されるデータの情報、アクティビティ番号
追跡コードを挿入してコンパイル
X10 source
code
X10 Compiler with Profiling
Extending Impl. of X10 compiler
ログを解析
Visualizer
Based on JavaFX
Log
data
X10 binary
code
実行して、
ログを生成
千葉研究室 板橋晟星
12
X-Eye:X10用のプロファイラ
とビジュアライザ (2/2)
• イベントを可視化し、専用DSLで対話的に可視化範
囲を絞り込めるビジュアライザ
• Java 8のStream APIライクな記述方式
• 条件をラムダ式で記述
• 途中結果を見ながら対話的にフィルタリング可能
記述例: eventStream = eventStream.filter(e -> e.execPlace == 0);
プレース0で起きたイベントのみ表示
実行
千葉研究室 板橋晟星
13
デモンストレーション
千葉研究室 板橋晟星
14
X-Eyeの実装
• プロファイラ
AST:構文解析木
– X10コンパイラを拡張しASTに追跡コードを挿入
• Polyglot用のVisitorプログラムを開発
• ビジュアライザ
– GUIはJavaFXアプリケーションで実装
– スコーピングDSLはJavaコード片であるため、オンメ
モリでコンパイル、クラスファイル生成、ロード実行
千葉研究室 板橋晟星
15
X-Eyeで取得する情報
• X10固有のイベントの実行時情報
– at, async, finish等
• X10 runtimeによる暗黙的なデータ送受信量
– コンパイル中にプロファイラが、送受信される変数
を静的に決定し、それぞれの送受信サイズを推定
• X10 runtimeの実装を解析してサイズを推定
• 推定されたサイズや変数名は追跡コード中に埋め込む
– 実行時に、追跡コードが各変数名とサイズを記録
千葉研究室 板橋晟星
16
X-Eyeで取得する情報
• アクティビティ識別子
– アクティビティ(X10のスレッド)に番号をつけることで、
区別する機能
– 追跡コードはアクティビティ識別子を取得する
• 同期制御の中で生成されるアクティビティを特定するため
– 我々のプロファイラは全てのメソッドを拡張し、新しい
引数を一つ追加し、識別子を渡せるようにする
• メソッドがどのアクティビティで実行されているのかを把握で
きるようになる
千葉研究室 板橋晟星
17
プロファイラの
挿入する
追跡コードの例
• X10コンパイラを
拡張してプロファ
イラを開発
追跡コードを
挿入
千葉研究室 板橋晟星
18
JSON形式の実行時イベント情報の例
千葉研究室 板橋晟星
19
チューニングに向けて、
X-Eyeで分かったこと
• KMeansDist.x10
– 現在のプレースと同じプレースへの移動が発生してい
るアクティビティがある
– アクティビティ0-0(メインアクティビティ)はすべてのプ
レースに移動して、新しいアクティビティを生成している
• 並列化できる可能性がある
• NQueensPar.x10
– 全てのアクティビティはまったく移動しない
• 複数プレースで実行すると逆に遅くなったり、CPU資源を浪費
する可能性あり
– 同期制御でオーバーヘッドの原因となっているアクティ
千葉研究室 板橋晟星
20
ビティがある
Source Place(移動元プレース)と
Target Place(移動先プレース)が同じ
同じプレースへのD(データ送受信を伴う移動)
が複数個確認できる
変数pの送受信経路でも同じプレースに何度も送受信されたことが確認できる
千葉研究室 板橋晟星
21
各プレースをまわって子アクティビティを生成
並列化すれば速度が上がる可能性
千葉研究室 板橋晟星
22
チューニングに向けて、
X-Eyeで分かったこと
• KMeansDist.x10
– 現在のプレースと同じプレースへの移動が発生してい
るアクティビティがある
– アクティビティ0-0(メインアクティビティ)はすべてのプ
レースに移動して、新しいアクティビティを生成している
• 並列化できる可能性がある
• NQueensPar.x10
– 全てのアクティビティはまったく移動しない
• 複数プレースで実行すると逆に遅くなったり、CPU資源を浪費
する可能性あり
– 同期制御でオーバーヘッドの原因となっているアクティ
千葉研究室 板橋晟星
23
ビティがある
移動をまったくしない
複数プレースで実行しても、資源が有効活用されない
千葉研究室 板橋晟星
24
同期マーク(F)
アクティビティ0-2が同期待ちを長くさせている
千葉研究室 板橋晟星
25
プロファイラのオーバーヘッド実験
• KMeansDist.x10(X10コンパイラに同梱されているサンプルプログラム)
–
CPU: Intel Xeon E5-2687W 3.10GHz 8 cores x 2, RAM: 64GB
–
OS: CentOS release 6.2
–
–
X10 コンパイラ及び処理系のバージョン: 2.4.0
10回実行した平均値をのせた
千葉研究室 板橋晟星
29
千葉研究室 板橋晟星
32
関連研究
• Data-centric Performance Analysis of PGAS Applications
– Detect “read” and “write” of global data objects
– Target language is Global Arrays
• Automatic Communications Performance Debugging in
PGAS Languages
– ti-trend-prof
– Debug the performance of remote read and write
– Target language is Titanium
• Guiding to X10 Programmers to Improve Runtime
Performance
– XAnalyzer
– Detect the predefined 8 patterns’ codes
– Suggest a better code for千葉研究室
each pattern
板橋晟星
34
まとめ
• X10の抽象化構文による暗黙的な挙動を可視化
するプロファイリングツールX-Eyeを開発
– 暗黙的なデータ送受信が見える
– 同期制御内でのアクティビティの挙動が見える
– スコーピングDSLによって可視化範囲を制限できる
– ベンチマークを使った実験でオーバーヘッドを測定
• 発表活動
–
–
–
–
PPL 2014 (Mar 2014) ポスター
X10 Workshop in PLDI (June 2014) 発表
X10 Day Tokyo 2015 in IBM東京基礎研究所(Jan 2015) 発表予定
PRO (Mar 2015) 発表予定
千葉研究室 板橋晟星
35