Mercurial > hg > Members > innparusu > slides
comparison 2016/2016_10_04/slide.md @ 20:3d6b9e5ae730
Update
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 25 Oct 2016 19:50:03 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
19:fe6ea065e36a | 20:3d6b9e5ae730 |
---|---|
1 title: Gears OS | |
2 author: Tatsuki IHA | |
3 profile: | |
4 lang: Japanese | |
5 code-engine: coderay | |
6 | |
7 # 研究目的 | |
8 - 当研究室では 処理の単位を Code Gear、 データの単位を Data Gear を用いて 信頼性が高い並列処理を行う Gears OS を開発している | |
9 - Gears OS では Task を Code Gear と実行するときに必要な Input Data Gear と出力するための Output Data Gear の組で表現される。 Input Data Gear/Output Data Gear によって依存関係が決定し、それにそって並列実行を行う | |
10 | |
11 # 今週やってたこと | |
12 - red black Tree の stack_push, pop の取り除き | |
13 - コーディングルールを確認 | |
14 | |
15 # rbTree | |
16 - staskに積まれるnodeを ``traverse->nodeStack`` に格納する | |
17 - nodeStack は element なので next をもつ | |
18 | |
19 ``` | |
20 struct Traverse { | |
21 enum Code next; | |
22 enum Code rotateNext; | |
23 struct Node* current; // reading node of original tree | |
24 struct Node* newNode; // writing node of new tree | |
25 struct Element* nodeStack; | |
26 int result; | |
27 } traverse; | |
28 ``` | |
29 | |
30 # rbTree | |
31 ``` | |
32 __code replaceNode(struct Context* context, struct Traverse* traverse, struct Node* oldNode, struct Node* newNode, struct Element* element) { | |
33 *newNode = *oldNode; | |
34 element->next = traverse->nodeStack; | |
35 element->data = (union Data* )newNode; | |
36 traverse->nodeStack = element; | |
37 // goto replaceNode1(struct Traverse* traverse, struct Node* node, struct Node* oldNode, struct Node* newNode, +struct Node* newnewNode, int result) | |
38 goto meta(context, Replace1); | |
39 } | |
40 | |
41 __code replaceNode_stub(struct Context* context) { | |
42 struct Allocate* allocate = &context->data[Allocate]->allocate; | |
43 allocate->size = sizeof(struct Element); | |
44 allocator(context); | |
45 struct Element* element = &context->data[context->dataNum]->element; | |
46 goto replaceNode(context, | |
47 &context->data[Traverse]->traverse, | |
48 context->data[Traverse]->traverse.current, | |
49 context->data[Traverse]->traverse.newNode, | |
50 element); | |
51 } | |
52 ``` | |
53 | |
54 ``` | |
55 __code replaceNode(struct Context* context, struct Traverse* traverse, struct Node* oldNode, struct Node* newNode, int result) { | |
56 *newNode = *oldNode; | |
57 stack_push(context->node_stack, &newNode); | |
58 if (result == EQ) { | |
59 newNode->value = context->data[Node]->node.value; | |
60 // go to stack clear | |
61 stack_pop(context->code_stack, &context->next); | |
62 goto meta(context, context->next); | |
63 } else if (result == GT) { | |
64 traverse->current = oldNode->right; | |
65 newNode->right = context->heap; // allocator(context,struct Node) | |
66 } else { | |
67 traverse->current = oldNode->left; | |
68 newNode->left = context->heap; | |
69 } | |
70 | |
71 allocator(context); | |
72 | |
73 if (traverse->current) { | |
74 compare(context, traverse, traverse->current->key, context->data[Node]->node.key); | |
75 goto meta(context, Replace); | |
76 } | |
77 goto meta(context, Insert); | |
78 } | |
79 | |
80 __code replaceNode_stub(struct Context* context) { | |
81 goto replaceNode(context, | |
82 &context->data[Traverse]->traverse, | |
83 context->data[Traverse]->traverse.current, | |
84 &context->data[context->dataNum]->node, // new Node | |
85 context->data[Traverse]->traverse.result); | |
86 | |
87 } | |
88 ``` | |
89 | |
90 | |
91 # いろいろ | |
92 - 引数 | |
93 - ``__code code1(struct Node* +node)`` みたいに新しく allocate するものは+ を付ける | |
94 - stack と queue の api が欲しい | |
95 - Stack interface & Queue interface を用意してそこに operatorの csの番号を持たせる(popとかpushに) | |
96 - データ構造の生成時に interface の cs の番号を送ることで データ構造が持つ型によって実行する CS を変える | |
97 - とりあえず保留にしとこう | |
98 - allocate | |
99 - allocate はやっぱり CS であるべきだよね | |
100 - allocate で作ったものをどう参照するか | |
101 - DS | |
102 - enum DataType を union Data の要素につける |