1 / 10

LMNtal コンパイラにおける 並び替えとグループ化を 用いた命令列の最適化

LMNtal コンパイラにおける 並び替えとグループ化を 用いた命令列の最適化. 1G01P047-1 櫻井 健. LMNtal とは. 階層的グラフ構造を書き換え規則 ( ルール ) で書き換えることで処理が進行 計算モデルとして簡明であること , 高い汎用性を持つことが目標 「高い汎用性」の観点から , それなりに  実行効率を高くしたい → 最適化 LMNtal のプログラムの構成要素は , アトム , リンク , 膜 , ルールの 4 つ 例: a(X), b :- X > 5 | ok. a(3). a(3). c. c.

Télécharger la présentation

LMNtal コンパイラにおける 並び替えとグループ化を 用いた命令列の最適化

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. LMNtalコンパイラにおける並び替えとグループ化を用いた命令列の最適化LMNtalコンパイラにおける並び替えとグループ化を用いた命令列の最適化 1G01P047-1 櫻井 健

  2. LMNtalとは • 階層的グラフ構造を書き換え規則(ルール)で書き換えることで処理が進行 • 計算モデルとして簡明であること, 高い汎用性を持つことが目標 • 「高い汎用性」の観点から, それなりに  実行効率を高くしたい → 最適化 • LMNtalのプログラムの構成要素は, アトム, リンク, 膜, ルールの4つ 例: a(X), b :- X > 5 | ok. a(3) a(3) c c ルール適用 b a(8) ok a(3) a 3 =

  3. 処理系の概要と実装した最適化 ソースコード 解釈・実行 命令列の並び替えとグループ化を行う機能を追加した ルールの構造 ヘッド :- ガード | ボディ → ヘッド命令列, ガード命令列, ボディ命令列にコンパイル 最適化するのはヘッド命令列と ガード命令列のみ. コンパイラ インタプリタ 中間命令列 最適化器 中間命令列 (最適化後)

  4. コンパイル後の命令列ルール:a(X), b :- X>5 | ok. ヘッド データ a(3) a(1) ガード findatom [1, 0, a_1] findatom [2, 0, b_0] allocatom [3, 5_1] derefatom [4, 1, 0] isint [4] igt [4, 3] ・アトムは変数番号で管理する ・findatom命令 データの中からアトムを取得して, それ 以下の命令列(四角内)を実行する. 四角内で失敗すると外に戻る. → 直前のfindatomにバックトラック 問題点:ガード命令列が実行されるのが 遅い X > 5 (igt) で失敗するとbの取得からや り直す →実際にはa(X)の取得からやり直すべき. a(8) b b b

  5. 命令列の並び替えa(X), b :- X > 5 | ok. 並び替え前      並び替え後 findatom [①, 0, a_1] allocatom [③, 5_1] findatom [②, 0, b_0] findatom [①, 0, a_1] allocatom [③, 5_1] derefatom [④, 1, 0] derefatom [④, 1, 0] isint [4] isint [4] igt [4, 3] igt [4, 3] findatom [②, 0, b_0] ・ある変数番号を使う命令→ その変数番号を定義した命令の直後へ移動 (①・・・変数番号1が定義された所) 並び替えた結果・・・ ・X > 5で失敗するとすぐにa(X)の選び直し → バックトラックを改善できた 残る問題点:bの取得に失敗してもa(X)を 選び直す → bの取得に失敗した時点でルール適用 失敗のはず

  6. データ a(3) a(1) a(8) グループ化による解決策 • a(X), b どちらか一方でも取得できなくなったらルール適用失敗 このデータでは ルール適用失敗は                  決定的 • a(X), b :- X>5 |ok.においてはX>5である a(X)の取得と, bの取得は独立した処理. a(1)の代わりにa(3)を取得してもbの取得には影響しない • グループ化したルールのイメージ group[a(X), X>5], group[b] | ok. 独立した処理ごとに命令列を区切る

  7. グループ化後の命令列a(X), b :- X>5 | ok. False group [ spec [0, 0], allocatom [3, 5_1], findatom [1, 0, a_1], derefatom [4, 1, 0], isint [4], igt [4, 3], proceed [] ] group [ spec [0, 0], findatom [2, 0, b_0], proceed [] ] True False True グループ内の命令列を実行 成功:次のグループへ 失敗:その時点でルール適用失敗

  8. 性能評価a(A), b(B), c(C), d(D) :- A>B, C>D | ok. 測定環境 PentiumIII 845MHz メモリ: 256MB WindowsXP Home 最適化オプション Z0: 最適化無し Z1: 並び替え Z4: グループ化+Z1 A, B, C, D:ランダムな整数 Nab: a(A), b(B)の数 Ncd: c(C), d(D)の数 ルール適用開始から終了までの時間を計測 Nab=100, Ncd=100 Nab=200, Ncd=200 Nab=200, Ncd=400 Nab=400, Ncd=200

  9. 考察 ・各最適化レベルのルールのイメージ Z0: a(A), b(B), c(C), d(D) :- A>B, C>D | ok. Z1: a(A), b(B), A>B, c(C), d(D), C>D :- ok. Z4: group[a(A), b(B), A>B], group[c(C), d(D), C>D] | ok. ・あるタイミングでa(A), b(B)がNab’個, c(C), d(D)がNcd’個残っているとすると, その時 1回ルール適用を成功させるためのマッチング の回数(findatom命令の実行回数)は Z0: O(Nab’×Nab’×Ncd’×Ncd’ + Ncd’×Ncd’)回 Z1, Z4: O(Nab’×Nab’ + Ncd’×Ncd’)回 Z1とZ4の違いはグループ化の有無だが, ルール適用成功時のマッチングの回数は同じ. 差が生じるのはルール適用失敗(終了)時に次 の条件が満たされる場合. ・C>Dを満たすc(C), d(D)の組合わせはもう無 いがA>Bを満たすa(A), b(B)の組合わせが たくさん残っている場合 表ではNad=400, Ncd=200の時, この条件が成 立する可能性が高いため, Z1とZ4の差が顕著に 表れている.

  10. まとめと今後の課題 まとめ 実装した最適化とその効果 • 命令列の並び替え ・ガード検査を行うルールで有効. ・性能評価では最大で元の約902倍高速化. • 命令列のグループ化 ・ルールがいくつかの独立したパターンマッチング で成り立つ時, 各々のマッチングで失敗するタ イミングが大きく異なる場合に有効. ・性能評価ではグループ化の有無による差は, 最大で約166倍 今後の課題 • a(A), b(B), c(C), d(D) :- A>B, A>C, A>D | ok. → グループ化まで最適化すると group[a(A), b(B), A>B, c(C), A>C, d(D), A>D] | ok. A>Cに失敗するとc(C), b(B), a(A)の順にバックト ラック. 改善にはfindatom命令の仕様の変更と 新しいインタプリタの実装が必要.

More Related