changeset 26:8644cade9765

update
author mir3636
date Thu, 16 Feb 2017 09:19:18 +0900
parents 327435666caa
children f38236c1362e
files presen/index.html presen/slide.html presen/slide.md
diffstat 3 files changed, 41 insertions(+), 261 deletions(-) [+]
line wrap: on
line diff
--- 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 @@
-<!DOCTYPE html>
-
-<html>
-  <head>
-    <title>Presentation</title>
-    
-    <meta charset='utf-8'>
-    <script
-       src='./slides.js'></script>
-  </head>
-
-  <style>
-    /* Your individual styles here, or just use inline styles if that’s
-    what you want. */
-
-  </style>
-
-  <body style='display: none'>
-    <section class='slides layout-regular template-default'>
-
-      <!-- 
-           Your slides (<article>s) go here. Delete or comment out the
-           slides below.
-        -->
-      <article>
-        <h1>Implementation of CbC compiler on LLVM/clang 3.5</h1>
-        <h3 class="title">Kaito Tokumori  27 Feb 2014</h3>
-        <div align="right">Teacher : Shinji Kono</div>
-      </article>
-
-      <article>
-        <h3>Introduction of CbC</h3>
-	<ul>
-          <li>CbC is programming language.
-          <li>CbC stands for Continuation based C.
-          <li>For pararell tasks.
-          <li>For state machine.
-          <li>For meta computation.
-	</ul>
-      </article>
-
-      <article>
-        <h3>CbC compilers</h3>
-	<ul>
-          <li>Micro-C
-          <li>GCC
-          <li>LLVM/clang  <font color="ff3300">&lt;= New!!</font>
-	</ul>
-      </article>
-
-      <article>
-        <h3>LLVM/clang??</h3>
-	<br>
-        <h3 class='yellow'>What??</h3>
-	<ul>
-          <li>LLVM is compiler framework.
-          <li>clang is C/C++/Obj-C compiler frontend.
-	</ul>
-        <h3 class='yellow'>Why??</h3>
-	<ul>
-          <li>Apple supported.
-          <li>OS X default compiler.
-          <li>LLVM IR (Intermidiate Representation).
-	</ul>
-      </article>
-
-      <article>
-        <h3>Basic strategy of implementation</h3>
-	<ul>
-          <li>A code segment is implemented by normal function.
-          <li>Transition is implemented by forced tail call.
-          <li>Goto with environment is implemented by setjmp/longjmp.
-          <li><span class='red'>Do not modify intermidiate code.</span>
-	</ul>
-      </article>
-
-      <article>
-        <h3>Problems</h3>
-	<ul>
-          <li>Code segment go-to moves between function.</li>
-          <li>LLVM IR jmp instruction is limited in a function.</li>
-          <li>LLVM IR can't express code segment jump...</li>
-          <br>
-	</ul>
-	<ul class="build">
-          <li>But LLVM has tail call elimination,<br>
-            so there is a way to generate unlimited jmp instruction in LLVM.</li>
-	</ul>
-      </article>
-
-      <article>
-        <h3>Solution</h3>
-        <pre>define fastcc void @factorial(i32 %x) #0 {
-entry:
-  <span class="red">tail</span> call <span class="red">fastcc</span> void @factorial0(i32 1, i32 %x)
-  ret void
-}</pre>
-	<ul>
-          <li>LLVM IR has call flag.
-          <li>Tail and fastcc flag are enable to tail call elimination!
-          <li><h3 class='yellow'>We can implement CbC compiler on LLVM!!</h3>
-	</ul>
-      </article>
-
-      <article>
-        <h3>Structure of LLVM/clang</h3>
-	<div align="center"><img src="fig/clang_llvm_structure.svg" width="600"></div>
-      </article>
-
-      <article>
-        <h3>Implementation on parser</h3>
-	<div align="center"><img src="fig/clang_llvm_structure.svg" width="600"></div>
-	<ul>
-          <li>Code segment type</li>
-          <li>Goto syntax</li>
-	</ul>
-      </article>
-
-      <article>
-        <h3>Implementation on parser</h3>
-	<div align="center"><img src="fig/clang_llvm_structure.svg" width="600"></div>
-	<ul>
-          <!-- <li>Goto with environment</li> -->
-          <li>Include setjmp.h always.
-          <li>Generate C struct for saving environment.
-          <li>Insert setjmp statement.
-          <li>Generate longjmp code segment as return.
-	</ul>
-      </article>
-
-      <article>
-        <h3>Implementation on code generator</h3>
-	<div align="center"><img src="fig/clang_llvm_structure.svg" width="600"></div>
-	<ul>
-          <!-- <li>Keep tail call elimination</li> -->
-          <li>Enable to tailcallopt LangOption.
-          <li>Add a return statement after code sgment call.
-          <li>Add fastcc calling convention.
-          <li>Enable to TailCallElim pass.
-	</ul>
-      </article>
-
-
-      <article class='smaller'>
-        <h3>Compiling result</h3>
-          <table  border="0">
-            <tbody>
-              <tr>
-                <td>
-		  <pre>__code factorial(int x)
-{
-  goto factorial0(1, x);
-}
-</pre>
-		</td>
-                <td>
-		  <pre>_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
-    <span class="red">jmp    _factorial0       ## TAILCALL</span>
-    .cfi_endproc</pre>
-		</td>
-              </tr>
-            </tbody>
-          </table>
-	<ul>
-          <li>Jmp instructions are in assembler source.</li>
-	</ul>
-      </article>
-
-      <article>
-        <h3>Benchmark result</h3>
-          <table  border="2" style="font-size:18pt;">
-            <tbody>
-              <tr>
-                <td bgcolor="#8091B5"></td>
-                <td style="text-align: center;">no optimized code</td>
-                <td style="text-align: center;">optimized code A</td>
-                <td style="text-align: center;">optimized code B</td>
-              </tr>
-              <tr>
-                <td style="text-align: center;">Micro-C</td>
-                <td style="text-align: right;">6.06 s</td>
-                <td style="text-align: right;">2.21 s</td>
-                <td style="text-align: right;">2.40 s</td>
-              </tr>
-              <!-- <tr> -->
-              <!--   <td style="text-align: center;">GCC -O0</td> -->
-              <!--   <td style="text-align: right;">1.59 s</td> -->
-              <!--   <td style="text-align: right;">1.02 s</td> -->
-              <!--   <td style="text-align: right;">0.99 s</td> -->
-              <!-- </tr> -->
-              <tr>
-                <td style="text-align: center;">GCC -O2</td>
-                <td style="text-align: right;">1.59 s</td>
-                <td style="text-align: right;">1.02 s</td>
-                <td style="text-align: right;">0.99 s</td>
-              </tr>
-              <!-- <tr> -->
-              <!--   <td style="text-align: center;">LLVM -O0</td> -->
-              <!--   <td style="text-align: right;">5.52 s</td> -->
-              <!--   <td style="text-align: right;">3.95 s</td> -->
-              <!--   <td style="text-align: right;">4.64 s</td> -->
-              <!-- </tr> -->
-              <tr>
-                <td style="text-align: center;">LLVM -O2</td>
-                <td style="text-align: right;">5.52 s</td>
-                <td style="text-align: right;">3.95 s</td>
-                <td style="text-align: right;">4.64 s</td>
-              </tr>
-            </tbody>
-          </table>
-	<ul>
-	  <li>LLVM can compile CbC examples like other CbC compilers.</li>
-	  <li>LLVM is slower than other compilers but it is not important for us.</li>
-	</ul>
-      </article>
-
-      <article>
-        <h3>Conclusion</h3>
-	<ul>
-          <li>We can use LLVM/clang to compile CbC code.</li>
-          <li>We did not modify LLVM IR to implement CbC compiler.</li>
-	</ul>
-	<h3 class='yellow'>Future</h3>
-	<ul>
-          <li>Data segment interface</li>
-          <li>Meta computation</li>
-          <li>Dynamic rewriting of a jmp</li>
-          <li>Generating specialized code</li>
-	</ul>
-      </article>
-
-  </body>
-</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 @@
 <!-- === begin markdown block ===
 
       generated by markdown/1.2.0 on Ruby 2.2.0 (2014-12-25) [x86_64-darwin13]
-                on 2017-02-16 08:10:32 +0900 with Markdown engine kramdown (1.9.0)
+                on 2017-02-16 09:18:39 +0900 with Markdown engine kramdown (1.9.0)
                   using options {}
   -->
 
@@ -106,6 +106,7 @@
 <!-- _S9SLIDE_ -->
 <h1 id="code-gear--data-gear">Code Gear と Data Gear</h1>
 <ul>
+  <li>Code Gear とはプログラムの処理の単位である。</li>
   <li>Code Gear は関数に比べて細かく分割されているので Meta Computation をより柔軟に記述できる。</li>
   <li>Data Gear はデータの単位であり、Code Gear は 任意の数の Input Data Gear を参照して処理を行い、Output Data Gear を出力し処理を終える。</li>
 </ul>
@@ -150,7 +151,7 @@
 <!-- _S9SLIDE_ -->
 <h1 id="context">Context</h1>
 <ul>
-  <li>Gears OS では Context と呼ばれる接続可能な Code/Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。</li>
+  <li>Gears OS には Context と呼ばれる接続可能な Code/Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。</li>
   <li>Gears OSは必要なCode/DataGearに参照したい場合、このContext を通す必要がある。</li>
 </ul>
 
@@ -213,7 +214,7 @@
 <ul lang="impl">
   <li>interface を記述することで Context を通して Code Gear が参照できるようになった。</li>
   <li>create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。</li>
-  <li>return で interface を返し、その先で指定した Code Gear へ継続できるようになる。</li>
+  <li>return で interface を返し、その先で inter face の持つ Code Gear へと継続できるようになる。</li>
 </ul>
 <pre><code>Stack* createSingleLinkedStack(struct Context* context) {
     struct Stack* stack = new Stack();
@@ -235,7 +236,7 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h1 id="contextstub-code-segment-">Context、stub Code Segment の自動生成</h1>
+<h1 id="contextstub-code-gear-">Context、stub Code Gear の自動生成</h1>
 <ul>
   <li>Gears OS では通常の計算の他に Context や stub などの meta computation を記述する必要がある。</li>
   <li>現在の CbC で Gears OS を記述すると、この meta computation の記述も行わなくてはならず、これには多くの労力を要する。</li>
@@ -246,10 +247,26 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h1 id="generate-context">generate context</h1>
+<h1 id="stub-code-gear-">stub Code Gear の生成</h1>
 <ul>
-  <li>generate_stub は指定された cbc ファイルの __code型である Code Gear を取得</li>
-  <li>generate_context は context.h から Data Gear、c ファイルから Code Gear の取得
+  <li>stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。</li>
+  <li>stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。</li>
+  <li>generate_stub は指定された cbc ファイルの __code型である Code Gear を取得。</li>
+  <li>引数と interface を照らし合わせ、Gearef または GearImpl を決定する。</li>
+  <li>cbc ファイルのから、生成した stub Code Gear を加えて、c ファイルを生成する。</li>
+</ul>
+
+
+</div>
+<div class='slide '>
+<!-- _S9SLIDE_ -->
+<h1 id="context-">Context の生成</h1>
+<ul>
+  <li>Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。</li>
+  <li>generate_context は context.h から Data Gear、c ファイルから Code Gear を取得。</li>
+  <li>取得した Code/Data Gear の enum の定義は enumCode.h、enumData.h に生成される。</li>
+  <li>generate_context は取得した Code/Data Gear から Context の生成を行うコードを生成する。</li>
+  <li>これらを自動生成することで Gears OS の記述量を約半分にすることができます。
 <img src="./fig/generate_context.svg" alt="message" width="800" /></li>
 </ul>
 
--- 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 の記述量を約半分にすることができます。
 <img src="./fig/generate_context.svg" alt="message" width="800" >
 
 # 今後の課題