diff --git a/H/rclause.h b/H/rclause.h index 69dba016b..3c5bf4def 100644 --- a/H/rclause.h +++ b/H/rclause.h @@ -814,10 +814,10 @@ restore_opcodes(yamop *pc, yamop *max USES_REGS) #ifdef TABLING /* instructions type Otapl */ case _table_answer_resolution: - case _table_completion: #ifdef THREADS_CONSUMER_SHARING case _table_answer_resolution_completion: -#endif /* THREADS_CONSUMER_SHARING */ +#endif + case _table_completion: case _table_load_answer: case _table_retry: case _table_retry_me: diff --git a/H/saveclause.h b/H/saveclause.h index f80daf0ec..f03d93061 100644 --- a/H/saveclause.h +++ b/H/saveclause.h @@ -834,10 +834,10 @@ #ifdef TABLING /* instructions type Otapl */ case _table_answer_resolution: - case _table_completion: #ifdef THREADS_CONSUMER_SHARING case _table_answer_resolution_completion: -#endif /* THREADS_CONSUMER_SHARING */ +#endif + case _table_completion: case _table_load_answer: case _table_retry: case _table_retry_me: diff --git a/H/walkclause.h b/H/walkclause.h index 4c435b4b7..6fc86210d 100644 --- a/H/walkclause.h +++ b/H/walkclause.h @@ -613,10 +613,10 @@ #ifdef TABLING /* instructions type Otapl */ case _table_answer_resolution: - case _table_completion: #ifdef THREADS_CONSUMER_SHARING case _table_answer_resolution_completion: -#endif /* THREADS_CONSUMER_SHARING */ +#endif + case _table_completion: case _table_load_answer: case _table_retry: case _table_retry_me: diff --git a/OPTYap/opt.config.h b/OPTYap/opt.config.h index cc7619b9d..cde5fccd4 100644 --- a/OPTYap/opt.config.h +++ b/OPTYap/opt.config.h @@ -49,9 +49,9 @@ /************************************************************************ ** multithreading design for tabling (mandatory, define one) ** ************************************************************************/ -//#define THREADS_NO_SHARING 1 -#define THREADS_SUBGOAL_SHARING 1 -//#define THREADS_FULL_SHARING 1 +#define THREADS_NO_SHARING 1 +/* #define THREADS_SUBGOAL_SHARING 1 */ +/* #define THREADS_FULL_SHARING 1 */ /* #define THREADS_CONSUMER_SHARING 1 */ /************************************************************************* diff --git a/OPTYap/tab.macros.h b/OPTYap/tab.macros.h index 8f1559497..f0a8abe93 100644 --- a/OPTYap/tab.macros.h +++ b/OPTYap/tab.macros.h @@ -199,8 +199,8 @@ static inline tg_sol_fr_ptr CUT_prune_tg_solution_frames(tg_sol_fr_ptr, int); #define IS_ANSWER_LEAF_NODE(NODE) ((unsigned long int) TrNode_parent(NODE) & 0x1) #define TAG_AS_ANSWER_INVALID_NODE(NODE) TrNode_parent(NODE) = (ans_node_ptr)((unsigned long int) TrNode_parent(NODE) | 0x2) #define IS_ANSWER_INVALID_NODE(NODE) ((unsigned long int) TrNode_parent(NODE) & 0x2) -#define UNTAG_SUBGOAL_NODE(NODE) ((sg_fr_ptr)((unsigned long int) (NODE) & ~(0x1))) -#define UNTAG_ANSWER_NODE(NODE) ((ans_node_ptr)((unsigned long int) (NODE) & ~(0x3))) +#define UNTAG_SUBGOAL_NODE(NODE) ((unsigned long int) (NODE) & ~(0x1)) +#define UNTAG_ANSWER_NODE(NODE) ((unsigned long int) (NODE) & ~(0x3)) /* trie hashes */ #define MAX_NODES_PER_TRIE_LEVEL 8 @@ -316,6 +316,7 @@ static inline tg_sol_fr_ptr CUT_prune_tg_solution_frames(tg_sol_fr_ptr, int); Hash_previous(HASH) = NULL #else #define TabEnt_init_mode_directed_field(TAB_ENT, MODE_ARRAY) +#define SgEnt_init_mode_directed_fields(SG_ENT, MODE_ARRAY) #define SgFr_init_mode_directed_fields(SG_FR, MODE_ARRAY) #define AnsHash_init_previous_field(HASH, SG_FR) #endif /* MODE_DIRECTED_TABLING */ @@ -773,7 +774,7 @@ static inline sg_fr_ptr *get_insert_subgoal_frame_addr(sg_node_ptr sg_node USES_ #if defined(THREADS_SUBGOAL_SHARING) (void **) UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)), #elif defined(THREADS_FULL_SHARING) || defined(THREADS_CONSUMER_SHARING) - (void **) &SgEnt_sg_fr(UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node))), + (void **) &SgEnt_sg_fr((sg_ent_ptr) UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node))), #endif #ifdef SUBGOAL_TRIE_LOCK_USING_NODE_FIELD &TrNode_lock(sg_node) @@ -791,10 +792,10 @@ static inline sg_fr_ptr get_subgoal_frame(sg_node_ptr sg_node) { sg_fr_ptr *sg_fr_addr = (sg_fr_ptr *) get_thread_bucket((void **) UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node))); return *sg_fr_addr; #elif defined(THREADS_FULL_SHARING) || defined(THREADS_CONSUMER_SHARING) - sg_fr_ptr *sg_fr_addr = (sg_fr_ptr *) get_thread_bucket((void **) &SgEnt_sg_fr(UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)))); + sg_fr_ptr *sg_fr_addr = (sg_fr_ptr *) get_thread_bucket((void **) &SgEnt_sg_fr((sg_ent_ptr) UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)))); return *sg_fr_addr; #else - return UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)); + return (sg_fr_ptr) UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)); #endif } @@ -809,15 +810,15 @@ static inline sg_fr_ptr get_subgoal_frame_for_abolish(sg_node_ptr sg_node USES_R *sg_fr_addr = NULL; return sg_fr; #elif defined(THREADS_FULL_SHARING) || defined(THREADS_CONSUMER_SHARING) - sg_fr_ptr *sg_fr_addr = (sg_fr_ptr *) get_thread_bucket((void **) &SgEnt_sg_fr(UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)))); + sg_fr_ptr *sg_fr_addr = (sg_fr_ptr *) get_thread_bucket((void **) &SgEnt_sg_fr((sg_ent_ptr) UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)))); sg_fr_ptr sg_fr = *sg_fr_addr; if (worker_id == 0) - abolish_thread_buckets((void **) &SgEnt_sg_fr(UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)))); + abolish_thread_buckets((void **) &SgEnt_sg_fr((sg_ent_ptr) UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)))); else *sg_fr_addr = NULL; return sg_fr; #else - return UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)); + return (sg_fr_ptr) UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)); #endif } diff --git a/OPTYap/tab.tries.c b/OPTYap/tab.tries.c index 5983b0df7..3a031601e 100644 --- a/OPTYap/tab.tries.c +++ b/OPTYap/tab.tries.c @@ -1081,12 +1081,12 @@ sg_fr_ptr subgoal_search(yamop *preg, CELL **Yaddr) { } else mode_directed = NULL; #endif /* MODE_DIRECTED_TABLING */ -#ifndef THREADS +#if !defined(THREADS_FULL_SHARING) && !defined(THREADS_CONSUMER_SHARING) new_subgoal_frame(sg_fr, preg, mode_directed); *sg_fr_end = sg_fr; TAG_AS_SUBGOAL_LEAF_NODE(current_sg_node); UNLOCK_SUBGOAL_NODE(current_sg_node); -#else /* THREADS */ +#else /* THREADS_FULL_SHARING || THREADS_CONSUMER_SHARING */ sg_ent_ptr sg_ent = (sg_ent_ptr) TrNode_sg_ent(current_sg_node); new_subgoal_frame(sg_fr, sg_ent); #ifdef THREADS_CONSUMER_SHARING @@ -1094,27 +1094,27 @@ sg_fr_ptr subgoal_search(yamop *preg, CELL **Yaddr) { #else SgFr_state(sg_fr) = ready; #endif /* THREADS_CONSUMER_SHARING */ - if (SgEnt_state(sg_ent) == ready) { + if (SgEnt_sg_ent_state(sg_ent) == ready) { LOCK(SgEnt_lock(sg_ent)); - if (SgEnt_state(sg_ent) == ready) { - SgEnt_gen_worker(sg_ent) = worker_id; + if (SgEnt_sg_ent_state(sg_ent) == ready) { SgEnt_code(sg_ent) = preg; SgEnt_init_mode_directed_fields(sg_ent, mode_directed); - SgEnt_state(sg_ent) = evaluating; + SgEnt_sg_ent_state(sg_ent) = evaluating; #ifdef THREADS_CONSUMER_SHARING + SgEnt_gen_worker(sg_ent) = worker_id; SgFr_state(sg_fr) = ready; #endif /* THREADS_CONSUMER_SHARING */ } UNLOCK(SgEnt_lock(sg_ent)); } *sg_fr_end = sg_fr; -#endif /* !THREADS */ +#endif /* !THREADS_FULL_SHARING && !THREADS_CONSUMER_SHARING */ } else { /* repeated tabled subgoal */ #ifndef THREADS UNLOCK_SUBGOAL_NODE(current_sg_node); #endif /* !THREADS */ - sg_fr = UNTAG_SUBGOAL_NODE(*sg_fr_end); + sg_fr = (sg_fr_ptr) UNTAG_SUBGOAL_NODE(*sg_fr_end); #ifdef LIMIT_TABLING if (SgFr_state(sg_fr) <= ready) { /* incomplete or ready */ remove_from_global_sg_fr_list(sg_fr); @@ -1485,7 +1485,9 @@ void free_answer_trie(ans_node_ptr current_node, int mode, int position) { void free_answer_hash_chain(ans_hash_ptr hash) { +#if defined(THREADS_NO_SHARING) || defined(THREADS_SUBGOAL_SHARING) CACHE_REGS +#endif /* THREADS_NO_SHARING || THREADS_SUBGOAL_SHARING */ while (hash) { ans_node_ptr chain_node, *bucket, *last_bucket; @@ -1496,7 +1498,7 @@ void free_answer_hash_chain(ans_hash_ptr hash) { while (! *bucket) bucket++; chain_node = *bucket; - TrNode_child(UNTAG_ANSWER_NODE(TrNode_parent(chain_node))) = chain_node; + TrNode_child((ans_node_ptr) UNTAG_ANSWER_NODE(TrNode_parent(chain_node))) = chain_node; while (++bucket != last_bucket) { if (*bucket) { while (TrNode_next(chain_node)) diff --git a/OPTYap/tab.tries.i b/OPTYap/tab.tries.i index b93c74d49..b70caadfa 100644 --- a/OPTYap/tab.tries.i +++ b/OPTYap/tab.tries.i @@ -369,7 +369,9 @@ static inline ans_node_ptr answer_trie_check_insert_gt_entry(sg_fr_ptr sg_fr, an #else static inline ans_node_ptr answer_trie_check_insert_entry(sg_fr_ptr sg_fr, ans_node_ptr parent_node, Term t, int instr) { #endif /* MODE_GLOBAL_TRIE_ENTRY */ +#if defined(THREADS_NO_SHARING) || defined(THREADS_SUBGOAL_SHARING) CACHE_REGS +#endif /* THREADS_NO_SHARING || THREADS_SUBGOAL_SHARING */ ans_node_ptr child_node; TABLING_ERROR_CHECKING(answer_trie_check_insert_(gt)_entry, IS_ANSWER_LEAF_NODE(parent_node)); @@ -1625,7 +1627,7 @@ static inline CELL *load_answer_loop(ans_node_ptr current_node) { #ifdef MODE_GLOBAL_TRIE_LOOP current_node = TrNode_parent(current_node); #else - current_node = UNTAG_ANSWER_NODE(TrNode_parent(current_node)); + current_node = (ans_node_ptr) UNTAG_ANSWER_NODE(TrNode_parent(current_node)); #endif /* MODE_GLOBAL_TRIE_LOOP */ do {