進捗 Javaバイトコード変換による 細粒度CPU資源管理

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
アルゴリズムとプログラミング (Algorithms and Programming)
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
アルゴリズムとデータ構造 2011年6月13日
Java2セキュリティ, クラスローダー,ベリファイア
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
第20章 Flyweight ~同じものを共有して無駄をなくす~
Javaプログラムの実行まで バイト Javaの コード 実行 ソースコード Java ファイル名 ファイル名 abc.java
変更文の移動を可能にした 静的単一代入形式上の部分冗長性除去
型付きアセンブリ言語を用いた安全なカーネル拡張
実行時のメモリ構造(2) Javaスタック内動作他
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
C言語でスレッド (Pthread) 2007年1月11日 海谷 治彦.
暗黙的に型付けされる構造体の Java言語への導入
コンパイラの解析 (3) クラスとインスタンスの初期化.
Portable Resource Control in Java The J-SEAL2 Approach
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
Integer Java Virtual Machine
Java Bytecode Modification and Applet Security
Javaプログラムの変更を支援する 影響波及解析システム
Javaバイトコード変換による 細粒度CPU資源管理 ~Progress Report for SWoPP2001~
通信機構合わせた最適化をおこなう並列化ンパイラ
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
アルゴリズムとデータ構造 2010年6月21日
バイトコードを単位とするJavaスライスシステムの試作
アルゴリズムとデータ構造 2010年7月26日
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
Javaへの変換による 安全なC言語の実装
C言語を用いたマシン非依存な JITコンパイラ作成フレームワーク
new Calc(7,3).divInt()実行前
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
JAVAバイトコードにおける データ依存解析手法の提案と実装
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
同期処理のモジュール化を 可能にする アスペクト指向言語
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
アルゴリズムとデータ構造 2012年6月11日
保守請負時を対象とした 労力見積のためのメトリクスの提案
アルゴリズムとプログラミング (Algorithms and Programming)
Javaによる Webアプリケーション入門 第4回
アルゴリズムとデータ構造1 2008年7月24日
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
サブゼミ第7回 実装編① オブジェクト型とキャスト.
Action Method の実装 J2EE II 第9回 2004年12月2日.
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
JAVA入門⑥ クラスとインスタンス.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
JSFによるWebアプリケーション開発 第7回
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

進捗 Javaバイトコード変換による 細粒度CPU資源管理 hayami 2018/11/8

本研究の概要 Javaプログラムの消費資源を細粒度に管理 バイトコード変換による実装 実行命令数を正確にカウント カウントをもとに何かおもしろいことをする(未定) バイトコード変換による実装 移植性、柔軟性はよい Time overheadが大きい (11~45%) 2018/11/8

Overheadをどうするか? バイトコード変換アルゴリズムの改良 実装の改良 Trivial: 1命令ずつカウント EachBlock: 基本ブロック単位でカウント WeightFirst: 基本ブロックの重みを利用 実装の改良 高速なthead local シグニチャ書換 2018/11/8

目次 概要 バイトコード変換アルゴリズム 実装 まとめ・ToDo 2018/11/8

バイトコード変換アルゴリズム (review) 2018/11/8

変換アルゴリズム 入力 出力 対象プログラム 制約*を満たすコードの挿入位置 各ポイントでいくつカウンタを増加するか 2018/11/8 変換アルゴリズム 入力 対象プログラム 出力 制約*を満たすコードの挿入位置 各ポイントでいくつカウンタを増加するか *正確なカウント&Lmax制約 (後述) 2018/11/8

アルゴリズム適用例 入力例 出力例1: Trivial 出力例2: EachBlock 出力例3: WeightFirst ← +1 Method void main(java.lang.String[]) iconst_0 istore_0 goto 36 iinc 0 1 iload_0 ldc #31 <Integer 100> if_icmplt 9 return ← +1 ← +1 ← +1 ← +3 ← +3 ← +1 ← +1 ← +4 ← +1 ← +1 ← +1 ← +3 ← +1 ← +1 ← +4 出力例1: Trivial 出力例2: EachBlock 出力例3: WeightFirst 2018/11/8

変換アルゴリズムへの要求 実行命令数の正確なカウント 実行時のオーバーヘッド小 Lmax制約 1命令おきにコード挿入は非現実的 ある程度まとめてカウンタをインクリメントするべき Lmax制約    :カウンタの値と正確なカウントとの誤差    :「きめ」に関する定数 2018/11/8

EachBlock 基本ブロックの末尾でまとめて増加 +3 +1 2018/11/8

WeightFirst 基本ブロックを実行頻度に応じて重み付け 重いブロック優先 +3 +4 +4 重いブロック 2018/11/8

実装の改良 2018/11/8

Thread Localな変数 各threadの実行命令数をカウント Java.lang.ThreadLocal 非常に高コスト currentThread() invocation + Table lookup 2018/11/8

java.lang.Theadの書き換え フィールドの追加 Table lookupは不要 (ただのフィールド参照) public class java.lang.Thread { CPURes cpures; private void init(…) { cpures = new CPURes(); … } // フィールドの追加 // インスタンスの生成時に // フィールドも初期化 2018/11/8

シグニチャの書換(引数+1) CPUResを引数で渡す currentThread()も、Table lookupも不要 void a() { b(); } void A(CPURes res) { b(res); } 2018/11/8

実験 実行時間の計測 シグニチャ書換の影響 アルゴリズムの比較 Signature Unmodified: シグニチャ書換前 Signature Modified: シグニチャ書換後 アルゴリズムの比較 Eachblock v.s. WeightFirst 2018/11/8

1. 実行時間 (シグニチャ書換前後) シグニチャの書換で実行時間が改善 (2~10倍 → 1.x倍) 2018/11/8

2. 実行時間 (EB v.s. WF) WFでもあまり改善は見られない 2018/11/8

まとめ バイトコード変換による実装は一段落 変換アルゴリズム WeightFirstでは物足りない 2018/11/8

ToDo Brute Forceで最適解を求めてみる 「おもしろいこと」とは何か? 2018/11/8