# HG changeset patch # User Nobuyasu Oshiro # Date 1330335272 -32400 # Node ID 3922a95e99a8becd4d64ad84ba8859be365d6883 # Parent 150f0fc56205fa76e0317056e65cbe3a0503265f commit presen diff -r 150f0fc56205 -r 3922a95e99a8 paper/thesis.tex --- a/paper/thesis.tex Mon Feb 27 16:07:40 2012 +0900 +++ b/paper/thesis.tex Mon Feb 27 18:34:32 2012 +0900 @@ -83,6 +83,7 @@ %謝辞 \input{thanx.tex} + %参考文献 \nocite{*} \bibliographystyle{junsrt} diff -r 150f0fc56205 -r 3922a95e99a8 presen/cbc.md --- a/presen/cbc.md Mon Feb 27 16:07:40 2012 +0900 +++ b/presen/cbc.md Mon Feb 27 18:34:32 2012 +0900 @@ -3,46 +3,20 @@ --- -はじめに +研究の背景と成果 --------- .notes: plop -- 当研究室ではコードセグメント単位で記述するプログラミング言語Continuation based C (以下CbC)という言語を開発している。 -- コードセグメントは C の関数よりも細かな単位で、状態を表すことができる。 -- その為 CbC では状態遷移記述を行うことが出来、状態探索といったモデル検査等に使えると考えている。 - ---- - -研究の目的 ---------- - +- 当研究室ではコードセグメント単位で記述するプログラミング言語Continuation based C (以下CbC)という言語を提案している。 - CbC のコンパイラは Micro-C 版 と GCC ベース(以下 CbC-GCC)のコンパイラが開発されている。 - しかし, CbC-GCC はいくつかのバグがあり機能の修正の余地があった。 - また、GCC の最新の機能を使用するためにも CbC-GCC は GCC のアップデートに合わせていく必要がある。 -- 本研究では、GCC-4.5 をベースとしていた CbC-GCC を GCC-4.6 へのアップデートをすると共に実装の修正を行った。 + +

本研究では CbC-GCC のアップデートを行い、より良いコードを生成する CbC の処理系を開発した。

--- -発表内容 -======== - -.fx: foo bar - - - - ---- - - Continuation based C ======== コードセグメント単位での記述と継続を基本としたプログラミング言語 @@ -209,7 +183,7 @@ CbC の実装: Tail Call Elimination ======== -Tail Call Elimination の条件をチェックする expand_call関数 +Tail Call Elimination の条件をチェックする関数 --------- - 今までの実装では Tail Call Elimination の条件をクリアする為に専用の関数を用意していた。 - この専用関数は元々ある GCC コードを元に作成している為, アップデートに合わせて修正していく @@ -236,10 +210,11 @@ - +
  • GCC-4.5 では動かなかったプログラムが GCC-4.6 では問題なく動いている。
  • 引数 2、3 の結果はほぼ同じ
  • 引数 1 の結果では 32bit, 64bit 共に GCC-4.6 の方が 1.5倍以上早い
  • + --- @@ -257,13 +232,13 @@ - GCC-4.5
    の最適化 + GCC-4.5
    の最適化
    (-O2) - GCC-4.6
    の最適化 + GCC-4.6
    の最適化
    (-O2) @@ -312,6 +287,47 @@ --- +jmp と call +======== + + + +
    インライン展開無しの conv1 プログラム実行結果
    + +
    + +
  • 引数 0 は C の関数で書かれたプログラム
  • +
  • 引数 3 は引数 0 のプログラムをただ CbC に書き直したもの
  • + +--- + + +構文の追加 +======== +リカーシブタイプの宣言に使う"__rectype" +--------- +- 関数宣言時、以下のように引数に自分自身を指す型を入れたい。 +
    +\_\_code func(int, func*);
    +
    +- 上記の宣言ではエラーがでる。その為、以下のような宣言になる。
    +
    +\_\_code func(int, \_\_code (*)());
    +
    +- しかし、これでは正しい情報をコンパイラに渡せていない。関数ポインタの引数に型情報が入っていないからである。 +
    +\_\_code func(int, \_\_code (*)(int, \_\_code(*)(int, \_\_code(*)(int, ...))))
    +
    +- だが、正しい情報を渡そうとすると上記のように再帰してしまい、宣言できない。 +- そこで __rectype という構文を追加して宣言中の関数自身を指すようにした。 +
    +\_\_code func(int, rectype*);
    +
    + + +--- + + conv1 プログラム ======== - conv1 プログラムでは計算と継続を交互に繰り返し行なう。 diff -r 150f0fc56205 -r 3922a95e99a8 presen/presen.css --- a/presen/presen.css Mon Feb 27 16:07:40 2012 +0900 +++ b/presen/presen.css Mon Feb 27 18:34:32 2012 +0900 @@ -1,3 +1,2 @@ -.incremental { +.hideme, .incremental {visibility: hidden;} -} \ No newline at end of file diff -r 150f0fc56205 -r 3922a95e99a8 presen/presentation.html --- a/presen/presentation.html Mon Feb 27 16:07:40 2012 +0900 +++ b/presen/presentation.html Mon Feb 27 18:34:32 2012 +0900 @@ -85,15 +85,17 @@
    -

    はじめに

    +

    研究の背景と成果

    plop

      -
    • 当研究室ではコードセグメント単位で記述するプログラミング言語Continuation based C (以下CbC)という言語を開発している。
    • -
    • コードセグメントは C の関数よりも細かな単位で、状態を表すことができる。
    • -
    • その為 CbC では状態遷移記述を行うことが出来、状態探索といったモデル検査等に使えると考えている。
    • -
    +
  • 当研究室ではコードセグメント単位で記述するプログラミング言語Continuation based C (以下CbC)という言語を提案している。
  • +
  • CbC のコンパイラは Micro-C 版 と GCC ベース(以下 CbC-GCC)のコンパイラが開発されている。
  • +
  • しかし, CbC-GCC はいくつかのバグがあり機能の修正の余地があった。
  • +
  • また、GCC の最新の機能を使用するためにも CbC-GCC は GCC のアップデートに合わせていく必要がある。
  • + +

    本研究では CbC-GCC のアップデートを行い、より良いコードを生成する CbC の処理系を開発した。

    @@ -120,79 +122,6 @@
    -

    研究の目的

    - - -
      -
    • CbC のコンパイラは Micro-C 版 と GCC ベース(以下 CbC-GCC)のコンパイラが開発されている。
    • -
    • しかし, CbC-GCC はいくつかのバグがあり機能の修正の余地があった。
    • -
    • また、GCC の最新の機能を使用するためにも CbC-GCC は GCC のアップデートに合わせていく必要がある。
    • -
    • 本研究では、GCC-4.5 をベースとしていた CbC-GCC を GCC-4.6 へのアップデートをすると共に実装の修正を行った。
    • -
    - -
    -
    -

    Presenter Notes

    -
    - -
    -
    -
    - - - - -
    -
    -
    - - -
    -
    -
    - -

    発表内容

    - - -
      -
    • Continuation based C
    • -
    • CbC の実装(修正点)
    • -
        -
      1. Tail Call Elimination の強制付与
      2. -
      -
    • 性能評価
    • -
    • まとめ
    • -
    - -
    -
    -

    Presenter Notes

    -
    - -
    -
    -
    - - - - -
    -
    -
    - - -
    -
    -
    -

    Continuation based C

    @@ -225,7 +154,7 @@
    @@ -284,7 +213,7 @@
    @@ -348,7 +277,7 @@
    @@ -407,7 +336,7 @@
    @@ -450,7 +379,7 @@ @@ -464,7 +393,7 @@

    CbC の実装: Tail Call Elimination

    -

    Tail Call Elimination の条件をチェックする expand_call関数

    +

    Tail Call Elimination の条件をチェックする関数

    • 今までの実装では Tail Call Elimination の条件をクリアする為に専用の関数を用意していた。
    • この専用関数は元々ある GCC コードを元に作成している為, アップデートに合わせて修正していく @@ -487,7 +416,7 @@ @@ -513,6 +442,8 @@ +
    • GCC-4.5 では動かなかったプログラムが GCC-4.6 では問題なく動いている。
    • +
    • 引数 2、3 の結果はほぼ同じ
    • 引数 1 の結果では 32bit, 64bit 共に GCC-4.6 の方が 1.5倍以上早い
    @@ -531,7 +462,7 @@ @@ -557,13 +488,13 @@ - GCC-4.5
    の最適化 + GCC-4.5
    の最適化
    (-O2) - GCC-4.6
    の最適化 + GCC-4.6
    の最適化
    (-O2) @@ -584,7 +515,7 @@ @@ -619,7 +550,7 @@ @@ -653,7 +584,7 @@ @@ -693,6 +624,93 @@ + + + + + +
    +
    +
    + +

    jmp と call

    + + +

    + + +
    インライン展開無しの conv1 プログラム実行結果
    + +

    +
  • 引数 0 は C の関数で書かれたプログラム
  • + +
  • 引数 3 は引数 0 のプログラムをただ CbC に書き直したもの
  • + +
    +
    +

    Presenter Notes

    +
    + +
    +
    +
    + + + + +
    +
    +
    + + +
    +
    +
    + +

    構文の追加

    + + +

    リカーシブタイプの宣言に使う"__rectype"

    +
      +
    • 関数宣言時、以下のように引数に自分自身を指す型を入れたい。 +
      +__code func(int, func*);
      +
    • +
    • 上記の宣言ではエラーがでる。その為、以下のような宣言になる。 +
      +__code func(int, __code (*)());
      +
    • +
    • しかし、これでは正しい情報をコンパイラに渡せていない。関数ポインタの引数に型情報が入っていないからである。 +
      +__code func(int, __code ()(int, __code()(int, __code(*)(int, ...))))
      +
    • +
    • だが、正しい情報を渡そうとすると上記のように再帰してしまい、宣言できない。
    • +
    • そこで __rectype という構文を追加して宣言中の関数自身を指すようにした。 +
      +__code func(int, rectype*);
      +
    • +
    + +
    +
    +

    Presenter Notes

    +
    + +
    +
    + @@ -1028,19 +1046,20 @@ - はじめに + 研究の背景と成果 2 - - 研究の目的 - 3 - - + + Continuation based C + 3 + + + - 発表内容 + Continuation based C 4 @@ -1052,61 +1071,61 @@ - Continuation based C + CbC の実装 : Tail Call Elimination 6 - Continuation based C + CbC の実装: Tail Call Elimination 7 - CbC の実装 : Tail Call Elimination + CbC の実装: Tail Call Elimination 8 - CbC の実装: Tail Call Elimination + 性能評価 9 - CbC の実装: Tail Call Elimination + 最適化の比較 10 - 性能評価 + GCC の最適化 11 - 最適化の比較 + アップデートに合わせる有用性 12 - GCC の最適化 + まとめ 13 - アップデートに合わせる有用性 + jmp と call 14 - まとめ + 構文の追加 15