# HG changeset patch # User Nobuyasu Oshiro # Date 1330435863 -32400 # Node ID ad0ab1378ae64c87611854ea1d5fa30b58ac6cbe # Parent a6540714dda92fb0f1ff120db696ed6dd30fcebc commit diff -r a6540714dda9 -r ad0ab1378ae6 presen/cbc.md --- a/presen/cbc.md Tue Feb 28 20:01:28 2012 +0900 +++ b/presen/cbc.md Tue Feb 28 22:31:03 2012 +0900 @@ -9,9 +9,6 @@ .notes:
  • 状態遷移記述をベースとしたより細かい単位でのプログラミングを実現する
  • -- 組込みソフト、Real-time処理、通信プロトコル記述、どれも状態遷移ベース -- 現存する記述言語は状態遷移の記述に向いていない -- スタックが状態を隠蔽するため、分割しにくい、検証が難しい - 本研究室ではコードセグメント単位で記述するプログラミング言語Continuation based C (以下CbC)という言語を提案している。 - CbC のコンパイラは Micro-C 版 と GCC 版(以下 CbC-GCC) が開発されている。 - しかし, CbC-GCC はいくつかのバグがあり機能に修正の余地があった。 @@ -189,40 +186,17 @@ --- -CbC の実装: Tail Call Elimination +CbC の実装: 末尾除去の強制 ======== -Tail Call Elimination の条件 ---------- - - -条件回避の為の実装 +末尾除去の条件をチェックする関数 --------- - - ---- - - -CbC の実装: Tail Call Elimination -======== -Tail Call Elimination の条件をチェックする関数 ---------- -- 今までの実装では Tail Call Elimination の条件をクリアする為に専用の関数を用意していた。 -- この専用関数は元々ある GCC コードを元に作成している為, アップデートに合わせて修正していく -必要があった。 +- 関数が末尾除去にかかる為には幾つか条件があり、その条件はある関数によってチェックされる。 +- その関数を元に、『コードセグメントは末尾除去』にかける専用の関数を用意していた。 +- しかしこの方法は、元になった関数が修正に合わせて専用の関数も修正を行う必要があった。 実装の修正とその利点 --------- -- しかし, 今回の実装でその関数を無くし, Tail Call Elimination のフラグを強制的に立たせる実装に変更。 +- しかし, 今回の実装でその関数を無くし, 末尾除去のフラグを強制的に立たせる実装に変更。 - 専用関数がなくなったことで、今後より楽なアップデートを行なっていくことができるようになった。 - また、コードセグメントへの継続が jmp ではなく call 命令で行われるバグがあったが修正できた。 @@ -254,7 +228,7 @@
  • Mac の GCC-4.5 では動かなかった 32bit のプログラムが GCC-4.6 では問題なく動いている。
  • -
  • 引数 2、3 の結果はほぼ同じ
  • +
  • 引数 2、3 は手動で最適化をかけている。
  • 引数 1 の結果では 32bit, 64bit 共に GCC-4.6 の方が 1.5倍以上早い
  • @@ -357,6 +331,47 @@ --- +CbC +======== +
  • 状態遷移記述をベースとしたより細かい単位でのプログラミングを実現する
  • +- 組込みソフト、Real-time処理、通信プロトコル記述、どれも状態遷移ベース +- 現存する記述言語は状態遷移の記述に向いていない +- スタックが状態を隠蔽するため、分割しにくい、検証が難しい +- 以上の問題を解決する言語として CbC は提案されている。 + +具体的な CbC の利用予定 +--------- +- モデル検査 +- Cerium の実装 + +--- + +Tail Call Elimination +======== +関数が Tail Call Elimination にかかる条件 +--------- + + +条件回避の為の CbC の実装内容 +--------- + + +--- + + + + + jmp と call ======== diff -r a6540714dda9 -r ad0ab1378ae6 presen/presentation.html --- a/presen/presentation.html Tue Feb 28 20:01:28 2012 +0900 +++ b/presen/presentation.html Tue Feb 28 22:31:03 2012 +0900 @@ -70,7 +70,7 @@ @@ -88,9 +88,6 @@
  • 状態遷移記述をベースとしたより細かい単位でのプログラミングを実現する
  • - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1367,6 +1403,12 @@ + + + + + +
    CbC の実装: Tail Call EliminationCbC の実装: 末尾除去の強制 8
    CbC の実装: Tail Call EliminationGCC-4.5, GCC-4.6 の性能比較 9
    GCC-4.5, GCC-4.6 の性能比較GCC-4.6 の最適化 10
    GCC-4.6 の最適化最適化の比較 11
    最適化の比較最新バージョンに合わせる有用性 12
    最新バージョンに合わせる有用性まとめ 13
    まとめCbC 14
    jmp と callTail Call Elimination 15
    conv1 プログラムjmp と call 16
    CbC-GCC のアップデート手法conv1 プログラム 17
    構文の追加CbC-GCC のアップデート手法 18
    conv1 プログラム構文の追加 19
    CbC の実装: 環境付き継続conv1 プログラム 20
    CbC 引数渡しCbC の実装: 環境付き継続 21
    引数の並びに上書きコピーCbC 引数渡し 22
    最適化の比較引数の並びに上書きコピー 23
    最適化の比較25