Mercurial > hg > Members > innparusu > Gears
annotate src/parallel_execution/dependency.c @ 115:135472238fb7
Add meta Data Gear allocate
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 28 Jun 2016 15:59:24 +0900 |
parents | d05b9937aa95 |
children | 69fbd905d750 |
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 | |
10 __code waitFor1(struct Context* context, struct Task* master, struct Task* slave, struct Element* element) { | |
113
d05b9937aa95
Change element data from Task to Data
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
112
diff
changeset
|
11 element->data = (union Data *)slave; |
111 | 12 // enqueue waitMe |
115
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
13 //goto meta_waitFor(context, master->waitMe, PutQueue1); |
111 | 14 } |
15 | |
16 __code waitFor1_stub(struct Context* context) { | |
17 // next think | |
18 } | |
19 | |
115
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
20 /** |
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
21 __code waitFor2(struct Context* context, struct Task* master, struct Task* slave, struct Element* element) { |
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
22 element->task = master; |
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
23 task->next = context->next; |
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
24 // enqueue waitI |
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
25 goto meta_waitFor(context, task->waitI, PutQueue1); |
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
26 } |
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
27 |
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
28 __code waitFor2_stub(struct Context* context) { |
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
29 // next think |
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
30 } |
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
31 */ |
111 | 32 |
112 | 33 __code meta_spawnTask(struct Context* context, struct Queue* queue, enum Code next) { |
34 context->data[Queue] = (union Data *)queue; | |
35 goto (context->code[next])(context); | |
111 | 36 } |
37 | |
112 | 38 __code spawnTask(struct Context* context, struct Task* task, struct Element* element, struct Queue* activeQueue, struct Queue* waitQueue) { |
113
d05b9937aa95
Change element data from Task to Data
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
112
diff
changeset
|
39 element->data = (union Data *)task; |
115
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
40 goto meta_spawnTask(context, activeQueue, PutQueue1); |
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
41 /* |
112 | 42 if (task->waitI->count == task->idsCount) { |
43 //printf("put ActiveQueue\n"); | |
111 | 44 // enqueue activeQueue |
112 | 45 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
|
46 } else { |
112 | 47 //printf("put WaitQueue\n"); |
111 | 48 // enqueue waitQueue |
112 | 49 goto meta_spawnTask(context, waitQueue, PutQueue1); |
111 | 50 } |
115
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
51 */ |
111 | 52 } |
53 | |
54 __code spawnTask_stub(struct Context* context) { | |
112 | 55 goto spawnTask(context, |
115
135472238fb7
Add meta Data Gear allocate
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
56 &context->data[context->dataNum]->task, |
112 | 57 &context->data[Element]->element, |
58 &context->data[ActiveQueue]->queue, | |
59 &context->data[WaitQueue]->queue); | |
111 | 60 } |
61 | |
112 | 62 __code taskA(struct Context* context) { |
111 | 63 printf("TaskA\n"); |
64 goto meta(context, context->next); | |
65 } | |
66 | |
112 | 67 __code taskB(struct Context* context) { |
111 | 68 printf("TaskB\n"); |
69 goto meta(context, context->next); | |
70 } | |
71 | |
112 | 72 __code taskC(struct Context* context) { |
111 | 73 printf("TaskC\n"); |
74 goto meta(context, context->next); | |
75 } |