changeset 921:31ea8f75e9e6

add statefunc
author ikkun <ikkun@cr.ie.u-ryukyu.ac.jp>
date Fri, 29 Jan 2021 18:08:13 +0900
parents 26e3d0226cc6
children 14166ed0c58d
files src/parallel_execution/MCTaskManagerImpl.cbc src/parallel_execution/MCTaskManagerImpl.h src/parallel_execution/MCWorker.h src/parallel_execution/ModelChecking/MCWorker.cbc src/parallel_execution/examples/DPPMC/meta.pm
diffstat 5 files changed, 18 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/MCTaskManagerImpl.cbc	Fri Jan 29 12:17:43 2021 +0900
+++ b/src/parallel_execution/MCTaskManagerImpl.cbc	Fri Jan 29 18:08:13 2021 +0900
@@ -7,6 +7,9 @@
 #include <stdio.h>
 #include <unistd.h>
 
+static void defultStatefunc(MCTaskManagerImpl* mcti, StateDB now,StateDB next) {
+}
+
 void createWorkers(struct Context* context, MCTaskManagerImpl* taskManager);
 
 TaskManager* createMCTaskManagerImpl(struct Context* context, int numCPU, int numGPU, int numIO) {
@@ -31,6 +34,7 @@
     taskManagerImpl->taskCount = 0;
     taskManagerImpl->loopCounter = 0;
     taskManagerImpl->mem = 0;
+    taskManagerImpl->statefunc = defultStatefunc;
     context->taskManager = taskManager;
     taskManager->taskManager = (union Data*)taskManagerImpl;
     createWorkers(context, taskManagerImpl);
--- a/src/parallel_execution/MCTaskManagerImpl.h	Fri Jan 29 12:17:43 2021 +0900
+++ b/src/parallel_execution/MCTaskManagerImpl.h	Fri Jan 29 18:08:13 2021 +0900
@@ -16,5 +16,6 @@
   int io;
   int visit;
   int maxCPU;
+  void (*statefunc)(struct MCTaskManagerImpl* mcti, StateDB now,StateDB next);
   __code next(...);
 } MCTaskManagerImpl;
--- a/src/parallel_execution/MCWorker.h	Fri Jan 29 12:17:43 2021 +0900
+++ b/src/parallel_execution/MCWorker.h	Fri Jan 29 18:08:13 2021 +0900
@@ -14,6 +14,8 @@
   struct Queue* mcQueue; // simulated task queue par thread
   enum Code nextStep;
   TaskIterator* task_iter;
+  StateDB parent;
+  StateDB root;
   int depth;
   int count;
 } MCWorker;
--- a/src/parallel_execution/ModelChecking/MCWorker.cbc	Fri Jan 29 12:17:43 2021 +0900
+++ b/src/parallel_execution/ModelChecking/MCWorker.cbc	Fri Jan 29 18:08:13 2021 +0900
@@ -66,6 +66,11 @@
         MCTaskManagerImpl *mcti = (struct MCTaskManagerImpl *)worker->taskManager->taskManager;
         add_memory_range(&tmpContext->next, sizeof(enum Code), &mcti->mem);
     }
+    struct MCTaskManagerImpl* mcti = (struct MCTaskManagerImpl *)worker->taskManager->taskManager;
+    StateDB out =NULL;
+    lookup_StateDB(&mcti->st, &mcti->state_db, &out);
+    worker->parent = out;
+    worker->root = out;
     goto meta(ncontext, ncontext->next);
 }
 
@@ -98,7 +103,9 @@
     if (dump) {
         dump_memory(mcti->mem);printf("\n");
     }
-    if (visit_StateDB(&mcti->st, &mcti->state_db, &out,mcti->visit)) {
+    int found = visit_StateDB(&mcti->st, &mcti->state_db, &out,mcti->visit);
+    mcti->statefunc(mcti, mcworker->parent, out);
+    if (found) {
       // found in the state database
       // printf("found %d\n",count);
       while(!(list = takeNextIterator(mcworker->task_iter))) {
@@ -110,7 +117,7 @@
             if (mcti->visit == 1) {
               exit(0);
             } else {
-              mcti->visit = 1;
+		mcti->visit++;
             }
           }
           //printf("no more branch %d\n",count);
@@ -122,7 +129,6 @@
       //    here we assume task list is fixed, we don't have to
       //    recover task list itself
       restore_memory(mcworker->task_iter->state->memory);
-      mcti->st = *out;
       context = (Context *)list->data;
       // printf("restore list %x next %x\n",(int)list,(int)(list->next));
     } else {
@@ -132,6 +138,7 @@
       mcworker->task_iter = createQueueIterator(mcSingleQueue->top->next,out,mcworker->task_iter);
     }
     // printf("depth %d count %d\n", depth, count++);
+    mcworker->parent = out;
     mcworker->count++;
     //goto list->phils->next(list->phils,list);
     goto meta(context, context->next);
--- a/src/parallel_execution/examples/DPPMC/meta.pm	Fri Jan 29 12:17:43 2021 +0900
+++ b/src/parallel_execution/examples/DPPMC/meta.pm	Fri Jan 29 18:08:13 2021 +0900
@@ -17,7 +17,7 @@
 
 sub generateMcMeta {
   my ($context, $next) = @_;
-  return "goto mcDPP($context, $next);";
+  return "goto mcMeta($context, $next);";
 }
 
 1;