Mercurial > hg > Members > innparusu > Gears
annotate src/parallel_execution/dependency.c @ 124:acf0453b1c7a
Fix meta data pointer calculate
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 27 Sep 2016 16:19:31 +0900 |
parents | 4ff6f093b695 |
children | 77e60b6cdace |
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; |
124
acf0453b1c7a
Fix meta data pointer calculate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
12 struct Queue* waitMeTasks = (struct Queue *)(integer + integer-> mDataOffset / sizeof(struct Integer)); |
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) { |
123
4ff6f093b695
Fix segmentation fault
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
122
diff
changeset
|
18 goto waitFor(context, |
124
acf0453b1c7a
Fix meta data pointer calculate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
19 &context->data[context->dataNum-2]->task, |
123
4ff6f093b695
Fix segmentation fault
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
122
diff
changeset
|
20 &context->data[Element]->element, |
124
acf0453b1c7a
Fix meta data pointer calculate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
21 context->data[Node]->node.value); |
111 | 22 } |
23 | |
112 | 24 __code meta_spawnTask(struct Context* context, struct Queue* queue, enum Code next) { |
25 context->data[Queue] = (union Data *)queue; | |
26 goto (context->code[next])(context); | |
111 | 27 } |
28 | |
124
acf0453b1c7a
Fix meta data pointer calculate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
29 __code spawnTask(struct Context* context, struct Task* task, 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
|
30 if (task->idsCount == 0) { |
112 | 31 //printf("put ActiveQueue\n"); |
111 | 32 // enqueue activeQueue |
112 | 33 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
|
34 } else { |
112 | 35 //printf("put WaitQueue\n"); |
111 | 36 // enqueue waitQueue |
112 | 37 goto meta_spawnTask(context, waitQueue, PutQueue1); |
111 | 38 } |
39 } | |
40 | |
41 __code spawnTask_stub(struct Context* context) { | |
112 | 42 goto spawnTask(context, |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
43 (struct Task *)(context->data[Element]->element.data), |
112 | 44 &context->data[ActiveQueue]->queue, |
45 &context->data[WaitQueue]->queue); | |
111 | 46 } |
47 | |
121 | 48 __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
|
49 context->data[Queue] = (union Data *)queue; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
50 goto (context->code[next])(context); |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
51 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
52 |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
53 __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
|
54 struct Integer* integer = (struct Integer *)data; |
124
acf0453b1c7a
Fix meta data pointer calculate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
55 struct Queue* waitMeTasks = (struct Queue *)(integer + integer->mDataOffset / sizeof(struct Integer)); |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
56 context->next = CheckTaskFinish2; |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
57 goto meta_checkTaskFinish1(context, waitMeTasks, GetQueue1); |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
58 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
59 |
121 | 60 __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
|
61 goto checkTaskFinish1(context, |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
62 ((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
|
63 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
64 |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
65 /* |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
66 * ready input data Gear for waitme task |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
67 */ |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
68 __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
|
69 // using cas? |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
70 // |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
71 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
|
72 goto meta(context, GetQueue1); |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
73 } else { |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
74 goto meta(context, CheckTaskFinish2); |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
75 } |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
76 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
77 |
121 | 78 __code checkTaskFinish2_stub(struct Context* context) { |
124
acf0453b1c7a
Fix meta data pointer calculate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
79 goto checkTaskFinish2(context, |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
80 (struct Task*)(context->data[Element]->element.data)); |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
81 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
82 |
116 | 83 __code add(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) { |
84 output->value = input1->value + input2->value; | |
123
4ff6f093b695
Fix segmentation fault
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
122
diff
changeset
|
85 printf("%d + %d = %d\n", input1->value, input2->value, output->value); |
121 | 86 goto meta(context, context->next); |
111 | 87 } |
88 | |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
89 __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
|
90 goto add(context, |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
91 (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
|
92 (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
|
93 (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
|
94 } |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
95 |
116 | 96 __code mult(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) { |
97 output->value = input1->value * input2->value; | |
123
4ff6f093b695
Fix segmentation fault
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
122
diff
changeset
|
98 printf("%d * %d = %d\n", input1->value, input2->value, output->value); |
121 | 99 goto meta(context, context->next); |
111 | 100 } |
122
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
101 |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
102 __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
|
103 goto mult(context, |
a086857e1812
implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
121
diff
changeset
|
104 (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
|
105 (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
|
106 (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
|
107 } |