void tarjan_local_init (run_t *run, wctx_t *ctx) { ctx->local = RTmallocZero (sizeof (alg_local_t)); ctx->local->target = state_info_create (); // extend state_info with tarjan_state information state_info_add_simple (ctx->local->target, sizeof (uint32_t), &ctx->local->target_tarjan.index); state_info_add_simple (ctx->local->target, sizeof (uint32_t), &ctx->local->target_tarjan.lowlink); state_info_add_simple (ctx->state, sizeof (uint32_t), &ctx->local->state_tarjan.index); state_info_add_simple (ctx->state, sizeof (uint32_t), &ctx->local->state_tarjan.lowlink); size_t len = state_info_serialize_int_size (ctx->state); ctx->local->search_stack = dfs_stack_create (len); ctx->local->tarjan_stack = dfs_stack_create (len); ctx->local->cnt.scc_count = 0; ctx->local->cnt.tarjan_counter = 0; ctx->local->visited_states = fset_create (sizeof (ref_t), sizeof (raw_data_t), 10, dbs_size); #ifdef SEARCH_COMPLETE_GRAPH // provide the input file name to dlopen_setup dlopen_setup (files[0]); #endif (void) run; }
void ndfs_local_setup (run_t *run, wctx_t *ctx) { alg_local_t *loc = ctx->local; size_t local_bits = 2; int res = bitvector_create (&loc->color_map, local_bits<<dbs_size); HREassert (res != -1, "Failure to allocate a color_map bitvector."); if (all_red) res = bitvector_create (&loc->stackbits, MAX_STACK); HREassert (res != -1, "Failure to allocate a all_red bitvector."); loc->rec_bits = 0; loc->strat = get_strategy (run->alg); loc->seed = state_info_create (); size_t len = state_info_serialize_int_size (ctx->state); //state_info_add_simple (ctx->state, sizeof(int), &loc->bits); //state_info_add_simple (ctx->local->seed, sizeof(int), &loc->seed_bits); loc->stack = dfs_stack_create (len); }
permute_t * permute_create (permutation_perm_t permutation, model_t model, alg_state_seen_f ssf, int worker_index, void *run_ctx) { permute_t *perm = RTalign (CACHE_LINE_SIZE, sizeof(permute_t)); perm->todos = RTalign (CACHE_LINE_SIZE, sizeof(permute_todo_t[K+TODO_MAX])); perm->tosort = RTalign (CACHE_LINE_SIZE, sizeof(int[K+TODO_MAX])); perm->shift = ((double)K)/W; perm->shiftorder = (1UL<<dbs_size) / W * worker_index; perm->start_group = perm->shift * worker_index; perm->model = model; perm->state_seen = ssf; perm->por_proviso = 1; perm->permutation = permutation; perm->run_ctx = run_ctx; perm->next = state_info_create (); if (Perm_Otf == perm->permutation) perm->pad = RTalign (CACHE_LINE_SIZE, sizeof(int[K+TODO_MAX])); if (Perm_Random == perm->permutation) { perm->rand = RTalignZero (CACHE_LINE_SIZE, sizeof(int*[K+TODO_MAX])); for (size_t i = 1; i < K+TODO_MAX; i++) { perm->rand[i] = RTalign (CACHE_LINE_SIZE, sizeof(int[ i ])); randperm (perm->rand[i], i, perm->shiftorder); } } if (Perm_RR == perm->permutation) { perm->rand = RTalignZero (CACHE_LINE_SIZE, sizeof(int*)); perm->rand[0] = RTalign (CACHE_LINE_SIZE, sizeof(int[1<<RR_ARRAY_SIZE])); srandom (time(NULL) + 9876432*worker_index); for (int i =0; i < (1<<RR_ARRAY_SIZE); i++) perm->rand[0][i] = random(); } if (Perm_SR == perm->permutation || Perm_Dynamic == perm->permutation) { perm->rand = RTalignZero (CACHE_LINE_SIZE, sizeof(int*)); perm->rand[0] = RTalign (CACHE_LINE_SIZE, sizeof(int[K+TODO_MAX])); randperm (perm->rand[0], K+TODO_MAX, (time(NULL) + 9876*worker_index)); } perm->labels = lts_type_get_edge_label_count (GBgetLTStype(model)); for (size_t i = 0; i < K+TODO_MAX; i++) { if (act_detect || files[1] || (PINS_BUCHI_TYPE == PINS_BUCHI_TYPE_TGBA)) { perm->todos[i].ti.labels = RTmalloc (sizeof(int*[perm->labels])); } else { perm->todos[i].ti.labels = NULL; } } perm->class_label = lts_type_find_edge_label (GBgetLTStype(model),LTSMIN_EDGE_TYPE_ACTION_CLASS); if (inhibit){ int id=GBgetMatrixID(model,"inhibit"); if (id>=0){ perm->inhibit_matrix = GBgetMatrix (model, id); Warning(infoLong,"inhibit matrix is:"); if (log_active(infoLong)) dm_print (stderr, perm->inhibit_matrix); perm->inhibited_by = (ci_list **)dm_cols_to_idx_table (perm->inhibit_matrix); } else { Warning(infoLong,"no inhibit matrix"); } id = GBgetMatrixID(model,LTSMIN_EDGE_TYPE_ACTION_CLASS); if (id>=0){ perm->class_matrix=GBgetMatrix(model,id); Warning(infoLong,"inhibit class matrix is:"); if (log_active(infoLong)) dm_print(stderr,perm->class_matrix); } else { Warning(infoLong,"no inhibit class matrix"); } if (perm->class_label>=0) { Warning(infoLong,"inhibit class label is %d",perm->class_label); } else { Warning(infoLong,"no inhibit class label"); } } if (PINS_POR) por_set_find_state (state_find, perm); return perm; }