# HG changeset patch # User mir3636 # Date 1511519813 -32400 # Node ID e9b59ddf626dcf9ad7c3b042e49b66ec24b817f0 # Parent aa9a59aea7fa65d12b5cef5dabc42d0c51736375 add xbb diff -r aa9a59aea7fa -r e9b59ddf626d Paper/main.tex --- 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 を選択する。 diff -r aa9a59aea7fa -r e9b59ddf626d Paper/pic/codesegment.xbb --- /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 + diff -r aa9a59aea7fa -r e9b59ddf626d Paper/pic/gears_structure.xbb --- /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 + diff -r aa9a59aea7fa -r e9b59ddf626d Paper/pic/generate_context3.xbb --- /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 + diff -r aa9a59aea7fa -r e9b59ddf626d Paper/src/context1.c --- 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 +}; diff -r aa9a59aea7fa -r e9b59ddf626d Paper/src/context2.c --- 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 diff -r aa9a59aea7fa -r e9b59ddf626d Paper/src/excbc.cbc --- /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); +} diff -r aa9a59aea7fa -r e9b59ddf626d Paper/src/stackimpl.cbc --- /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(...); +}