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 d05b9937aa95 f57e9ffa7960
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) {