changeset 2:e9b59ddf626d

add xbb
author mir3636
date Fri, 24 Nov 2017 19:36:53 +0900
parents aa9a59aea7fa
children 845b7c1fb066
files Paper/main.tex Paper/pic/codesegment.xbb Paper/pic/gears_structure.xbb Paper/pic/generate_context3.xbb Paper/src/context1.c Paper/src/context2.c Paper/src/excbc.cbc Paper/src/stackimpl.cbc
diffstat 8 files changed, 84 insertions(+), 57 deletions(-) [+]
line wrap: on
line diff
--- a/Paper/main.tex	Thu Nov 23 19:33:17 2017 +0900
+++ b/Paper/main.tex	Fri Nov 24 19:36:53 2017 +0900
@@ -2,7 +2,7 @@
   % english: 英語原稿用フォーマット
   \documentclass{ipsjprosym}
   %\documentclass[withpage,english]{ipsjprosym}
-  \usepackage{listings,jlisting}
+  \usepackage{listings}
   \usepackage[dvipdfmx]{graphicx}
   \usepackage{latexsym}
   \usepackage{comment}
@@ -190,8 +190,8 @@
 Data Gear は union と struct によって表現される。
 Context には Data Gear の Data Type の情報が格納されている。
 この情報から確保する Data Gear のサイズなどを決定する。
+Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することはできない。
 
-Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することはできない。
 Context は Task でもあり、TaskManager によって Context が生成され Task Queue へ挿入する。
 Gears OS における Task Queue は Synchronized Queue で実現される。
 Worker は TaskQueue から Task である Context を取得し、 Input/Output Data Gear の依存関係が解決されたものから並列実行される。
@@ -199,31 +199,28 @@
 \section{CbC のコードの例}
 
 Code\ref{excbc}は CbC で記述された stack のコードの一部である。
-Code Gear は \_\_code Code Gear で始まり、次の Code Gear へ goto で遷移する。
+Code Gear は \_\_code Code Gear の記述から始まり、次の Code Gear へ goto で遷移する。
 
-%,,,の説明
+%...の説明
 %codegearの説明もっとする?
 
-\lstinputlisting[label=excbc, caption=stack.cbc]{./src/ex_stack.cbc}
+\lstinputlisting[label=excbc, caption=excs.cbc]{./src/excbc.cbc}
 
 \section{interface と impliment}
 interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。
 呼び出される Code Gear の引数となる Data Gear はここで全て定義される。
 
+Code\ref{interface}は stack の interface である。
 Code Gear、Data Gear に参照するために Context を通す必要があるが、
 interface を記述することでデータ構造の api と Data Gear を結びつけることが出来、呼び出しが容易になった。
-create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。
-%return で interface を返し、その先で Code Gear や Data Gear へ継続できるようになる。
 
 \lstinputlisting[label=interface, caption=Interface]{./src/Stack.cbc}
-\lstinputlisting[label=interface, caption=Interface]{./src/stackimpl.cbc}
-
-\section{CbC による Gears OS 記述の問題}
 
-%メタの話
+Code\ref{impliment}は stack の impliment の例である。 
+createImpl は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。
+%return で interface を返し、その先で Code Gear や Data Gear へ継続できるようになる。
 
-Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。
-これらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。
+\lstinputlisting[label=impliment, caption=Impliment]{./src/stackimpl.cbc}
 
 \section{Gearef、GearImpl}
 
@@ -244,6 +241,13 @@
 そこで Context から必要なデータを取り出して Code Gear に接続する stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。
 stub Code Gear は Code Gear 毎に生成され、次の Code Gear へと継続する間に挟まれる。
 
+\section{CbC による Gears OS 記述の問題}
+
+%メタの話
+
+Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。
+これらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。
+
 \section{stub Code Gear の生成}
 stub Code Gear は Code Gear 間の継続に挟まれる Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。
 Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Paper/pic/codesegment.xbb	Fri Nov 24 19:36:53 2017 +0900
@@ -0,0 +1,8 @@
+%%Title: ./pic/codesegment.pdf
+%%Creator: extractbb 20140317
+%%BoundingBox: 0 0 393 201
+%%HiResBoundingBox: 0.000000 0.000000 393.000000 201.000000
+%%PDFVersion: 1.3
+%%Pages: 1
+%%CreationDate: Fri Nov 24 17:30:26 2017
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Paper/pic/gears_structure.xbb	Fri Nov 24 19:36:53 2017 +0900
@@ -0,0 +1,8 @@
+%%Title: ./pic/gears_structure.pdf
+%%Creator: extractbb 20140317
+%%BoundingBox: 0 0 713 418
+%%HiResBoundingBox: 0.000000 0.000000 713.000000 418.000000
+%%PDFVersion: 1.3
+%%Pages: 1
+%%CreationDate: Fri Nov 24 17:30:26 2017
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Paper/pic/generate_context3.xbb	Fri Nov 24 19:36:53 2017 +0900
@@ -0,0 +1,8 @@
+%%Title: ./pic/generate_context3.pdf
+%%Creator: extractbb 20140317
+%%BoundingBox: 0 0 706 265
+%%HiResBoundingBox: 0.000000 0.000000 706.000000 265.000000
+%%PDFVersion: 1.3
+%%Pages: 1
+%%CreationDate: Fri Nov 24 17:30:33 2017
+
--- a/Paper/src/context1.c	Thu Nov 23 19:33:17 2017 +0900
+++ b/Paper/src/context1.c	Fri Nov 24 19:36:53 2017 +0900
@@ -8,13 +8,13 @@
     void* heap;
     long heapLimit;
     int dataNum;
-    int idgCount; //number of waiting dataGear
+    int idgCount;
     int idg;
     int maxIdg;
     int odg;
     int maxOdg;
     int workerId;
-    int gpu; // GPU task
+    int gpu;
     struct Context* task;
     struct Queue* tasks;
     union Data **data;
@@ -24,43 +24,18 @@
     struct Meta {
         enum DataType type;
         long size;
-        struct Queue* wait; // tasks waiting this dataGear
+        struct Queue* wait;
     } meta;
     struct Task {
         enum Code code;
         struct Queue* dataGears;
         int idsCount;
     } Task;
-    // Stack Interface
-    struct Stack {
-        union Data* stack;
-        union Data* data;
-        union Data* data1;
-        enum Code whenEmpty;
-        enum Code clear;
-        enum Code push;
-        enum Code pop;
-        enum Code isEmpty;
-        enum Code get;
-        enum Code next;
-    } Stack;
-    // Stack implementations
-    struct SingleLinkedStack {
-        struct Element* top;
-    } SingleLinkedStack;
+
+    ...
+
     struct Element {
         union Data* data;
         struct Element* next;
     } Element;
-    struct Node {
-        int key; // comparable data segment
-        union Data* value;
-        struct Node* left;
-        struct Node* right;
-        // need to balancing
-        enum Color {
-            Red,
-            Black,
-        } color;
-    } Node;
-}; // union Data end       this is necessary for context generator
+};
--- a/Paper/src/context2.c	Thu Nov 23 19:33:17 2017 +0900
+++ b/Paper/src/context2.c	Fri Nov 24 19:36:53 2017 +0900
@@ -9,20 +9,12 @@
     context->heapStart = NEWN(context->heapLimit, char);
     context->heap = context->heapStart;
 
-    context->code[C_clearSingleLinkedStack]    = clearSingleLinkedStack_stub;
+    context->code[C_cs1]    = cs1_stub;
+    context->code[C_cs2]    = cs2_stub;
     context->code[C_exit_code]    = exit_code_stub;
-    context->code[C_getSingleLinkedStack]    = getSingleLinkedStack_stub;
-    context->code[C_isEmptySingleLinkedStack]    = isEmptySingleLinkedStack_stub;
-    context->code[C_popSingleLinkedStack]    = popSingleLinkedStack_stub;
-    context->code[C_pushSingleLinkedStack]    = pushSingleLinkedStack_stub;
-    context->code[C_stack_test1]    = stack_test1_stub;
-    context->code[C_stack_test2]    = stack_test2_stub;
-    context->code[C_stack_test3]    = stack_test3_stub;
-    context->code[C_stack_test4]    = stack_test4_stub;
     context->code[C_start_code]    = start_code_stub;
 
 #include "dataGearInit.c"
-
 }
 
 __code meta(struct Context* context, enum Code next) {
@@ -48,5 +40,3 @@
 __code exit_code_stub(struct Context* context) {
     goto exit_code(context);
 }    
-
-// end context_c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Paper/src/excbc.cbc	Fri Nov 24 19:36:53 2017 +0900
@@ -0,0 +1,7 @@
+__code cs0(int a, int b) {
+    goto cs1(a+b);
+}
+
+__code cs1(int c) {
+    goto cs2(c);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Paper/src/stackimpl.cbc	Fri Nov 24 19:36:53 2017 +0900
@@ -0,0 +1,27 @@
+Stack* createSingleLinkedStack(struct Context* context) {
+    struct Stack* stack = new Stack();
+    struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack();
+    stack->stack = (union Data*)singleLinkedStack;
+    singleLinkedStack->top = NULL;
+    stack->push = C_pushSingleLinkedStack;
+    stack->pop  = C_popSingleLinkedStack;
+    stack->pop2  = C_pop2SingleLinkedStack;
+    stack->get  = C_getSingleLinkedStack;
+    stack->get2  = C_get2SingleLinkedStack;
+    stack->isEmpty = C_isEmptySingleLinkedStack;
+    stack->clear = C_clearSingleLinkedStack;
+    return stack;
+}
+
+__code clearSingleLinkedStack(struct SingleLinkedStack* stack,__code next(...)) {
+    stack->top = NULL;
+    goto next(...);
+}
+
+__code pushSingleLinkedStack(struct SingleLinkedStack* stack,union Data* data, __code next(...)) {
+    Element* element = new Element();
+    element->next = stack->top;
+    element->data = data;
+    stack->top = element;
+    goto next(...);
+}