# HG changeset patch # User mir3636 # Date 1487204358 -32400 # Node ID 8644cade9765730b6632fcdeb773f2631cca7cb0 # Parent 327435666caa8046fd8e6240d6d2428e7f177e41 update diff -r 327435666caa -r 8644cade9765 presen/index.html --- a/presen/index.html Thu Feb 16 08:14:21 2017 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,248 +0,0 @@ - - - - - Presentation - - - - - - - - -
- - -
-

Implementation of CbC compiler on LLVM/clang 3.5

-

Kaito Tokumori  27 Feb 2014

-
Teacher : Shinji Kono
-
- -
-

Introduction of CbC

- -
- -
-

CbC compilers

- -
- -
-

LLVM/clang??

-
-

What??

- -

Why??

- -
- -
-

Basic strategy of implementation

- -
- -
-

Problems

- - -
- -
-

Solution

-
define fastcc void @factorial(i32 %x) #0 {
-entry:
-  tail call fastcc void @factorial0(i32 1, i32 %x)
-  ret void
-}
- -
- -
-

Structure of LLVM/clang

-
-
- -
-

Implementation on parser

-
- -
- -
-

Implementation on parser

-
- -
- -
-

Implementation on code generator

-
- -
- - -
-

Compiling result

- - - - - - - -
-
__code factorial(int x)
-{
-  goto factorial0(1, x);
-}
-
-
-
_factorial:               ## @factorial
-    .cfi_startproc
-## BB#0:                ## %entry
-    pushq    %rbp
-Ltmp12:
-    .cfi_def_cfa_offset 16
-Ltmp13:
-    .cfi_offset %rbp, -16
-    movq    %rsp, %rbp
-Ltmp14:
-    .cfi_def_cfa_register %rbp
-    movl    $1, %eax
-    movl    %edi, -4(%rbp)      ## 4-byte Spill
-    movl    %eax, %edi
-    movl    -4(%rbp), %esi      ## 4-byte Reload
-    popq    %rbp
-    jmp    _factorial0       ## TAILCALL
-    .cfi_endproc
-
- -
- -
-

Benchmark result

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
no optimized codeoptimized code Aoptimized code B
Micro-C6.06 s2.21 s2.40 s
GCC -O21.59 s1.02 s0.99 s
LLVM -O25.52 s3.95 s4.64 s
- -
- -
-

Conclusion

- -

Future

- -
- - - diff -r 327435666caa -r 8644cade9765 presen/slide.html --- a/presen/slide.html Thu Feb 16 08:14:21 2017 +0900 +++ b/presen/slide.html Thu Feb 16 09:19:18 2017 +0900 @@ -87,7 +87,7 @@ @@ -106,6 +106,7 @@

Code Gear と Data Gear

@@ -150,7 +151,7 @@

Context

@@ -213,7 +214,7 @@
Stack* createSingleLinkedStack(struct Context* context) {
     struct Stack* stack = new Stack();
@@ -235,7 +236,7 @@
 
 
-

Context、stub Code Segment の自動生成

+

Context、stub Code Gear の自動生成

  • Gears OS では通常の計算の他に Context や stub などの meta computation を記述する必要がある。
  • 現在の CbC で Gears OS を記述すると、この meta computation の記述も行わなくてはならず、これには多くの労力を要する。
  • @@ -246,10 +247,26 @@
-

generate context

+

stub Code Gear の生成

    -
  • generate_stub は指定された cbc ファイルの __code型である Code Gear を取得
  • -
  • generate_context は context.h から Data Gear、c ファイルから Code Gear の取得 +
  • stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。
  • +
  • stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。
  • +
  • generate_stub は指定された cbc ファイルの __code型である Code Gear を取得。
  • +
  • 引数と interface を照らし合わせ、Gearef または GearImpl を決定する。
  • +
  • cbc ファイルのから、生成した stub Code Gear を加えて、c ファイルを生成する。
  • +
+ + +
+
+ +

Context の生成

+
    +
  • Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。
  • +
  • generate_context は context.h から Data Gear、c ファイルから Code Gear を取得。
  • +
  • 取得した Code/Data Gear の enum の定義は enumCode.h、enumData.h に生成される。
  • +
  • generate_context は取得した Code/Data Gear から Context の生成を行うコードを生成する。
  • +
  • これらを自動生成することで Gears OS の記述量を約半分にすることができます。 message
diff -r 327435666caa -r 8644cade9765 presen/slide.md --- a/presen/slide.md Thu Feb 16 08:14:21 2017 +0900 +++ b/presen/slide.md Thu Feb 16 09:19:18 2017 +0900 @@ -11,6 +11,7 @@ - そこで当研究室では Meta Computation を柔軟に記述するためのプログラミング言語の単位として Code Gear、Data Gear という単位を提案している。 # Code Gear と Data Gear +- Code Gear とはプログラムの処理の単位である。 - Code Gear は関数に比べて細かく分割されているので Meta Computation をより柔軟に記述できる。 - Data Gear はデータの単位であり、Code Gear は 任意の数の Input Data Gear を参照して処理を行い、Output Data Gear を出力し処理を終える。 @@ -38,7 +39,7 @@ - Meta Code Gear で OS の 機能であるメモリ管理やスレッド管理を行う。 # Context -- Gears OS では Context と呼ばれる接続可能な Code/Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。 +- Gears OS には Context と呼ばれる接続可能な Code/Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。 - Gears OSは必要なCode/DataGearに参照したい場合、このContext を通す必要がある。 # Gearef、GearImpl @@ -84,7 +85,7 @@ # interface の記述 - interface を記述することで Context を通して Code Gear が参照できるようになった。 - create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。 -- return で interface を返し、その先で指定した Code Gear へ継続できるようになる。 +- return で interface を返し、その先で inter face の持つ Code Gear へと継続できるようになる。 ```impl Stack* createSingleLinkedStack(struct Context* context) { struct Stack* stack = new Stack(); @@ -102,14 +103,24 @@ } ``` -# Context、stub Code Segment の自動生成 +# Context、stub Code Gear の自動生成 - Gears OS では通常の計算の他に Context や stub などの meta computation を記述する必要がある。 - 現在の CbC で Gears OS を記述すると、この meta computation の記述も行わなくてはならず、これには多くの労力を要する。 - この記述を助けるために Context を生成する generate_context と stub Code Gear を生成する generate_stub を perl スクリプトで作成した。 -# generate context -- generate\_stub は指定された cbc ファイルの \_\_code型である Code Gear を取得 -- generate\_context は context.h から Data Gear、c ファイルから Code Gear の取得 +# stub Code Gear の生成 +- stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。 +- stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。 +- generate_stub は指定された cbc ファイルの __code型である Code Gear を取得。 +- 引数と interface を照らし合わせ、Gearef または GearImpl を決定する。 +- cbc ファイルのから、生成した stub Code Gear を加えて、c ファイルを生成する。 + +# Context の生成 +- Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。 +- generate_context は context.h から Data Gear、c ファイルから Code Gear を取得。 +- 取得した Code/Data Gear の enum の定義は enumCode.h、enumData.h に生成される。 +- generate_context は取得した Code/Data Gear から Context の生成を行うコードを生成する。 +- これらを自動生成することで Gears OS の記述量を約半分にすることができます。 message # 今後の課題