diff src/parallel_execution/taskManager.c @ 247:ce262b2c1daf

Fix createTask for main
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Wed, 25 Jan 2017 04:14:50 +0900
parents d1567718f12c
children 1ede5390cda2
line wrap: on
line diff
--- a/src/parallel_execution/taskManager.c	Wed Jan 25 03:07:59 2017 +0900
+++ b/src/parallel_execution/taskManager.c	Wed Jan 25 04:14:50 2017 +0900
@@ -5,7 +5,7 @@
 #include "origin_cs.h"
 #include <stdio.h>
 
-void createWorkers(Context* context, TaskManager * taskManeger);
+void createWorkers(Context* context, TaskManager* taskManeger, TaskManagerImpl* taskManagerImpl);
 
 union Data* createTaskManager(struct Context* context, int numCPU, int numGPU, int numIO) {
     struct TaskManager* taskManager = &ALLOCATE(context, TaskManager)->TaskManager;
@@ -19,18 +19,17 @@
     taskManager->createTask = C_createTask;
     taskManager->spawn = C_spawnTaskManager;
     taskManager->shutdown  = C_shutdownTaskManager;
-    createWorkers(context, taskManager);
     struct TaskManagerImpl* taskManagerImpl = &ALLOCATE(context, TaskManagerImpl)->TaskManagerImpl;
     taskManager->taskManager = (union Data*)taskManagerImpl;
     taskManagerImpl -> activeQueue = &createSingleLinkedQueue(context)->Queue;
     taskManagerImpl -> taskQueue = &createSingleLinkedQueue(context)->Queue;
     taskManagerImpl -> numWorker = taskManager->maxCPU;
+    createWorkers(context, taskManager, taskManagerImpl);
     return (union Data*)(taskManager);
 }
 
-void createWorkers(Context* context, TaskManager* taskManager) {
+void createWorkers(Context* context, TaskManager* taskManager, TaskManagerImpl* taskManagerImpl) {
     int i = 0;
-    TaskManagerImpl* taskManagerImpl = (TaskManagerImpl*)GearImpl(context,TaskManager,taskManager);
     taskManagerImpl->workers = (Worker**)ALLOC_ARRAY(context, Worker, taskManager->maxCPU);
     for (;i<taskManager->gpu;i++) {
         Queue* queue = &createSynchronizedQueue(context)->Queue;
@@ -52,14 +51,14 @@
 __code createTask(struct Context* context, TaskManager* taskManager) {
     taskManager->context = NEW(struct Context);
     initContext(taskManager->context);
-    goto meta(context, C_setRunWorker);
+    goto meta(context, C_setWorker);
 }
 
 __code createTask_stub(struct Context* context) {
-    goto createTask(context,Gearef(context,TaskManager));
+    goto createTask(context, Gearef(context,TaskManager));
 }
 
-__code setRunWorker(struct Context* context, TaskManagerImpl* taskManager, Context* task, enum Code next) {
+__code setWorker(struct Context* context, TaskManagerImpl* taskManager, Context* task, enum Code next) {
     task->workerId = taskManager->sendWorkerIndex;
     if(++taskManager->sendWorkerIndex >= taskManager->numWorker) {
         taskManager->sendWorkerIndex = 0;
@@ -67,9 +66,9 @@
     goto meta(context, next);
 }
 
-__code setRunWorker_stub(struct Context* context) {
+__code setWorker_stub(struct Context* context) {
     TaskManagerImpl* taskManager = (TaskManagerImpl*)GearImpl(context, TaskManager, taskManager);
-    goto setRunWorker(context, taskManager, Gearef(context, TaskManager)->context, Gearef(context, TaskManager)->next);
+    goto setWorker(context, taskManager, Gearef(context, TaskManager)->context, Gearef(context, TaskManager)->next);
 }
 
 __code spawnTaskManager(struct Context* context, struct TaskManagerImpl* taskManager, struct Queue* queue, struct Context* task, enum Code next) {
@@ -96,16 +95,15 @@
 }
 
 
-__code spawnTaskManager1(struct Context* context, struct TaskManagerImpl* taskManager, enum Code next) {
+__code spawnTaskManager1(struct Context* context, struct TaskManagerImpl* taskManager) {
     pthread_mutex_unlock(&taskManager->mutex);
-    goto meta(context, next);
+    goto meta(context, C_taskSend);
 }
 
 __code spawnTaskManager1_stub(struct Context* context) {
     TaskManagerImpl* taskManager = (TaskManagerImpl*)GearImpl(context, TaskManager, taskManager);
     goto spawnTaskManager1(context,
-                          taskManager,
-                          Gearef(context, TaskManager)->next);
+                          taskManager);
 }
 
 __code taskSend(struct Context* context, TaskManagerImpl* taskManager, Queue* queue) {