Mercurial > hg > Gears > Gears
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;