Mercurial > hg > Members > innparusu > Gears
annotate src/parallel_execution/dependency.c @ 122:a086857e1812
implement dependency example. do not work
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 25 Aug 2016 03:23:29 +0900 |
parents | bb8be1820302 |
children | 4ff6f093b695 |
rev | line source |
---|---|
112 | 1 #include <stdio.h> |
111 | 2 #include "context.h" |
3 #include "origin_cs.h" | |
4 | |
5 __code meta_waitFor(struct Context* context, struct Queue* queue, enum Code next) { | |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
6 context->data[Queue] = (union Data*)queue; |
111 | 7 goto (context->code[next])(context); |
8 } | |
9 | |
121 | 10 __code waitFor(struct Context* context, struct Task* slave, struct Element* element, union Data* data) { |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
11 struct Integer* integer = (struct Integer *)data; |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
12 struct Queue* waitMeTasks = (struct Queue *)(integer + integer-> mDataOffset); |
113
d05b9937aa95
Change element data from Task to Data
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
112
diff
changeset
|
13 element->data = (union Data *)slave; |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
14 goto meta_waitFor(context, waitMeTasks, PutQueue1); |
111 | 15 } |
16 | |
121 | 17 __code waitFor_stub(struct Context* context) { |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
18 // think |
111 | 19 } |
20 | |
112 | 21 __code meta_spawnTask(struct Context* context, struct Queue* queue, enum Code next) { |
22 context->data[Queue] = (union Data *)queue; | |
23 goto (context->code[next])(context); | |
111 | 24 } |
25 | |
112 | 26 __code spawnTask(struct Context* context, struct Task* task, struct Element* element, struct Queue* activeQueue, struct Queue* waitQueue) { |
117
c9ab10847fc3
Define dependency Task create function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
116
diff
changeset
|
27 if (task->idsCount == 0) { |
112 | 28 //printf("put ActiveQueue\n"); |
111 | 29 // enqueue activeQueue |
112 | 30 goto meta_spawnTask(context, activeQueue, PutQueue1); |
113
d05b9937aa95
Change element data from Task to Data
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
112
diff
changeset
|
31 } else { |
112 | 32 //printf("put WaitQueue\n"); |
111 | 33 // enqueue waitQueue |
112 | 34 goto meta_spawnTask(context, waitQueue, PutQueue1); |
111 | 35 } |
36 } | |
37 | |
38 __code spawnTask_stub(struct Context* context) { | |
112 | 39 goto spawnTask(context, |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
40 (struct Task *)(context->data[Element]->element.data), |
112 | 41 &context->data[Element]->element, |
42 &context->data[ActiveQueue]->queue, | |
43 &context->data[WaitQueue]->queue); | |
111 | 44 } |
45 | |
121 | 46 __code meta_checkTaskFinish1(struct Context* context, struct Queue* queue, enum Code next) { |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
47 context->data[Queue] = (union Data *)queue; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
48 goto (context->code[next])(context); |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
49 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
50 |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
51 __code checkTaskFinish1(struct Context* context, union Data* data) { |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
52 struct Integer* integer = (struct Integer *)data; |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
53 struct Queue* waitMeTasks = (struct Queue *)(integer + integer->mDataOffset); |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
54 context->next = CheckTaskFinish2; |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
55 goto meta_checkTaskFinish1(context, waitMeTasks, GetQueue1); |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
56 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
57 |
121 | 58 __code checkTaskFinish1_stub(struct Context* context) { |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
59 goto checkTaskFinish1(context, |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
60 ((struct Task*)(context->data[Element]->element.data))->oargs[0]); |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
61 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
62 |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
63 /* |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
64 * ready input data Gear for waitme task |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
65 */ |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
66 __code checkTaskFinish2(struct Context* context, struct Task* task) { |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
67 // using cas? |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
68 // |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
69 if (__sync_fetch_and_sub(&task->idsCount, 1)) { |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
70 goto meta(context, GetQueue1); |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
71 } else { |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
72 goto meta(context, CheckTaskFinish2); |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
73 } |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
74 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
75 |
121 | 76 __code checkTaskFinish2_stub(struct Context* context) { |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
77 goto checkTaskFinish1(context, |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
78 (struct Task*)(context->data[Element]->element.data)); |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
79 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
80 |
116 | 81 __code add(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) { |
82 output->value = input1->value + input2->value; | |
121 | 83 goto meta(context, context->next); |
111 | 84 } |
85 | |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
86 __code add_stub(struct Context* context) { |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
87 goto add(context, |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
88 (struct Integer*)((struct Task*)(context->data[Element]->element.data))->iargs[0], |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
89 (struct Integer*)((struct Task*)(context->data[Element]->element.data))->iargs[1], |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
90 (struct Integer*)((struct Task*)(context->data[Element]->element.data))->oargs[0]); |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
91 } |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
92 |
116 | 93 __code mult(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) { |
94 output->value = input1->value * input2->value; | |
121 | 95 goto meta(context, context->next); |
111 | 96 } |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
97 |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
98 __code mult_stub(struct Context* context) { |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
99 goto mult(context, |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
100 (struct Integer*)((struct Task*)(context->data[Element]->element.data))->iargs[0], |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
101 (struct Integer*)((struct Task*)(context->data[Element]->element.data))->iargs[1], |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
102 (struct Integer*)((struct Task*)(context->data[Element]->element.data))->oargs[0]); |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
103 } |