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;