Mercurial > hg > Members > innparusu > Gears
annotate src/parallel_execution/dependency.c @ 119:4df53a60e59a
Add dependency function
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 19 Jul 2016 18:39:22 +0900 |
parents | c9ab10847fc3 |
children | bb8be1820302 |
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 | |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
10 __code waitFor1(struct Context* context, struct Task* master, struct Task* slave, struct Element* element, union Data* data) { |
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; |
111 | 14 // enqueue waitMe |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
15 goto meta_waitFor(context, waitMeTasks, PutQueue1); |
111 | 16 } |
17 | |
18 __code waitFor1_stub(struct Context* context) { | |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
19 // think |
111 | 20 } |
21 | |
112 | 22 __code meta_spawnTask(struct Context* context, struct Queue* queue, enum Code next) { |
23 context->data[Queue] = (union Data *)queue; | |
24 goto (context->code[next])(context); | |
111 | 25 } |
26 | |
112 | 27 __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
|
28 if (task->idsCount == 0) { |
112 | 29 //printf("put ActiveQueue\n"); |
111 | 30 // enqueue activeQueue |
112 | 31 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
|
32 } else { |
112 | 33 //printf("put WaitQueue\n"); |
111 | 34 // enqueue waitQueue |
112 | 35 goto meta_spawnTask(context, waitQueue, PutQueue1); |
111 | 36 } |
37 } | |
38 | |
39 __code spawnTask_stub(struct Context* context) { | |
112 | 40 goto spawnTask(context, |
115
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
41 &context->data[context->dataNum]->task, |
112 | 42 &context->data[Element]->element, |
43 &context->data[ActiveQueue]->queue, | |
44 &context->data[WaitQueue]->queue); | |
111 | 45 } |
46 | |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
47 __code meta_check_task_finish1(struct Context* context, struct Queue* queue, enum Code next) { |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
48 context->data[Queue] = (union Data *)queue; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
49 goto (context->code[next])(context); |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
50 } |
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 __code check_task_finish1(struct Context* context, struct Data* data) { |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
53 struct Integer integer = (struct Integer *)data; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
54 struct Queue waitMeTasks = (struct Queue *)(integer + integer->mDataOffset); |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
55 context->next = check_task_finish2; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
56 goto meta_check_task_finish1(context, waitMeTasks, CheckTaskFinish2); |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
57 } |
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 __code check_task_finish1_stub(struct Context* context) { |
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 /* |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
63 * ready input data Gear for waitme task |
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 __code check_task_finish2(struct Context* context) { |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
66 struct Task task = ((struct Task) element -> data); |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
67 task->idsCount--; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
68 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
69 |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
70 __code check_task_finish2_stub(struct Context* context) { |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
71 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
117
diff
changeset
|
72 |
116 | 73 __code add(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) { |
74 output->value = input1->value + input2->value; | |
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; | |
111 | 79 } |