From 9c100ae09dd7a2b62b95ea4908b68f75f33c24b1 Mon Sep 17 00:00:00 2001 From: vsc Date: Wed, 3 Feb 2010 22:52:45 +0000 Subject: [PATCH] fix INCREMENTAL_COPY delay P until Q has copied trailed bindings (should not be needed, but hey!) don't trust TR when copying bindings. --- OPTYap/or.engine.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/OPTYap/or.engine.c b/OPTYap/or.engine.c index c33b6a11b..f6479ed9e 100644 --- a/OPTYap/or.engine.c +++ b/OPTYap/or.engine.c @@ -41,15 +41,8 @@ static void share_private_nodes(int worker_q); ** Local macros ** ** ---------------------- */ -#if FULL_COPY -#define COMPUTE_SEGMENTS_TO_COPY_TO(Q) \ - REMOTE_start_global_copy(Q) = (CELL) (H0); \ - REMOTE_end_global_copy(Q) = (CELL) (H); \ - REMOTE_start_local_copy(Q) = (CELL) (B); \ - REMOTE_end_local_copy(Q) = (CELL) (LCL0); \ - REMOTE_start_trail_copy(Q) = (CELL) (Yap_TrailBase); \ - REMOTE_end_trail_copy(Q) = (CELL) (TR) -#else +#define INCREMENTAL_COPY 1 +#if INCREMENTAL_COPY #define COMPUTE_SEGMENTS_TO_COPY_TO(Q) \ REMOTE_start_global_copy(Q) = (CELL) (REMOTE_top_cp(Q)->cp_h); \ REMOTE_end_global_copy(Q) = (CELL) (B->cp_h); \ @@ -57,6 +50,14 @@ static void share_private_nodes(int worker_q); REMOTE_end_local_copy(Q) = (CELL) (REMOTE_top_cp(Q)); \ REMOTE_start_trail_copy(Q) = (CELL) (REMOTE_top_cp(Q)->cp_tr); \ REMOTE_end_trail_copy(Q) = (CELL) (TR) +#else +#define COMPUTE_SEGMENTS_TO_COPY_TO(Q) \ + REMOTE_start_global_copy(Q) = (CELL) (H0); \ + REMOTE_end_global_copy(Q) = (CELL) (H); \ + REMOTE_start_local_copy(Q) = (CELL) (B); \ + REMOTE_end_local_copy(Q) = (CELL) (LCL0); \ + REMOTE_start_trail_copy(Q) = (CELL) (Yap_TrailBase); \ + REMOTE_end_trail_copy(Q) = (CELL) (TR) #endif #define P_COPY_GLOBAL_TO(Q) \ @@ -182,6 +183,7 @@ int p_share_work(void) { sync_with_q: REMOTE_reply_signal(worker_q) = copy_done; while (LOCAL_reply_signal == sharing); + while (REMOTE_reply_signal(worker_q) != worker_ready); LOCAL_share_request = MAX_WORKERS; PUT_IN_REQUESTABLE(worker_id); @@ -315,6 +317,7 @@ sync_with_p: #if INCREMENTAL_COPY /* install fase --> TR and LOCAL_top_cp->cp_tr are equal */ aux_tr = ((choiceptr) LOCAL_start_local_copy)->cp_tr; + TR = ((choiceptr) LOCAL_start_end_copy)->cp_tr; Yap_NEW_MAHASH((ma_h_inner_struct *)H); while (TR != aux_tr) { aux_cell = TrailTerm(--aux_tr);