void Yap_init_local(void) { #ifdef YAPOR /* local data related to or-parallelism */ LOCAL = REMOTE + worker_id; Set_LOCAL_top_cp((choiceptr) Yap_LocalBase); LOCAL_top_or_fr = GLOBAL_root_or_fr; LOCAL_load = 0; LOCAL_share_request = MAX_WORKERS; LOCAL_reply_signal = worker_ready; #ifdef ENV_COPY INIT_LOCK(LOCAL_lock_signals); #endif /* ENV_COPY */ Set_LOCAL_prune_request(NULL); #endif /* YAPOR */ INIT_LOCK(LOCAL_lock); #ifdef TABLING /* local data related to tabling */ LOCAL_next_free_ans_node = NULL; LOCAL_top_sg_fr = NULL; LOCAL_top_dep_fr = GLOBAL_root_dep_fr; #ifdef YAPOR Set_LOCAL_top_cp_on_stack((choiceptr) Yap_LocalBase); /* ??? */ LOCAL_top_susp_or_fr = GLOBAL_root_or_fr; #endif /* YAPOR */ #endif /* TABLING */ return; }
void make_root_choice_point(void) { if (worker_id == 0) { LOCAL_top_cp = GLOBAL_root_cp = OrFr_node(GLOBAL_root_or_fr) = B; } else { B = LOCAL_top_cp = GLOBAL_root_cp; B->cp_tr = TR = ((choiceptr) (worker_offset(0) + (CELL)(B)))->cp_tr; } // B->cp_h = H0; B->cp_ap = GETWORK; B->cp_or_fr = GLOBAL_root_or_fr; LOCAL_top_or_fr = GLOBAL_root_or_fr; LOCAL_load = 0; Set_LOCAL_prune_request(NULL); BRANCH(worker_id, 0) = 0; #ifdef TABLING_INNER_CUTS LOCAL_pruning_scope = NULL; #endif /* TABLING_INNER_CUTS */ #ifdef TABLING LOCAL_top_cp_on_stack = LOCAL_top_cp; adjust_freeze_registers(); #endif /* TABLING */ return; }