fix compilation errors for multi-threaded tabling
This commit is contained in:
parent
3218e922ce
commit
72f79b8c4f
@ -814,10 +814,10 @@ restore_opcodes(yamop *pc, yamop *max USES_REGS)
|
|||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
/* instructions type Otapl */
|
/* instructions type Otapl */
|
||||||
case _table_answer_resolution:
|
case _table_answer_resolution:
|
||||||
case _table_completion:
|
|
||||||
#ifdef THREADS_CONSUMER_SHARING
|
#ifdef THREADS_CONSUMER_SHARING
|
||||||
case _table_answer_resolution_completion:
|
case _table_answer_resolution_completion:
|
||||||
#endif /* THREADS_CONSUMER_SHARING */
|
#endif
|
||||||
|
case _table_completion:
|
||||||
case _table_load_answer:
|
case _table_load_answer:
|
||||||
case _table_retry:
|
case _table_retry:
|
||||||
case _table_retry_me:
|
case _table_retry_me:
|
||||||
|
@ -834,10 +834,10 @@
|
|||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
/* instructions type Otapl */
|
/* instructions type Otapl */
|
||||||
case _table_answer_resolution:
|
case _table_answer_resolution:
|
||||||
case _table_completion:
|
|
||||||
#ifdef THREADS_CONSUMER_SHARING
|
#ifdef THREADS_CONSUMER_SHARING
|
||||||
case _table_answer_resolution_completion:
|
case _table_answer_resolution_completion:
|
||||||
#endif /* THREADS_CONSUMER_SHARING */
|
#endif
|
||||||
|
case _table_completion:
|
||||||
case _table_load_answer:
|
case _table_load_answer:
|
||||||
case _table_retry:
|
case _table_retry:
|
||||||
case _table_retry_me:
|
case _table_retry_me:
|
||||||
|
@ -613,10 +613,10 @@
|
|||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
/* instructions type Otapl */
|
/* instructions type Otapl */
|
||||||
case _table_answer_resolution:
|
case _table_answer_resolution:
|
||||||
case _table_completion:
|
|
||||||
#ifdef THREADS_CONSUMER_SHARING
|
#ifdef THREADS_CONSUMER_SHARING
|
||||||
case _table_answer_resolution_completion:
|
case _table_answer_resolution_completion:
|
||||||
#endif /* THREADS_CONSUMER_SHARING */
|
#endif
|
||||||
|
case _table_completion:
|
||||||
case _table_load_answer:
|
case _table_load_answer:
|
||||||
case _table_retry:
|
case _table_retry:
|
||||||
case _table_retry_me:
|
case _table_retry_me:
|
||||||
|
@ -49,9 +49,9 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
** multithreading design for tabling (mandatory, define one) **
|
** multithreading design for tabling (mandatory, define one) **
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
//#define THREADS_NO_SHARING 1
|
#define THREADS_NO_SHARING 1
|
||||||
#define THREADS_SUBGOAL_SHARING 1
|
/* #define THREADS_SUBGOAL_SHARING 1 */
|
||||||
//#define THREADS_FULL_SHARING 1
|
/* #define THREADS_FULL_SHARING 1 */
|
||||||
/* #define THREADS_CONSUMER_SHARING 1 */
|
/* #define THREADS_CONSUMER_SHARING 1 */
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
@ -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 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 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 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_SUBGOAL_NODE(NODE) ((unsigned long int) (NODE) & ~(0x1))
|
||||||
#define UNTAG_ANSWER_NODE(NODE) ((ans_node_ptr)((unsigned long int) (NODE) & ~(0x3)))
|
#define UNTAG_ANSWER_NODE(NODE) ((unsigned long int) (NODE) & ~(0x3))
|
||||||
|
|
||||||
/* trie hashes */
|
/* trie hashes */
|
||||||
#define MAX_NODES_PER_TRIE_LEVEL 8
|
#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
|
Hash_previous(HASH) = NULL
|
||||||
#else
|
#else
|
||||||
#define TabEnt_init_mode_directed_field(TAB_ENT, MODE_ARRAY)
|
#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 SgFr_init_mode_directed_fields(SG_FR, MODE_ARRAY)
|
||||||
#define AnsHash_init_previous_field(HASH, SG_FR)
|
#define AnsHash_init_previous_field(HASH, SG_FR)
|
||||||
#endif /* MODE_DIRECTED_TABLING */
|
#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)
|
#if defined(THREADS_SUBGOAL_SHARING)
|
||||||
(void **) UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)),
|
(void **) UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node)),
|
||||||
#elif defined(THREADS_FULL_SHARING) || defined(THREADS_CONSUMER_SHARING)
|
#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
|
#endif
|
||||||
#ifdef SUBGOAL_TRIE_LOCK_USING_NODE_FIELD
|
#ifdef SUBGOAL_TRIE_LOCK_USING_NODE_FIELD
|
||||||
&TrNode_lock(sg_node)
|
&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)));
|
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;
|
return *sg_fr_addr;
|
||||||
#elif defined(THREADS_FULL_SHARING) || defined(THREADS_CONSUMER_SHARING)
|
#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;
|
return *sg_fr_addr;
|
||||||
#else
|
#else
|
||||||
return UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node));
|
return (sg_fr_ptr) UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node));
|
||||||
#endif
|
#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;
|
*sg_fr_addr = NULL;
|
||||||
return sg_fr;
|
return sg_fr;
|
||||||
#elif defined(THREADS_FULL_SHARING) || defined(THREADS_CONSUMER_SHARING)
|
#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;
|
sg_fr_ptr sg_fr = *sg_fr_addr;
|
||||||
if (worker_id == 0)
|
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
|
else
|
||||||
*sg_fr_addr = NULL;
|
*sg_fr_addr = NULL;
|
||||||
return sg_fr;
|
return sg_fr;
|
||||||
#else
|
#else
|
||||||
return UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node));
|
return (sg_fr_ptr) UNTAG_SUBGOAL_NODE(TrNode_sg_fr(sg_node));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1081,12 +1081,12 @@ sg_fr_ptr subgoal_search(yamop *preg, CELL **Yaddr) {
|
|||||||
} else
|
} else
|
||||||
mode_directed = NULL;
|
mode_directed = NULL;
|
||||||
#endif /* MODE_DIRECTED_TABLING */
|
#endif /* MODE_DIRECTED_TABLING */
|
||||||
#ifndef THREADS
|
#if !defined(THREADS_FULL_SHARING) && !defined(THREADS_CONSUMER_SHARING)
|
||||||
new_subgoal_frame(sg_fr, preg, mode_directed);
|
new_subgoal_frame(sg_fr, preg, mode_directed);
|
||||||
*sg_fr_end = sg_fr;
|
*sg_fr_end = sg_fr;
|
||||||
TAG_AS_SUBGOAL_LEAF_NODE(current_sg_node);
|
TAG_AS_SUBGOAL_LEAF_NODE(current_sg_node);
|
||||||
UNLOCK_SUBGOAL_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);
|
sg_ent_ptr sg_ent = (sg_ent_ptr) TrNode_sg_ent(current_sg_node);
|
||||||
new_subgoal_frame(sg_fr, sg_ent);
|
new_subgoal_frame(sg_fr, sg_ent);
|
||||||
#ifdef THREADS_CONSUMER_SHARING
|
#ifdef THREADS_CONSUMER_SHARING
|
||||||
@ -1094,27 +1094,27 @@ sg_fr_ptr subgoal_search(yamop *preg, CELL **Yaddr) {
|
|||||||
#else
|
#else
|
||||||
SgFr_state(sg_fr) = ready;
|
SgFr_state(sg_fr) = ready;
|
||||||
#endif /* THREADS_CONSUMER_SHARING */
|
#endif /* THREADS_CONSUMER_SHARING */
|
||||||
if (SgEnt_state(sg_ent) == ready) {
|
if (SgEnt_sg_ent_state(sg_ent) == ready) {
|
||||||
LOCK(SgEnt_lock(sg_ent));
|
LOCK(SgEnt_lock(sg_ent));
|
||||||
if (SgEnt_state(sg_ent) == ready) {
|
if (SgEnt_sg_ent_state(sg_ent) == ready) {
|
||||||
SgEnt_gen_worker(sg_ent) = worker_id;
|
|
||||||
SgEnt_code(sg_ent) = preg;
|
SgEnt_code(sg_ent) = preg;
|
||||||
SgEnt_init_mode_directed_fields(sg_ent, mode_directed);
|
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
|
#ifdef THREADS_CONSUMER_SHARING
|
||||||
|
SgEnt_gen_worker(sg_ent) = worker_id;
|
||||||
SgFr_state(sg_fr) = ready;
|
SgFr_state(sg_fr) = ready;
|
||||||
#endif /* THREADS_CONSUMER_SHARING */
|
#endif /* THREADS_CONSUMER_SHARING */
|
||||||
}
|
}
|
||||||
UNLOCK(SgEnt_lock(sg_ent));
|
UNLOCK(SgEnt_lock(sg_ent));
|
||||||
}
|
}
|
||||||
*sg_fr_end = sg_fr;
|
*sg_fr_end = sg_fr;
|
||||||
#endif /* !THREADS */
|
#endif /* !THREADS_FULL_SHARING && !THREADS_CONSUMER_SHARING */
|
||||||
} else {
|
} else {
|
||||||
/* repeated tabled subgoal */
|
/* repeated tabled subgoal */
|
||||||
#ifndef THREADS
|
#ifndef THREADS
|
||||||
UNLOCK_SUBGOAL_NODE(current_sg_node);
|
UNLOCK_SUBGOAL_NODE(current_sg_node);
|
||||||
#endif /* !THREADS */
|
#endif /* !THREADS */
|
||||||
sg_fr = UNTAG_SUBGOAL_NODE(*sg_fr_end);
|
sg_fr = (sg_fr_ptr) UNTAG_SUBGOAL_NODE(*sg_fr_end);
|
||||||
#ifdef LIMIT_TABLING
|
#ifdef LIMIT_TABLING
|
||||||
if (SgFr_state(sg_fr) <= ready) { /* incomplete or ready */
|
if (SgFr_state(sg_fr) <= ready) { /* incomplete or ready */
|
||||||
remove_from_global_sg_fr_list(sg_fr);
|
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) {
|
void free_answer_hash_chain(ans_hash_ptr hash) {
|
||||||
|
#if defined(THREADS_NO_SHARING) || defined(THREADS_SUBGOAL_SHARING)
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
|
#endif /* THREADS_NO_SHARING || THREADS_SUBGOAL_SHARING */
|
||||||
|
|
||||||
while (hash) {
|
while (hash) {
|
||||||
ans_node_ptr chain_node, *bucket, *last_bucket;
|
ans_node_ptr chain_node, *bucket, *last_bucket;
|
||||||
@ -1496,7 +1498,7 @@ void free_answer_hash_chain(ans_hash_ptr hash) {
|
|||||||
while (! *bucket)
|
while (! *bucket)
|
||||||
bucket++;
|
bucket++;
|
||||||
chain_node = *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) {
|
while (++bucket != last_bucket) {
|
||||||
if (*bucket) {
|
if (*bucket) {
|
||||||
while (TrNode_next(chain_node))
|
while (TrNode_next(chain_node))
|
||||||
|
@ -369,7 +369,9 @@ static inline ans_node_ptr answer_trie_check_insert_gt_entry(sg_fr_ptr sg_fr, an
|
|||||||
#else
|
#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) {
|
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 */
|
#endif /* MODE_GLOBAL_TRIE_ENTRY */
|
||||||
|
#if defined(THREADS_NO_SHARING) || defined(THREADS_SUBGOAL_SHARING)
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
|
#endif /* THREADS_NO_SHARING || THREADS_SUBGOAL_SHARING */
|
||||||
ans_node_ptr child_node;
|
ans_node_ptr child_node;
|
||||||
|
|
||||||
TABLING_ERROR_CHECKING(answer_trie_check_insert_(gt)_entry, IS_ANSWER_LEAF_NODE(parent_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
|
#ifdef MODE_GLOBAL_TRIE_LOOP
|
||||||
current_node = TrNode_parent(current_node);
|
current_node = TrNode_parent(current_node);
|
||||||
#else
|
#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 */
|
#endif /* MODE_GLOBAL_TRIE_LOOP */
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
Reference in New Issue
Block a user