# HG changeset patch # User Tatsuki IHA # Date 1462189142 -32400 # Node ID 556e203de999c18daf5343888df40e2c48e67af6 # Parent fbcdbe8db53cce478d4078b16418f198971a88d6 Add dependency.c diff -r fbcdbe8db53c -r 556e203de999 src/parallel_execution/dependency.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/parallel_execution/dependency.c Mon May 02 20:39:02 2016 +0900 @@ -0,0 +1,61 @@ +#include "context.h" +#include "origin_cs.h" + +__code meta_waitFor(struct Context* context, struct Queue* queue, enum Code next) { + context->data[Queue] = (Data *)queue; + goto (context->code[next])(context); +} + +__code waitFor1(struct Context* context, struct Task* master, struct Task* slave, struct Element* element) { + element->task = slave; + task->next = WaitFor2; + // enqueue waitMe + goto meta_waitFor(context, task->waitMe, PutQueue1); +} + +__code waitFor1_stub(struct Context* context) { + // next 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 spawnTask(struct Context* context, struct Task* task, struct Queue* activeQueue, struct Queue* waitQueue) { + if (task->wait_i->count == task->wait_task_count) { + element->task = task; + // enqueue activeQueue + goto meta(context, PutQueue1); + } + else { + element->task = task; + // enqueue waitQueue + goto meta(context, PutQueue1); + } +} + +__code spawnTask_stub(struct Context* context) { + // next think +} + +__code taskA(struct Context*) { + printf("TaskA\n"); + goto meta(context, context->next); +} + +__code taskB(struct Context*) { + printf("TaskB\n"); + goto meta(context, context->next); +} + +__code taskC(struct Context*) { + printf("TaskC\n"); + goto meta(context, context->next); +} diff -r fbcdbe8db53c -r 556e203de999 src/parallel_execution/main.c --- a/src/parallel_execution/main.c Mon May 02 20:04:06 2016 +0900 +++ b/src/parallel_execution/main.c Mon May 02 20:39:02 2016 +0900 @@ -50,7 +50,7 @@ __code code2(struct Context* context, struct Array* array, struct LoopCounter* loopCounter) { int i = loopCounter->i; - + if (i < length) { // printf("%d\n", array->array[i]); if (array->array[i] == (i*2)) { @@ -81,7 +81,7 @@ loopCounter->i = 0; goto meta(context, Code1); } - + __code createData1_stub(struct Context* context) { goto createData1(context, &context->data[Allocate]->allocate, &context->data[LoopCounter]->loopCounter); } @@ -95,7 +95,7 @@ node->key = i; node->value = (union Data*)array; - + context->next = CreateTask1; goto meta(context, PutTree); @@ -103,9 +103,9 @@ __code createData2_stub(struct Context* context) { goto createData2(context, - &context->data[LoopCounter]->loopCounter, - &context->data[context->dataNum]->array, - &context->data[Node]->node); + &context->data[LoopCounter]->loopCounter, + &context->data[context->dataNum]->array, + &context->data[Node]->node); } __code createTask1(struct Context* context, struct Allocate* allocate) { @@ -146,6 +146,47 @@ &context->data[ActiveQueue]->queue); } + +//__code createTask2(struct Context* context, struct LoopCounter* loopCounter, struct Task* task, struct Element* element) { +// int i = loopCounter->i; +// +// task->code = TaskC; +// task->key = i; +// +// element->task = task; +// +// context->next = CreateData1; +// loopCounter->i++; +// +// goto meta(context, PutQueue1); +//} +// +//__code createTask2_stub(struct Context* context) { +// goto createTask2(context, +// &context->data[LoopCounter]->loopCounter, +// &context->data[context->dataNum]->task, +// &context->data[Element]->element); +//} +// +//__code createTask3(struct Context* context, struct LoopCounter* loopCounter, struct Task* task, struct Task* slave, struct Element* element) { +// int i = loopCounter->i; +// +// task->code = TaskB; +// task->key = i; +// element->task = task; +// +// context->next = CreateData1; +// loopCounter->i++; +// +// goto meta(context, WaitFor1); +//} +// +//__code createTask3_stub(struct Context* context) { +// goto createTask2(context, +// &context->data[context->dataNum]->task, +// &context->data[Element]->element); +//} + __code putQueue1(struct Context* context, struct Allocate* allocate) { allocate->size = sizeof(struct Element); allocator(context);