Mercurial > hg > Members > innparusu > Gears
diff 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 |
line wrap: on
line diff
--- a/src/parallel_execution/dependency.c Tue Jul 19 02:18:31 2016 +0900 +++ b/src/parallel_execution/dependency.c Tue Jul 19 18:39:22 2016 +0900 @@ -7,29 +7,18 @@ goto (context->code[next])(context); } -__code waitFor1(struct Context* context, struct Task* master, struct Task* slave, struct Element* element, struct Node* node) { +__code waitFor1(struct Context* context, struct Task* master, struct Task* slave, struct Element* element, union Data* data) { + struct Integer integer = (struct Integer *)data; + struct Queue waitMeTasks = (struct Queue *)(integer + integer-> mDataOffset); element->data = (union Data *)slave; // enqueue waitMe - //goto meta_waitFor(context, master->waitMe, PutQueue1); + goto meta_waitFor(context, waitMeTasks, PutQueue1); } __code waitFor1_stub(struct Context* context) { - // next think + // think } -/** -__code waitFor2(struct Context* context, struct Task* master, struct Task* slave, struct Element* element) { - element->task = master; - task->next = context->next; - // enqueue waitI - goto meta_waitFor(context, task->waitI, PutQueue1); -} - -__code waitFor2_stub(struct Context* context) { - // next think -} -*/ - __code meta_spawnTask(struct Context* context, struct Queue* queue, enum Code next) { context->data[Queue] = (union Data *)queue; goto (context->code[next])(context); @@ -55,6 +44,32 @@ &context->data[WaitQueue]->queue); } +__code meta_check_task_finish1(struct Context* context, struct Queue* queue, enum Code next) { + context->data[Queue] = (union Data *)queue; + goto (context->code[next])(context); +} + +__code check_task_finish1(struct Context* context, struct Data* data) { + struct Integer integer = (struct Integer *)data; + struct Queue waitMeTasks = (struct Queue *)(integer + integer->mDataOffset); + context->next = check_task_finish2; + goto meta_check_task_finish1(context, waitMeTasks, CheckTaskFinish2); +} + +__code check_task_finish1_stub(struct Context* context) { +} + +/* + * ready input data Gear for waitme task + */ +__code check_task_finish2(struct Context* context) { + struct Task task = ((struct Task) element -> data); + task->idsCount--; +} + +__code check_task_finish2_stub(struct Context* context) { +} + __code add(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) { output->value = input1->value + input2->value; }