changeset 935:40735db036d3

flag checking
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 01 Feb 2021 16:01:25 +0900
parents 296be5d6d524
children 55ae765ffcdd
files src/parallel_execution/MCTaskManagerImpl.cbc src/parallel_execution/MCTaskManagerImpl.h src/parallel_execution/ModelChecking/MCWorker.cbc src/parallel_execution/ModelChecking/MCWorker.h src/parallel_execution/examples/DPPMC/McDPP.cbc src/parallel_execution/examples/DPPMC/McDPP.h
diffstat 6 files changed, 23 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/MCTaskManagerImpl.cbc	Mon Feb 01 15:46:05 2021 +0900
+++ b/src/parallel_execution/MCTaskManagerImpl.cbc	Mon Feb 01 16:01:25 2021 +0900
@@ -7,7 +7,7 @@
 #include <stdio.h>
 #include <unistd.h>
 
-static void defultStatefunc(MCTaskManagerImpl* mcti, struct MCWorker* mcworker , StateDB now,StateDB next) {
+static void defultStatefunc(MCTaskManagerImpl* mcti, struct MCWorker* mcworker , StateDB now,StateDB next,int flag) {
 }
 
 void createWorkers(struct Context* context, MCTaskManagerImpl* taskManager);
--- a/src/parallel_execution/MCTaskManagerImpl.h	Mon Feb 01 15:46:05 2021 +0900
+++ b/src/parallel_execution/MCTaskManagerImpl.h	Mon Feb 01 16:01:25 2021 +0900
@@ -14,6 +14,6 @@
   int gpu;
   int io;
   int maxCPU;
-  void (*statefunc)(struct MCTaskManagerImpl* mcti, struct MCWorker* mcworker, StateDB now,StateDB next);
+  void (*statefunc)(struct MCTaskManagerImpl* mcti, struct MCWorker* mcworker, StateDB now,StateDB next, int flag);
   __code next(...);
 } MCTaskManagerImpl;
--- a/src/parallel_execution/ModelChecking/MCWorker.cbc	Mon Feb 01 15:46:05 2021 +0900
+++ b/src/parallel_execution/ModelChecking/MCWorker.cbc	Mon Feb 01 16:01:25 2021 +0900
@@ -110,7 +110,7 @@
         dump_memory(mcti->mem);printf("\n");
     }
     int found = visit_StateDB(out, &mcti->state_db, &out,mcWorker->visit);
-    mcti->statefunc(mcti, mcWorker, mcWorker->parent, out);
+    mcti->statefunc(mcti, mcWorker, mcWorker->parent, out, mcWorker->checking);
     if (found) {
       // found in the state database
       // printf("found %d\n",count);
@@ -120,16 +120,17 @@
           if (!prev_iter) {
             printf("All done count %d repeat %d\n",mcWorker->count,mcWorker->visit);
             memory_usage();
-            if (! mcWorker->change) {
+            if (! mcWorker->change && mcWorker->checking) {
               exit(0);
-            } else {
-                mcWorker->change = 0;
-		mcWorker->visit++;
-                // start from root state and iterator
-                mcWorker->depth = 0;
-                struct SingleLinkedQueue* mcSingleQueue = (struct SingleLinkedQueue*)mcWorker->mcQueue->queue;
-                mcWorker->task_iter = createQueueIterator(mcSingleQueue->top->next,mcWorker->root,NULL);
-            }
+            } else if (! mcWorker->change ) {
+                mcWorker->checking = 1;
+            } 
+            mcWorker->change = 0;
+            mcWorker->visit++;
+            // start from root state and iterator
+            mcWorker->depth = 0;
+            struct SingleLinkedQueue* mcSingleQueue = (struct SingleLinkedQueue*)mcWorker->mcQueue->queue;
+            mcWorker->task_iter = createQueueIterator(mcSingleQueue->top->next,mcWorker->root,NULL);
           } else {
             //printf("no more branch %d\n",count);
             mcWorker->depth--;
--- a/src/parallel_execution/ModelChecking/MCWorker.h	Mon Feb 01 15:46:05 2021 +0900
+++ b/src/parallel_execution/ModelChecking/MCWorker.h	Mon Feb 01 16:01:25 2021 +0900
@@ -18,5 +18,6 @@
   int depth;
   int visit;
   int count;
-  int change;  // state db flag is changed
+  int change;    // state db flag is changed
+  int checking;  // state checking phase
 } MCWorker;
--- a/src/parallel_execution/examples/DPPMC/McDPP.cbc	Mon Feb 01 15:46:05 2021 +0900
+++ b/src/parallel_execution/examples/DPPMC/McDPP.cbc	Mon Feb 01 16:01:25 2021 +0900
@@ -1,6 +1,7 @@
 #include "McDPP.h"
+#include <stdio.h>
 
-void mcDPP(struct MCTaskManagerImpl* mcti, struct MCWorker* mcWorker, StateDB now,StateDB next) {
+void mcDPP(struct MCTaskManagerImpl* mcti, struct MCWorker* mcWorker, StateDB now,StateDB next, int check) {
   PhilsImpl* phils = (PhilsImpl*)GearImpl(mcWorker->mcContext, Phils, phils);
   int prev_now = now->flag; 
   int prev_next = next->flag; 
@@ -14,4 +15,9 @@
   }
   if ( prev_now != now->flag || prev_next != next->flag )
      mcWorker->change = 1;
+  if (check) {
+     if (!(now->flag & t_F_eating)) {
+         printf("not <> eating\n");
+     }
+  }
 }
--- a/src/parallel_execution/examples/DPPMC/McDPP.h	Mon Feb 01 15:46:05 2021 +0900
+++ b/src/parallel_execution/examples/DPPMC/McDPP.h	Mon Feb 01 16:01:25 2021 +0900
@@ -19,6 +19,6 @@
    f_GF_eating  = 0x30,     // ¬[] <> eating
 };
 
-extern void mcDPP(struct MCTaskManagerImpl* mcti, struct MCWorker* mcworker, StateDB now,StateDB next) ;
+extern void mcDPP(struct MCTaskManagerImpl* mcti, struct MCWorker* mcworker, StateDB now,StateDB next, int checking) ;
 
 #endif