Mercurial > hg > Members > innparusu > Gears
annotate src/parallel_execution/dependency.c @ 121:bb8be1820302
Rename Code Gears
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 26 Jul 2016 13:06:46 +0900 |
parents | 4df53a60e59a |
children | a086857e1812 |
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) { | |
112 | 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) { |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
11 struct Integer integer = (struct Integer *)data; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
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, |
115
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
40 &context->data[context->dataNum]->task, |
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 |
121 | 51 __code checkTaskFinish1(struct Context* context, struct Data* data) { |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
52 struct Integer integer = (struct Integer *)data; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
53 struct Queue waitMeTasks = (struct Queue *)(integer + integer->mDataOffset); |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
54 context->next = check_task_finish2; |
121 | 55 goto meta_check_task_finish1(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) { |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
59 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
60 |
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 * ready input data Gear for waitme task |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
63 */ |
121 | 64 __code checkTaskFinish2(struct Context* context) { |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
65 struct Task task = ((struct Task) element -> data); |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
66 task->idsCount--; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
67 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
68 |
121 | 69 __code checkTaskFinish2_stub(struct Context* context) { |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
70 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
71 |
116 | 72 __code add(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) { |
73 output->value = input1->value + input2->value; | |
121 | 74 goto meta(context, context->next); |
111 | 75 } |
76 | |
116 | 77 __code mult(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) { |
78 output->value = input1->value * input2->value; | |
121 | 79 goto meta(context, context->next); |
111 | 80 } |