changeset 363:3aab69fc4c28

Fix twice
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Thu, 29 Jun 2017 01:14:21 +0900
parents d93dceb84c75
children a0a3301bac4d
files src/parallel_execution/CMakeLists.txt src/parallel_execution/examples/calc.cbc src/parallel_execution/examples/twice.cbc
diffstat 3 files changed, 21 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/CMakeLists.txt	Wed Jun 28 05:51:32 2017 +0900
+++ b/src/parallel_execution/CMakeLists.txt	Thu Jun 29 01:14:21 2017 +0900
@@ -60,7 +60,7 @@
   TARGET
       twice
   SOURCES 
-      examples/twice.cbc RedBlackTree.cbc compare.c SingleLinkedStack.cbc CPUWorker.cbc time.cbc twice.cbc TaskManagerImpl.cbc SingleLinkedQueue.cbc SynchronizedQueue.cbc SemaphoreImpl.cbc
+      examples/twice.cbc CPUWorker.cbc time.cbc twice.cbc TaskManagerImpl.cbc SingleLinkedQueue.cbc SynchronizedQueue.cbc SemaphoreImpl.cbc
 )
 
 GearsCommand(
--- a/src/parallel_execution/examples/calc.cbc	Wed Jun 28 05:51:32 2017 +0900
+++ b/src/parallel_execution/examples/calc.cbc	Thu Jun 29 01:14:21 2017 +0900
@@ -157,7 +157,6 @@
     task->maxOdg = task->odg + 3;
     tasks[2] = task;
 
-    //goto taskManager->setWaitTask(createTask1);
     taskManager->contexts = tasks;
     // goto crateTask1();
     taskManager->next1 = C_createTask1;
--- a/src/parallel_execution/examples/twice.cbc	Wed Jun 28 05:51:32 2017 +0900
+++ b/src/parallel_execution/examples/twice.cbc	Thu Jun 29 01:14:21 2017 +0900
@@ -112,8 +112,7 @@
     int i = loopCounter->i;
 
     if ((length/split*i) < length) {
-        taskManager->next = C_createTask2;
-        goto meta(context, taskManager->taskManager->TaskManager.createTask);
+        goto meta(context, C_createTask2);
     }
 
     loopCounter->i = 0;
@@ -124,13 +123,23 @@
     goto meta(context, taskManager->taskManager->TaskManager.shutdown);
 }
 
-__code createTask2(LoopCounter* loopCounter, TaskManager* taskManager,struct Context* task, LoopCounter* loopCounter2, Array* array) {
+__code createTask2(struct LoopCounter* loopCounter, struct TaskManager* taskManager) {
+    struct Context** tasks = (struct Context**)ALLOC_ARRAY(context, Context, 1);
+
     int i = loopCounter->i;
+    LoopCounter* loopCounter2 = &ALLOCATE_DATA_GEAR(context, LoopCounter)->LoopCounter;
+    Array* array = &ALLOCATE_DATA_GEAR(context, Array)->Array;
     array->index = i;
     array->prefix = length/split;
     array->array = array_ptr;
     array->size = length;
     loopCounter2->i = 0;
+    loopCounter->i++;
+
+    // par goto twice(loopCounter2, array, __exit);
+    struct Context* task = NEW(struct Context);
+    initContext(task);
+    task->taskManager = &taskManager->taskManager->TaskManager;
     task->idgCount = 0;
     if (gpu_num) {
 #ifdef USE_CUDAWorker
@@ -142,24 +151,18 @@
     } else {
         task->next = C_twice;
     }
+    task->idg = task->dataNum;
     task->data[task->dataNum] = (union Data*)loopCounter2;
     task->data[task->dataNum+1] = (union Data*)array;
-    task->odg = task->dataNum + 2;
+    task->maxIdg = task->idg + 2;
+    task->odg = task->maxIdg;
     task->maxOdg = task->odg;
-    taskManager->next = C_createTask1;
-    loopCounter->i++;
-    goto meta(context, taskManager->taskManager->TaskManager.spawn);
-}
+    tasks[0] = task;
 
-__code createTask2_stub(struct Context* context) {
-    LoopCounter* loopCounter = &ALLOCATE(context, LoopCounter)->LoopCounter;
-    Array* array = &ALLOCATE(context, Array)->Array;
-    goto createTask2(context,
-            Gearef(context, LoopCounter),
-            Gearef(context, TaskManager),
-            Gearef(context, TaskManager)->context,
-            loopCounter,
-            array);
+    taskManager->contexts = tasks;
+    // goto crateTask1();
+    taskManager->next1 = C_createTask1;
+    goto meta(context, taskManager->taskManager->TaskManager.spawnTasks);
 }
 
 void init(int argc, char** argv) {