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
© Copyright 2024 ExpyDoc