# HG changeset patch # User Tatsuki IHA # Date 1498666461 -32400 # Node ID 3aab69fc4c28f70f72665dd89f86f870b7c5caba # Parent d93dceb84c75c9d427da5ac152b3cbc0760633a0 Fix twice diff -r d93dceb84c75 -r 3aab69fc4c28 src/parallel_execution/CMakeLists.txt --- 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( diff -r d93dceb84c75 -r 3aab69fc4c28 src/parallel_execution/examples/calc.cbc --- 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; diff -r d93dceb84c75 -r 3aab69fc4c28 src/parallel_execution/examples/twice.cbc --- 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) {