LMNtalからC言語への変換の設計と実装

Slides:



Advertisements
Similar presentations
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
Advertisements

Chapter11-4(前半) 加藤健.
ネットワークを利用した 環境情報データ自動収集 サーバシステムの開発
JavaによるCAI学習ソフトウェアの開発
言語処理系(4) 金子敬一.
LMNtalからC言語への変換の設計と実装
オブジェクト指向言語論 知能情報学部 新田直也.
LMNtalからC言語への変換の設計と実装
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
App. A アセンブラ、リンカ、 SPIMシミュレータ
侵入検知システム(IDS) 停止 IDS サーバへの不正アクセスが増加している
プログラミング言語論 理工学部 情報システム工学科 新田直也.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
情報科学1(G1) 2016年度.
MATLAB測位プログラミングの 基礎とGT (1)
Curlの仕組み.
①データ構造 ②アルゴリズム ③プログラム言語 ④マークアップ言語
プログラムはなぜ動くのか.
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
Day3 Day4 Day3 Day4.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
Javaプログラムの実行まで バイト Javaの コード 実行 ソースコード Java ファイル名 ファイル名 abc.java
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
進捗 Javaバイトコード変換による 細粒度CPU資源管理
コンパイラの解析 (2) GCJのデータ構造 - 1.
OpenMPハードウェア動作合成システムの検証(Ⅰ)
高速剰余算アルゴリズムとそのハードウェア実装についての研究
FlexとBison+アルファ -実習編-
独立大学法人・電気通信大学 大学院情報システム学研究科 情報ネットワーク学専攻・並列処理学講座
ゲーム開発モデルの基礎.
通信機構合わせた最適化をおこなう並列化ンパイラ
プログラミング基礎a 第1回 ハードウェアとソフトウェア プログラミング総論 ~プログラミング言語とは~
動的データ依存関係解析を用いた Javaプログラムスライス手法
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
先進的計算基盤システムシンポジウム SACSIS2007併設企画 マルチコアプログラミングコンテスト 「Cellスピードチャレンジ2007」
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
プログラミング基礎a 第1回 ハードウェアとソフトウェア プログラミング総論 ~プログラミング言語とは~
バイトコードを単位とするJavaスライスシステムの試作
Javaへの変換による 安全なC言語の実装
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
B演習(言語処理系演習)第2回 田浦.
JNIを利用したSLIMと他のLMNtalプロダクトとの連携の調査
JAVAバイトコードにおける データ依存解析手法の提案と実装
プログラミング言語入門 2013 (C言語 初級) 演習期間 担当 参考資料 採点 10/24 - 1/23 (全10回) 松澤,鈴木,児玉
明星大学 情報学科 2012年度前期     情報技術Ⅰ   第1回
参照されないリテラル 長谷川啓
コンパイラ 2012年10月1日
コンピュータアーキテクチャ 第 10 回.
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
同期処理のモジュール化を 可能にする アスペクト指向言語
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
コンピュータアーキテクチャ 第 5 回.
プログラム分散化のための アスペクト指向言語
統合開発環境のための プログラミング言語拡張 フレームワーク
第6回放送授業.
コンパイラ 2012年10月11日
知識ベースの試作計画 ●●●研究所 ●●●技術部 稲本□□ 1997年1月.
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
明星大学 情報学科 2014年度前期     情報技術Ⅰ   第1回
並列処理プロセッサへの 実数演算機構の開発
プログラミング演習II 2003年11月19日(第6回) 木村巌.
1.2 言語処理の諸観点 (1)言語処理の利用分野
第1章 文字の表示と計算 printfと演算子をやります.
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

LMNtalからC言語への変換の設計と実装 研究の背景・目的 1G04R013 石川 力 高速なLMNtal実行環境を得ること Java言語による実行時処理系の実装 それを利用するJava言語ソースコードへの変換 C言語による実行時処理系(SLIM)の再設計・実装 それを利用するC言語ソースコードへの変換 (今回のテーマ) 変換器(トランスレータ)の役割 LMNtalプログラム 中間命令列を同じ挙動をする C言語ソースコードに変換 コンパイル後インタプリタの オブジェクトファイルとリンク 中間命令列(参考) LMNtalコンパイラ このルールのマッチング・書き換えは次のような細粒度の命令列に変換できる a b ⇒ a c トランスレータ 中間命令列 a b マッチング始点を選択 リンク先を参照 リンク先の種類を確認 アトムの生成 リンクの繋ぎ替え アトムの削除 インタプリタ(実行時処理系) (1) a (4) C言語ソースコード c (機能を利用) 階層グラフ構造の操作 ルール実行の制御 etc ・・・ (2) a (5) a b C言語コンパイラ c (3) a b (6) a c 実行ファイル 実行結果 この細粒度の命令列を中間命令列と呼んでいる 変換の様子 変換前 変換後 変換前ルール群 変換後ルール群 :- :- :- :- 変換後ルール(C言語関数) 変換前ルール(中間命令列) int trans_rule_1_0(LmnMembrane *TRANS_DATA(0), long TRANS_ATTR(0))‏ { spec [1, 5] findatom [1, 0, 'y'_1] deref [2, 1, 0, 0] func [2, 'x'_1] commit [null, 0] dequeueatom [1] dequeueatom [2] removeatom [1, 0, 'y'_1] removeatom [2, 0, 'x'_1] newatom [3, 0, 'z'_1] newatom [4, 0, 'x'_1] newlink [3, 0, 4, 0, 0] enqueueatom [4] enqueueatom [3] freeatom [1] freeatom [2] proceed [] long TRANS_DATA(1), TRANS_ATTR(1), a1; AtomListEntry *i1; func [ 2, 'x'_1 ] ・・・・・・・ if(TRANS_ATTR(2)!=7) continue; a2 = trans_aritys[7]; func [    ,    ] lmn_mem_remove_atom(TRANS_DATA(0), TRANS_DATA(1), TRANS_ATTR(1)); if(TRANS_ATTR(   )!=    ) $$f; a    = trans_aritys[   ]; lmn_mem_remove_atom(TRANS_DATA(0), TRANS_DATA(2), TRANS_ATTR(2)); a3 = trans_aritys[8]; TRANS_ATTR(3) = 8; TRANS_DATA(3) = (LmnWord)lmn_new_atom(TRANS_ATTR(3)); lmn_mem_push_atom(TRANS_DATA(0), TRANS_DATA(3), TRANS_ATTR(3)); 中間命令のテンプレート ・・・・・・・ } 各中間命令について処理 速度性能比較 まとめ・今後の課題 SLIMトランスレータ 100倍 SLIM インタプリタ SLIMを利用したC言語ソースコードへのトランスレータを作成し、高速なLMNtal実行環境を得た C言語とは言ってもプログラムの挙動はグラフマッチングと書き換えで動作するモデルであり、C言語らしいものではない これをより効率的な動作をするように改良していくことが今後の課題である Javaによるトランスレータ Java版実行時処理系インタープリット実行での性能を 1としたときのグラフ gen : アトムを単純に生成削除する quicksort : 逆順クイックソート jos : Josephus(ヨセフス)の問題 (リンク繋ぎ替えを多用) lambda : LMNtalにエンコードされたChurch数の累乗演算(総合的な例)

研究の背景・目的 ルールによるマッチング・書き換えの実行 イメージ LMNtalプログラム実行の様子 高速なLMNtal実行環境を得ること 中間命令列 Java言語による実行時処理系の実装 それを利用するJava言語ソースコードへの変換 C言語による実行時処理系の再設計・実装 それを利用するC言語ソースコードへの変換 (今回のテーマ) 中間命令列とは、グラフを操作するための粒度の小さい命令セットである 以下の例は概念を示すためのもので実際の中間命令列とは異なっている (1)‏ findatom [1, 0, 'a'_1] グラフの始点を選ぶ (2)‏ deref [2, 1, 0, 0] リンクをたどる (3)‏ func [2, 'b'_1] アトムの種類を確認する (4)‏ newatom [3, 0, 'c'_1] 新しいアトムを生成する (5)‏ newlink [1, 0, 3, 0] リンクを張る (6)‏ freeatom [2] アトムを消す ルールによるマッチング・書き換えの実行 イメージ a b ⇒ a c の場合 a b マッチング始点を選択 リンク先を参照 リンク先の種類を確認 アトムの生成 リンクの繋ぎ替え アトムの削除 (4) (1) a c LMNtalプログラム実行の様子 (2) a a b (5) c (3) a b y a c c n y c a c n y c c a n (6) a c s t s t s t c c n c c n c c n ルールは細粒度のグラフ操作の命令列(中間命令列)として実行 ルール1 ルール1 u v u v u v ルール1 ルール2 Y a c T Y c a T Y a n Y ⇒ ⇒ B H H B B B グラフ書き換えで計算を進めるため 性能向上のためにはグラフ表現・操作の効率化が重要

変換の様子 中間命令列(参考) 変換後 変換前 変換後ルール群 変換前ルール群 変換後ルール(C言語関数) 変換前ルール(中間命令列) int trans_rule_1_0(LmnMembrane *TRANS_DATA(0), long TRANS_ATTR(0))‏ { spec [1, 5] findatom [1, 0, 'y'_1] deref [2, 1, 0, 0] func [2, 'x'_1] commit [null, 0] dequeueatom [1] dequeueatom [2] removeatom [1, 0, 'y'_1] removeatom [2, 0, 'x'_1] newatom [3, 0, 'z'_1] newatom [4, 0, 'x'_1] newlink [3, 0, 4, 0, 0] enqueueatom [4] enqueueatom [3] freeatom [1] freeatom [2] proceed [] long TRANS_DATA(1), TRANS_ATTR(1), a1; AtomListEntry *i1; func [ 2, 'x'_1 ] ・・・・・・・ if(TRANS_ATTR(2)!=7) continue; a2 = trans_aritys[7]; func [    ,    ] lmn_mem_remove_atom(TRANS_DATA(0), TRANS_DATA(1), TRANS_ATTR(1)); if(TRANS_ATTR(   )!=    ) $$f; a    = trans_aritys[   ]; lmn_mem_remove_atom(TRANS_DATA(0), TRANS_DATA(2), TRANS_ATTR(2)); a3 = trans_aritys[8]; TRANS_ATTR(3) = 8; TRANS_DATA(3) = (LmnWord)lmn_new_atom(TRANS_ATTR(3)); lmn_mem_push_atom(TRANS_DATA(0), TRANS_DATA(3), TRANS_ATTR(3)); 中間命令のテンプレート ・・・・・・・ } 各中間命令について処理 中間命令列(参考) このルールのマッチング・書き換えは次のような細粒度の命令列に変換できる a b ⇒ a c a b マッチング始点を選択 リンク先を参照 リンク先の種類を確認 アトムの生成 リンクの繋ぎ替え アトムの削除 (1) a (4) c (2) a (5) a b c (3) a b (6) a c この細粒度の命令列を中間命令列と呼んでいる

LMNtalからC言語への変換の設計と実装 1G04R013 石川 力