Mercurial > hg > Gears > Gears
changeset 886:ece622492758
mc worker take end
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 Jan 2021 17:31:54 +0900 |
parents | 12cf168d6d3f |
children | b1a6d44426cb |
files | src/parallel_execution/MCTaskManagerImpl.cbc src/parallel_execution/ModelChecking/MCWorker.cbc src/parallel_execution/SingleLinkedQueue.cbc |
diffstat | 3 files changed, 28 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/parallel_execution/MCTaskManagerImpl.cbc Mon Jan 25 16:07:03 2021 +0900 +++ b/src/parallel_execution/MCTaskManagerImpl.cbc Mon Jan 25 17:31:54 2021 +0900 @@ -62,9 +62,12 @@ } __code spawnTasksMCTaskManagerImpl1(struct MCTaskManagerImpl* taskManagerImpl, struct TaskManager* taskManager) { + printf("spawnTasksMCTaskManagerImpl1\n"); if (taskManagerImpl->taskList == NULL) { + printf("spawnTasksMCTaskManagerImpl1 == NULL\n"); goto spawnTasksMCTaskManagerImpl2(); } + printf("spawnTasksMCTaskManagerImpl1 != NULL\n"); struct Context* task = (struct Context*)taskManagerImpl->taskList->data; taskManagerImpl->taskList = taskManagerImpl->taskList->next; goto taskManager->setWaitTask(task, spawnTasksMCTaskManagerImpl1); @@ -82,9 +85,16 @@ } __code spawnTasksMCTaskManagerImpl3(struct MCTaskManagerImpl* taskManagerImpl, __code next1(...), struct TaskManager* taskManager) { + printf("spawnTasksMCTaskManagerImpl3\n"); if (taskManagerImpl->taskList == NULL) { - goto taskManager->spawn(NULL, next1); + printf("spawnTasksMCTaskManagerImpl3 == NULL\n"); + printf("spawnTasksTaskManagerImpl3 == NULL\n"); + struct Queue* tasks = taskManagerImpl->workers[0]->tasks; + printf("put NULL\n"); + goto tasks->put(NULL, shutdownMCTaskManagerImpl1); + } + printf("spawnTasksMCTaskManagerImpl3 != NULL\n"); struct Context* task = (struct Context*)taskManagerImpl->taskList->data; taskManagerImpl->taskList = taskManagerImpl->taskList->next; goto taskManager->spawn(task, spawnTasksMCTaskManagerImpl3); @@ -119,10 +129,13 @@ } __code spawnMCTaskManagerImpl(struct MCTaskManagerImpl* taskManagerImpl, struct Context* task, __code next(...), struct TaskManager* taskManager) { + printf("spawnMCTaskManagerImpl\n"); if (task == NULL) { // get all task for model checking // start model checker // we should goto odgCommitMCWorker foreach mctask + printf("spawnMCTaskManagerImpl == NULL\n"); + Gearef(context, Worker)->worker = (union Data*)taskManagerImpl->workers[0]; goto startModelChecker(Gearef(context, Worker)->worker); } @@ -168,6 +181,7 @@ } pthread_mutex_unlock(&taskManager->mutex); struct Queue* queue = taskManager->workers[workerId]->tasks; + printf("tasks->put taskSend1\n"); goto queue->put(task, next(...)); } @@ -178,6 +192,7 @@ } pthread_mutex_unlock(&taskManager->mutex); struct Queue* queue = taskManager->workers[workerId]->tasks; + printf("tasks->put taskSend2\n"); goto queue->put(task, next(...)); } @@ -186,15 +201,10 @@ usleep(1000); goto shutdownMCTaskManagerImpl(); } - int i = taskManager->loopCounter; - if (i < taskManager->numWorker) { - int workerId = taskManager->sendCPUWorkerIndex; - struct Queue* tasks = taskManager->workers[workerId]->tasks; - goto tasks->put(NULL, shutdownMCTaskManagerImpl1); - } - - taskManager->loopCounter = 0; - goto shutdownMCTaskManagerImpl2(); + int workerId = taskManager->sendCPUWorkerIndex; + struct Queue* tasks = taskManager->workers[workerId]->tasks; + printf("tasks->put shutdown\n"); + goto tasks->put(NULL, shutdownMCTaskManagerImpl1); } __code shutdownMCTaskManagerImpl1(struct MCTaskManagerImpl* taskManager, __code next(...)) {
--- a/src/parallel_execution/ModelChecking/MCWorker.cbc Mon Jan 25 16:07:03 2021 +0900 +++ b/src/parallel_execution/ModelChecking/MCWorker.cbc Mon Jan 25 17:31:54 2021 +0900 @@ -1,4 +1,5 @@ #include "../../context.h" +#include <stdio.h> #interface "TaskManager.h" #interface "Worker.h" #interface "Iterator.h" @@ -31,6 +32,7 @@ } __code taskReceiveMCWorker(struct MCWorker* worker, struct Queue* tasks) { + printf("task receive mc worker\n"); goto tasks->take(getTaskMCWorker); } @@ -41,8 +43,10 @@ __code getTaskMCWorker(struct MCWorker* mcWorker, struct Context* task, struct Worker* worker) { if (!task) { + printf("mc worker take end\n"); goto worker->shutdown(); // end thread } + printf("mc worker take\n"); task->worker = worker; enum Code taskCg = task->next; struct Queue* mcQueue = mcWorker->mcQueue;
--- a/src/parallel_execution/SingleLinkedQueue.cbc Mon Jan 25 16:07:03 2021 +0900 +++ b/src/parallel_execution/SingleLinkedQueue.cbc Mon Jan 25 17:31:54 2021 +0900 @@ -8,6 +8,10 @@ struct Queue* queue = new Queue(); struct SingleLinkedQueue* singleLinkedQueue = new SingleLinkedQueue(); queue->queue = (union Data*)singleLinkedQueue; + queue->take = C_takeSingleLinkedQueue; + queue->put = C_putSingleLinkedQueue; + queue->isEmpty = C_isEmptySingleLinkedQueue; + queue->clear = C_clearSingleLinkedQueue; singleLinkedQueue->top = new Element(); singleLinkedQueue->last = singleLinkedQueue->top; return queue;