Mercurial > hg > Members > Moririn
diff src/parallel_execution/main.c @ 112:e3cba827d489
Add spawnTask CS
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 03 May 2016 17:29:21 +0900 |
parents | 556e203de999 |
children | f57e9ffa7960 d05b9937aa95 |
line wrap: on
line diff
--- a/src/parallel_execution/main.c Mon May 02 20:39:02 2016 +0900 +++ b/src/parallel_execution/main.c Tue May 03 17:29:21 2016 +0900 @@ -111,7 +111,6 @@ __code createTask1(struct Context* context, struct Allocate* allocate) { allocate->size = sizeof(struct Task); allocator(context); - goto meta(context, CreateTask2); } @@ -119,72 +118,111 @@ goto createTask1(context, &context->data[Allocate]->allocate); } -__code meta_createTask2(struct Context* context, struct Queue* activeQueue, enum Code next) { +__code createTask2(struct Context* context, struct Allocate* allocate) { + allocate->size = sizeof(struct Queue); + allocator(context); + goto meta(context, CreateTask3); +} + +__code createTask2_stub(struct Context* context) { + goto createTask2(context, &context->data[Allocate]->allocate); +} + +__code createTask3(struct Context* context, struct Allocate* allocate) { + allocate->size = sizeof(struct OdsQueue); + allocator(context); + goto meta(context, CreateTask4); +} + +__code createTask3_stub(struct Context* context) { + goto createTask3(context, &context->data[Allocate]->allocate); +} + +__code meta_createTask4(struct Context* context, struct Queue* activeQueue, enum Code next) { context->data[Queue] = (union Data *)activeQueue; goto (context->code[next])(context); } -__code createTask2(struct Context* context, struct LoopCounter* loopCounter, struct Task* task, struct Element* element, struct Queue* activeQueue) { +__code createTask4(struct Context* context, struct LoopCounter* loopCounter, struct Task* task, struct Queue* waitMe, struct OdsQueue* waitI, struct Element* element, struct Queue* activeQueue) { int i = loopCounter->i; + waitMe->first = 0; + waitMe->last = 0; + waitMe->count = 0; + + waitI->first = 0; + waitI->last = 0; + waitI->count = 0; + task->code = Twice; task->key = i; + task->waitMe = waitMe; + task->waitI = waitI; + task->idsCount = 0; element->task = task; context->next = CreateData1; loopCounter->i++; - goto meta_createTask2(context, activeQueue, PutQueue1); + goto meta(context, SpawnTask); } -__code createTask2_stub(struct Context* context) { - goto createTask2(context, +__code createTask4_stub(struct Context* context) { + goto createTask4(context, &context->data[LoopCounter]->loopCounter, - &context->data[context->dataNum]->task, + &context->data[context->dataNum-2]->task, + &context->data[context->dataNum-1]->queue, + &context->data[context->dataNum]->odsQueue, &context->data[Element]->element, &context->data[ActiveQueue]->queue); } -//__code createTask2(struct Context* context, struct LoopCounter* loopCounter, struct Task* task, struct Element* element) { +//__code createTask4(struct Context* context, struct LoopCounter* loopCounter, struct Task* task, struct Queue* waitMe, struct OdsQueue* waitI, struct Element* element, struct Queue* activeQueue) { // int i = loopCounter->i; -// +// // task->code = TaskC; // task->key = i; -// +// task->waitMe = waitMe; +// task->waitI = waitI; +// task->idsCount = 1; +// // element->task = task; // // context->next = CreateData1; // loopCounter->i++; // -// goto meta(context, PutQueue1); +// goto meta_createTask2(context, activeQueue, PutQueue1); //} // -//__code createTask2_stub(struct Context* context) { +//__code createTask4_stub(struct Context* context) { // goto createTask2(context, -// &context->data[LoopCounter]->loopCounter, -// &context->data[context->dataNum]->task, -// &context->data[Element]->element); +// &context->data[LoopCounter]->loopCounter, +// &context->data[context->dataNum]->task, +// &context->data[context->dataNum-1]->queue, +// &context->data[context->dataNum-2]->odsQueue, +// &context->data[Element]->element, +// &context->data[ActiveQueue]->queue); //} // -//__code createTask3(struct Context* context, struct LoopCounter* loopCounter, struct Task* task, struct Task* slave, struct Element* element) { +//__code createTask5(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) { +//__code createTask5_stub(struct Context* context) { // goto createTask2(context, -// &context->data[context->dataNum]->task, -// &context->data[Element]->element); +// &context->data[context->dataNum]->task, +// &context->data[Element]->element); //} __code putQueue1(struct Context* context, struct Allocate* allocate) {