部分評価の紹介 An Introduction to Partial Evaluation (Neil D. Jones, ACM Computing Survey Vol.28 No.3 Sep. 1996) 発表者:神戸.

Slides:



Advertisements
Similar presentations
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Advertisements

OWL-Sを用いたWebアプリケーションの検査と生成
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
クラスタの構成技術と クラスタによる並列処理
Chapter11-4(前半) 加藤健.
SHA-1の高速化tips 2007/9/15
コンパイラ 2011年10月17日
LMNtalからC言語への変換の設計と実装
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
伺か with なでしこ 発表者:しらたま /05/05 うかべん大阪#3.
LMNtalからC言語への変換の設計と実装
スペクトル法による数値計算の原理 -一次元線形・非線形移流問題の場合-
LMNtalからC言語への変換の設計と実装
「データ学習アルゴリズム」 第3章 複雑な学習モデル 3.1 関数近似モデル ….. … 3層パーセプトロン
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
データ構造と アルゴリズム 第二回 知能情報学部 新田直也.
変数のスコープの設計判断能力 を育成するプログラミング教育
コンパイラ 2012年10月15日
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
高山建志 五十嵐健夫 テクスチャ合成の新たな応用と展開 k 情報処理 vol.53 No.6 June 2012 pp
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
コンピュータの原理 1E17M053-9 奈良 皐佑 1E17M070-7 師尾 直希        1E17M078-6 渡邊 惇.
チューリング機械 状態の有限集合 ヘッドの方向を表す。 L:1コマ左へ R:1コマ右へ テープ記号の有限集合 入力記号の有限集合 動作関数
型付きアセンブリ言語を用いた安全なカーネル拡張
プログラミング言語入門 手続き型言語としてのJava
高速剰余算アルゴリズムとそのハードウェア実装についての研究
FlexとBison+アルファ -実習編-
暗黙的に型付けされる構造体の Java言語への導入
動的依存グラフの3-gramを用いた 実行トレースの比較手法
関数の定義.
最適化の方法 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第11章.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
Java Bytecode Modification and Applet Security
平成30年度高知工科大学教職科目 微分方程式特論I 11 高知大学教育学部技術教育コース 北川 晃.
巡回冗長検査CRC32の ハード/ソフト最適分割の検討
国立情報学研究所 ソフトウェア研究系 助教授/
パソコンのしくみ ハードウェア OS(Operating System) アプリケーション NEC DOS
通信機構合わせた最適化をおこなう並列化ンパイラ
プログラミング基礎a 第1回 ハードウェアとソフトウェア プログラミング総論 ~プログラミング言語とは~
動的データ依存関係解析を用いた Javaプログラムスライス手法
Talkプログラムのヒント 1 CS-B3 ネットワークプログラミング  &情報科学科実験I.
Fortranについて 高エネルギー加速器研究機構 平山 英夫.
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
情報システム1及び演習 第一回 データベースの概要.
物体検出による視覚補助システム T215085 若松大仁 白井研究室.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
コンパイラ 2011年10月20日
わかりやすいパターン認識 第7章:部分空間法  7.1 部分空間法の基本  7.2 CLAFIC法                  6月13日(金)                  大城 亜里沙.
手書き文字の自動認識アプリケーション 15K1013 坂本 倖輝
コンパイラ 2012年10月1日
補講:アルゴリズムと漸近的評価.
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
ガイダンス 電子計算機 電気工学科 山本昌志 1E
米澤研究室 全体ミーティング 2010/07/07 M2 渡邊裕貴.
プログラミング言語論 第10回 情報工学科 篠埜 功.
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
Eijiro Sumii and Naoki Kobayashi University of Tokyo
第6回放送授業.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
情報処理Ⅱ 2007年12月3日(月) その1.
コンパイラ 2012年10月11日
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
情報処理Ⅱ 2005年11月25日(金).
1.2 言語処理の諸観点 (1)言語処理の利用分野
Josh : バイトコードレベルでのJava用 Aspect Weaver
プログラミング 2 静的変数.
Presentation transcript:

部分評価の紹介 An Introduction to Partial Evaluation (Neil D. Jones, ACM Computing Survey Vol.28 No.3 Sep. 1996) 発表者:神戸

基本的なアイディア 汎用的なプログラムを様々な用途で高速に動作させたい 用途に合わせて入力を静的な部分と動的な部分に分割 静的な部分を事前に計算 特殊化した専用のプログラムを作成

Partial Evaluator

例:べき乗計算

Partial Evaluationの実際 Annotation:プログラムを分割してマーク Binding Analysis Partial Evaluation:評価の実行 記号計算(symbolic computation) 展開(unfolding) プログラム・ポイント特殊化(program point specialization) 定義生成(definition creation) 畳み込み(folding)

Annotation 式 引数 Eliminable: 部分評価により削除可能 Residual: 部分評価後も残留 Static: 静的引数 Dynamic: 動的引数

Annotationの満たすべき条件 合同条件(congruence condition) プログラムの適切な部分がannotateされる。 最低限、削除可能とマークされた全ての引数と演算については、ありえる全ての静的な入力について特殊化できることが保証されること 終了条件(termination condition) 静的な入力の値に関わらず特殊化が終了すること(無限に沢山の関数や式が出力されない)

Partial Evaluation (アルゴリズムの詳細はレジュメ)

OfflineとOnline オフライン特殊化(offline specialization) Annotation→Partial Evaluationの2ステップ オンライン特殊化(online specialization) 2ステップと限らず評価中に分かった情報でさらに特殊化 長所:特殊化後の速度効率の向上 短所:特殊化の処理時間増加、停止性

特殊化の弱点の例 例: べき乗の例でxが分かっていてもさして高速化の足しにはならない 例: インタプリタの特殊化で生成されたプログラムはインタプリタの出来に左右される。(例えば動的にサーチして変数名の束縛を行う場合や、動的にソースを生成する場合はターゲットでもそうなる。)

特殊化が向いている計算 時間が掛かる処理 繰り返し行われる処理 似たようなパラメタで何度も行われる処理 構造化され明快に書かれたプログラム(そうでなければ人間だけでなく特殊化プログラムにとっても扱い難い) 高レベルなアプリケーション志向言語で書かれたプログラム

例:プログラム・ジェネレーター インタプリタによる言語定義(レジュメの図5) 正規表現の認識(レジュメの図6と図7) インタプリタを静的入力、プログラムを動的入力として特殊化 インタプリタ実装言語によるプログラムへ変換 正規表現の認識(レジュメの図6と図7) rexをインタプリタ、正規表現をソース、と考えて特殊化 与えられた正規表現(例えば(a+b)*abb)を受理する有限オートマタになっている

コンパイラとインタプリタの得失 インタプリタ コンパイラ プログラミング 小さく簡単 (一個の言語に対する動作を一度だけ考えればよい) 大きく難しい (ソース言語での動作と生成されたターゲット言語での動作の双方を考えねばならない) 言語定義 高級言語で直接に操作的意味付けをしながら定義できる 効率 実行毎に解釈のオーバーヘッド 一般にコンパイル済みのコードは高速に実行可。 1フェーズ目で大局的な情報を利用して2フェーズ目のプログラム最適化が可能

コンパイラとインタプリタ [[src]]S d = [[interpreter]]L [src, d] [[src]]S d = [[ [[compiler]]L src]]T d

例:インタプリタの特殊化

例: プログラム・ジェネレータの生成 特化されたプログラムと比べて経験上遅すぎるために極端に一般的なプログラムは滅多に利用されない 例: specification executers 実行可能仕様の直接性や簡潔さと、プログラムジェネレータ(コンパイラやパーサ)により生成された実行可能プログラムの効率性を両立したい

プログラム・ジェネレータの生成(図)

プログラム生成に関する性質 mixに成り立つ等式から導ける性質 第1二村Projection (インタプリタをあるソースに特化): tgt = [[mix]] [int, src] 第2二村Projection (mixをあるインタプリタに特化) : comp = [[mix]] [mix, int] 第3二村Projection (mixをmixに特化) : cogen = [[mix]] [mix, mix] (直接mixを利用するより自己適用して作ったコンパイラやコンパイラ・コンパイラを利用する方が10倍程度変換が早いことが経験的に知られている。)

プログラムの自動生成 プログラミング・スタイルの変換 メタ言語の階層 Semantic-directedなコンパイラ生成 実行可能な仕様

その他の例 パターン認識 コンピューター・グラフィクス データベースへの問い合わせ ニューラル・ネット 表計算 汎用の正規表現認識プログラム→特定の正規表現 コンピューター・グラフィクス レイ・トレーシング→特定のシーン データベースへの問い合わせ 問い合わせ言語→特定目的の問い合わせ(他) ニューラル・ネット →特定のネットワーク・トポロジーで学習を高速化 表計算 対話的な表計算プログラム→特定目的

効率と汎用性とモジュラ性 効率のよいプログラムを沢山書く 効率は悪いが汎用でパラメタ化可能なプログラムを1つ書く → 汎用に書いて興味のある目的に特殊化 界面でオーバーヘッドがあるけれどモジュール化された扱いやすいプログラム 界面が少なく効率がよいが一枚岩で扱い難いプログラム → モジュール化して書き、特殊化によって界面のオーバーヘッドを除去

結論 部分計算とself-applicationは多くの応用があり、プログラム・ジェネレータの生成(コンパイラ、コンパイラ・ジェネレータ、プログラム変換系)に役立つ。

この分野でよく発生する問題 部分計算の停止性 入力プログラムに対する特殊化済プログラムの意味論的忠実性(faithfulness) 停止性、バック・トラック、結果の正当性、他 特殊化による高速化度合いの予想困難性 高速化のためのプログラム修正の困難性

今後の課題 部分評価系を利用しやすくする どの程度の高速化が可能なのかを理解する 特殊化を行う前に高速化の効果とメモリ使用量を予測する 型付き言語における特殊化を改良する コードの爆発的増加を(自動的に)回避する インタプリタで定義されたソース言語向けに、キチンとしたマシン・アーキテクチャを生成する

個人的なメモ 結局静的/動的の区別が問題 Binding Analysisについて調べる 型との関連を調べる